Converted SLG ROS2 transformers: Tag, InterProcessStimulus
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 3d24e3b..a9af166 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
@@ -24,13 +24,13 @@
throw new IllegalStateException("Utility class");
}
- static final String SRC_TYPE = "SRC";
- static final String SRC_EXT = ".c";
- static final String SRC_FOLDER = "/_src/";
+ public static final String SRC_TYPE = "SRC";
+ public static final String SRC_EXT = ".c";
+ public 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 INC_TYPE = "INC";
+ public static final String INC_EXT = ".h";
+ public static final String INC_FOLDER = "/_inc/";
public static final String OTHER_TYPE = "OTHER";
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
index b196482..890f60b 100644
--- 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
@@ -22,11 +22,17 @@
throw new IllegalStateException("Utility class");
}
- static def String toPackageXML(RosIpStimulusTranslationunit tu) '''
+ static def String toSrvFile() '''
+ int64 request
+ ---
+ int64 response
+ '''
+
+ static def String toPackageXML(String moduleName) '''
<?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>
+ <name>«moduleName»</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="fixedterm.Patrick.Will@de.bosch.com">wlp8fe</maintainer>
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosIpStimulusTranslationunit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosIpStimulusTranslationunit.java
deleted file mode 100644
index d4dc1eb..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosIpStimulusTranslationunit.java
+++ /dev/null
@@ -1,105 +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.generators;
-
-import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
-import org.eclipse.app4mc.slg.ros2.transformers.utils.Utils;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtend2.lib.StringConcatenation;
-
-public class RosIpStimulusTranslationunit extends TranslationUnit {
- private InterProcessStimulus ip;
- private OutputBuffer outputBuffer;
-
- public RosIpStimulusTranslationunit(final OutputBuffer outputBuffer, final InterProcessStimulus ip) {
- super();
- this.ip = ip;
- this.outputBuffer = outputBuffer;
-
- this.genFiles();
- }
-
- public String getSrcFile() {
- return (Utils.toIdlCompliantName(this.getModuleName()) + ".srv");
- }
-
- public String getSrcPath() {
- return getModulePath() + "/srv/" + getSrcFile();
- }
-
- public String getBasePath() {
- return "services";
- }
-
- public String getModuleName() {
- return ip.getName() + "_service";
- }
-
- public boolean genFiles() {
- return srcAppend(toSrvFile().toString());
- }
-
- public CharSequence getMakeFilePath() {
- StringConcatenation _builder = new StringConcatenation();
- String _basePath = this.getBasePath();
- _builder.append(_basePath);
- _builder.append("/");
- String _moduleName = this.getModuleName();
- _builder.append(_moduleName);
- _builder.newLineIfNotEmpty();
- return _builder;
- }
-
- public CharSequence toSrvFile() {
- StringConcatenation _builder = new StringConcatenation();
- _builder.append("int64 request");
- _builder.newLine();
- _builder.append("---");
- _builder.newLine();
- _builder.append("int64 response");
- _builder.newLine();
- return _builder;
- }
-
- public String getModulePath() {
- return this.getBasePath() + "/" + this.getModuleName();
- }
-
- @Override
- public String getIncFile() {
- return getModuleName() + ".hpp";
- }
-
- public String getIncPath() {
- return getModulePath() + "/_inc/" + getIncFile();
- }
-
- public boolean isIncFileEmpty() {
- return !outputBuffer.bufferExists("INC", getModulePath() + "/_inc/" + getModuleName());
- }
-
- public boolean isSrcFileEmpty() {
- return !outputBuffer.bufferExists("SRC", getModulePath() + "/_src/" + getModuleName());
- }
-
- public boolean incAppend(final String str) {
- return outputBuffer.appendTo("INC", getModulePath() + "/_inc/" + getModuleName(), str);
- }
-
- public boolean srcAppend(final String str) {
- return outputBuffer.appendTo("SRC", getModulePath() + "/_src/" + getModuleName(), str);
- }
-
-}
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
deleted file mode 100644
index 6c59402..0000000
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagTranslationUnit.java
+++ /dev/null
@@ -1,112 +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.generators;
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.app4mc.amalthea.model.Amalthea;
-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.sw.RosTaskTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class RosTagTranslationUnit extends TranslationUnit {
- private RosTaskTransformer rosTaskTransformer;
- private Tag tag;
- private Amalthea model;
-
- private HashSet<String> header = new HashSet<>();
- private List<String> declaration = new LinkedList<>();
- private List<String> initialization = new LinkedList<>();
- private List<String> calls = new LinkedList<>();
- private List<String> serviceCallbacks = new LinkedList<>();
- private OutputBuffer outputBuffer;
-
- public RosTagTranslationUnit(final OutputBuffer outputBuffer, final RosTaskTransformer rosTaskTransformer,
- final Tag tag, final Amalthea model) {
- super();
- this.tag = tag;
- this.model = model;
- this.rosTaskTransformer = rosTaskTransformer;
- this.outputBuffer = outputBuffer;
-
- this.genFiles();
- }
-
- public void genFiles() {
- if (model != null && model.getSwModel() != null) {
- for (Task task : model.getSwModel().getTasks()) {
- if (task.getTags().contains(tag)) {
- final RosTaskTranslationUnit tu = (RosTaskTranslationUnit) rosTaskTransformer.transform(task, null);
- header.add(tu.getHeaders());
- declaration.add(tu.getDeclaration());
- initialization.add(tu.getInitialisation(this.getModuleName()));
- calls.add(tu.getCallback());
- serviceCallbacks.add(tu.getServiceCallback());
- }
- }
- }
- srcAppend(RosTagGenerator.toCpp(tag, getModuleName(), header, declaration, initialization, calls, serviceCallbacks));
- }
-
- public String getBasePath() {
- return "";
- }
-
- public String getModuleName() {
- return tag.getName();
- }
-
- public String getModulePath() {
- return getBasePath() + "/" + getModuleName();
- }
-
- @Override
- public String getIncFile() {
- return getModuleName() + ".hpp";
- }
-
- @Override
- public String getSrcFile() {
- return getModuleName() + ".cpp";
- }
-
- public String getIncPath() {
- return getModulePath() + "/_inc/" + getIncFile();
- }
-
- public String getSrcPath() {
- return getModulePath() + "/_src/" + getSrcFile();
- }
-
- public boolean isIncFileEmpty() {
- return !outputBuffer.bufferExists("INC", getModulePath() + "/_inc/" + getModuleName());
- }
-
- public boolean isSrcFileEmpty() {
- return !outputBuffer.bufferExists("SRC", getModulePath() + "/_src/" + getModuleName());
- }
-
- public boolean incAppend(final String str) {
- return outputBuffer.appendTo("INC", getModulePath() + "/_inc/" + getModuleName(), str);
- }
-
- public boolean srcAppend(final String str) {
- return outputBuffer.appendTo("SRC", getModulePath() + "/_src/" + getModuleName(), str);
- }
-
-}
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
index f8d76e8..44c2b4f 100644
--- 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
@@ -24,13 +24,13 @@
throw new IllegalStateException("Utility class");
}
- static final String SRC_TYPE = "SRC";
- static final String SRC_EXT = ".cpp";
- static final String SRC_FOLDER = "/_src/";
+ public static final String SRC_TYPE = "SRC";
+ public static final String SRC_EXT = ".cpp";
+ public 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 INC_TYPE = "INC";
+ public static final String INC_EXT = ".h";
+ public static final String INC_FOLDER = "/_inc/";
public static final String OTHER_TYPE = "OTHER";
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
index 87de071..8367bbc 100644
--- 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
@@ -16,51 +16,97 @@
package org.eclipse.app4mc.slg.ros2.transformers.common;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
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.amalthea.model.Task;
+import org.eclipse.app4mc.slg.commons.m2t.SLGTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.generators.RosTagGenerator;
+import org.eclipse.app4mc.slg.ros2.generators.RosTaskTranslationUnit;
+import org.eclipse.app4mc.slg.ros2.transformers.RosBaseTransformer;
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 {
+public class RosTagTransformer extends RosBaseTransformer {
- @Inject private OutputBuffer outputBuffer;
@Inject private RosTaskTransformer rosTaskTransformer;
- private final HashMap<ArrayList<?>, RosTagTranslationUnit> cache = CollectionLiterals.newHashMap();
+ // ---------- generic part "def create new transform(...)" ----------
- 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);
+ private final Map<List<Object>, SLGTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, SLGTranslationUnit> getCache() {
+ return this.transformCache;
+ }
+
+ public SLGTranslationUnit transform(final Tag tag, final Amalthea model) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(tag, model));
+ final SLGTranslationUnit tu;
+
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
}
- RosTagTranslationUnit tu = new RosTagTranslationUnit(this.outputBuffer,
- this.rosTaskTransformer, tag, model);
- _result = tu;
- cache.put(key, _result);
+ tu = createTranslationUnit(tag, model);
+ transformCache.put(key, tu);
}
- _init_transform(_result, tag, model);
- return _result;
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, tag, model);
+ }
+
+ return tu;
}
- private void _init_transform(final RosTagTranslationUnit it, final Tag tag, final Amalthea model) {
+ // ---------------------------------------------------
+
+ private SLGTranslationUnit createTranslationUnit(final Tag tag, final Amalthea model) {
+ if ((tag == null)) {
+ return new SLGTranslationUnit("UNSPECIFIED TAG");
+ } else {
+ String basePath = "";
+ String moduleName = tag.getName();
+ String call = "";
+ return new SLGTranslationUnit(basePath, moduleName, call);
+ }
}
- @Override
- public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
- return this.cache;
+ private void doTransform(final SLGTranslationUnit tu, final Tag tag, final Amalthea model) {
+ genFiles(tu, tag, model);
+ }
+
+ private void genFiles(final SLGTranslationUnit tu, final Tag tag, final Amalthea model) {
+
+ HashSet<String> header = new HashSet<>();
+ List<String> declaration = new LinkedList<>();
+ List<String> initialization = new LinkedList<>();
+ List<String> calls = new LinkedList<>();
+ List<String> serviceCallbacks = new LinkedList<>();
+
+ if (model != null && model.getSwModel() != null) {
+ for (Task task : model.getSwModel().getTasks()) {
+ if (task.getTags().contains(tag)) {
+ final RosTaskTranslationUnit taskTU = (RosTaskTranslationUnit) rosTaskTransformer.transform(task, null);
+ header.add(taskTU.getHeaders());
+ declaration.add(taskTU.getDeclaration());
+ initialization.add(taskTU.getInitialisation(tu.getModuleName()));
+ calls.add(taskTU.getCallback());
+ serviceCallbacks.add(taskTU.getServiceCallback());
+ }
+ }
+ }
+
+ srcAppend(tu, RosTagGenerator.toCpp(tag, tu.getModuleName(), header, declaration, initialization, calls, serviceCallbacks));
}
}
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
index cacf73b..7bb508c 100644
--- 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
@@ -15,38 +15,96 @@
package org.eclipse.app4mc.slg.ros2.transformers.stimuli;
+import static org.eclipse.app4mc.slg.ros2.transformers.RosBaseSettings.OTHER_TYPE;
+
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
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.commons.m2t.SLGTranslationUnit;
import org.eclipse.app4mc.slg.ros2.generators.RosInterProcessStimulusGenerator;
-import org.eclipse.app4mc.slg.ros2.generators.RosIpStimulusTranslationunit;
+import org.eclipse.app4mc.slg.ros2.transformers.RosBaseTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.utils.Utils;
import org.eclipse.app4mc.transformation.util.OutputBuffer;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
-public class RosInterProcessStimulusTransformer extends SLGBaseTransformer {
+public class RosInterProcessStimulusTransformer extends RosBaseTransformer {
@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;
+ // ---------- generic part "def create new transform(...)" ----------
+
+ private final Map<List<Object>, SLGTranslationUnit> transformCache = new HashMap<>();
+
+ public Map<List<Object>, SLGTranslationUnit> getCache() {
+ return this.transformCache;
+ }
+
+ public SLGTranslationUnit transform(final InterProcessStimulus stimulus) {
+ final List<Object> key = new ArrayList<>(Arrays.asList(stimulus));
+ final SLGTranslationUnit tu;
+
+ synchronized (transformCache) {
+ if (transformCache.containsKey(key)) {
+ return transformCache.get(key);
+ }
+ tu = createTranslationUnit(stimulus);
+ transformCache.put(key, tu);
+ }
+
+ // if translation unit is newly created and valid -> create files
+ if (tu.isValid()) {
+ doTransform(tu, stimulus);
+ }
+
+ return tu;
+ }
+
+ // ---------------------------------------------------
+
+ private SLGTranslationUnit createTranslationUnit(final InterProcessStimulus stimulus) {
+ if ((stimulus == null)) {
+ return new SLGTranslationUnit("UNSPECIFIED INTER PROCESS STIMULUS");
+ } else {
+ String basePath = "services";
+ String moduleName = stimulus.getName() + "_service";
+ String call = "";
+ return new SLGTranslationUnit(basePath, moduleName, call);
+ }
}
@Override
- public Map<ArrayList<?>, ? extends TranslationUnit> getCache() {
- throw new UnsupportedOperationException("TODO: auto-generated method stub");
+ public String getSrcFile(SLGTranslationUnit tu) {
+ return (Utils.toIdlCompliantName(tu.getModuleName()) + ".srv");
}
+
+ @Override
+ public String getSrcPath(SLGTranslationUnit tu) {
+ return tu.getModulePath() + "/srv/" + getSrcFile(tu);
+ }
+
+ @Override
+ public boolean srcAppend(SLGTranslationUnit tu, String str) {
+ return outputBuffer.appendTo(OTHER_TYPE, getSrcPath(tu), str);
+ }
+
+ private void doTransform(final SLGTranslationUnit tu, final InterProcessStimulus stimulus) {
+ genFiles(tu, stimulus);
+ }
+
+ private void genFiles(final SLGTranslationUnit tu, final InterProcessStimulus ip) {
+
+ srcAppend(tu, RosInterProcessStimulusGenerator.toSrvFile());
+
+ outputBuffer.appendTo(OTHER_TYPE, tu.getModulePath() + "/CMakeLists.txt", RosInterProcessStimulusGenerator.toCMake());
+ outputBuffer.appendTo(OTHER_TYPE, tu.getModulePath() + "/package.xml", RosInterProcessStimulusGenerator.toPackageXML(tu.getModuleName()));
+ }
+
}