Merge branch 'app4mc0.9.7/rttca' into master
Compliant to Amalthea 0.9.8
diff --git a/CONTRIBUTING b/CONTRIBUTING
new file mode 100644
index 0000000..500ac97
--- /dev/null
+++ b/CONTRIBUTING
@@ -0,0 +1,55 @@
+
+# Contributing to Eclipse APP4MC
+
+Thanks for your interest in this project.
+
+## Project description
+
+Application Platform Project for Multi Core
+
+* https://projects.eclipse.org/projects/technology.app4mc
+
+## Developer resources
+
+Information regarding source code management, builds, coding standards, and
+more.
+
+* https://projects.eclipse.org/projects/technology.app4mc/developer
+
+The project maintains the following source code repositories
+
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.addon.migration
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.examples
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.tools
+
+This project uses Bugzilla to track ongoing development and issues.
+
+* Search for issues: https://bugs.eclipse.org/bugs/buglist.cgi?product=APP4MC
+* Create a new report:
+ https://bugs.eclipse.org/bugs/enter_bug.cgi?product=APP4MC
+
+Be sure to search for existing bugs before you create another one. Remember that
+contributions are always welcome!
+
+## Eclipse Contributor Agreement
+
+Before your contribution can be accepted by the project team contributors must
+electronically sign the Eclipse Contributor Agreement (ECA).
+
+* http://www.eclipse.org/legal/ECA.php
+
+Commits that are provided by non-committers must have a Signed-off-by field in
+the footer indicating that the author is aware of the terms by which the
+contribution has been provided to the project. The non-committer must
+additionally have an Eclipse Foundation account and must have a signed Eclipse
+Contributor Agreement (ECA) on file.
+
+For more information, please see the Eclipse Committer Handbook:
+https://www.eclipse.org/projects/handbook/#resources-commit
+
+## Contact
+
+Contact the project developers via the project's "dev" list.
+
+* https://dev.eclipse.org/mailman/listinfo/app4mc-dev
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..2273b2c
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,289 @@
+
+# Notices for Eclipse APP4MC
+
+This content is produced and maintained by the Eclipse APP4MC project.
+
+* Project home: https://projects.eclipse.org/projects/technology.app4mc
+
+## Trademarks
+
+Eclipse APP4MC, and APP4MC are trademarks of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License v. 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+SPDX-License-Identifier: EPL-2.0
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.addon.migration
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.examples
+* https://git.eclipse.org/r/plugins/gitiles/app4mc/org.eclipse.app4mc.tools
+
+## Third-party Content
+
+This project leverages the following third party content.
+
+Apache Commons Lang (2.6)
+
+* License: Apache License, 2.0
+
+Apache Commons Lang (3.1.0)
+
+* License: Apache License, 2.0
+
+Apache Commons Math (2.1.0)
+
+* License: Apache License, 2.0, New BSD license
+
+Apache Commons Math (3.5.0)
+
+* License: Apache License, 2.0, New BSD License
+
+Apache Jena-ARQ (2.10.0)
+
+* License: Apache-2.0
+
+Apache Jena-Core (2.7.1)
+
+* License: Apache License 2.0, New BSD license
+
+Apache jena-iri (0.9.2)
+
+* License: Apache License, 2.0
+
+Apache Jena-TDB (0.10.0)
+
+* License: Apache-2.0
+
+ArduiPi Adafruit SSD1306 OLED Driver SHA Commit
+37956b16aa8514dde5b6ecba04a20cc0babe39f1 (n/a)
+
+* License: BSD-2-Clause
+
+BCEL.Jar (5.2)
+
+* License: Apache License, 2.0
+
+choco (4.0.6)
+
+* License: BSD-4-Clause
+* Project: http://www.choco-solver.org
+* Source: https://github.com/chocoteam/choco-solver
+
+choco-cutoffseq (1.0.4)
+
+* License: BSD-4-Clause
+* Project: https://github.com/chocoteam/cutoffseq
+* Source: https://github.com/chocoteam/cutoffseq/releases/tag/pf4cs-1.0.4
+
+choco-graph (4.2.0)
+
+* License: BSD-4-Clause AND BSD-2-Clause AND BSD-3-Clause
+* Project: https://github.com/chocoteam/choco-graph
+* Source: https://github.com/chocoteam/choco-graph
+
+choco-sat (1.0.2)
+
+* License: BSD-3-Clause
+* Project: https://github.com/chocoteam/choco-sat
+* Source: https://github.com/chocoteam/choco-sat
+
+choco-solver (4.0.9)
+
+* License: BSD-4-Clause
+* Project: http://www.choco-solver.org
+* Source: https://github.com/chocoteam/choco-solver/releases/tag/4.0.9
+
+cpprof-java (1.3.0)
+
+* License: MIT
+* Project: https://github.com/cp-profiler/java-integration
+* Source: https://github.com/cp-profiler/java-integration
+
+dk.brics.automaton (18.01.2018)
+
+* License: BSD 3-Clause
+* Project: http://www.brics.dk/automaton/
+* Source: https://github.com/cs-au-dk/dk.brics.automaton
+
+easymock (3.3.1)
+
+* License: Apache License, 2.0
+* Project: http://easymock.org/
+* Source: https://github.com/easymock/easymock/archive/easymock-3.3.1.zip
+
+Google Guava (15.0.0)
+
+* License: Apache License, 2.0
+
+Google Guava (21.0)
+
+* License: Apache License, 2.0
+
+INCHRON Realtime System Model (2.98.2)
+
+* License: EPL-2.0
+* Project: http://www.inchron.com
+* Source: http://eclipse.inchron.com/realtime/updatesites/release/2.98.2/
+
+Inchron Realtime System model (2.98.5)
+
+* License: EPL-2.0
+* Project: http://www.inchron.com
+* Source: http://eclipse.inchron.com/realtime/updatesites/release/2.98.5/
+
+java_cup runtime Version: 10k (n/a)
+
+* License: Java Cup License (MIT Style)
+
+javassist (3.19.0)
+
+* License: Mozilla Public License 1.1 (MPL), Apache 2.0
+* Project: http://jboss-javassist.github.io/javassist/
+* Source:
+ https://github.com/jboss-javassist/javassist/archive/rel_3_19_0_ga.zip
+
+jaxen (1.1.6)
+
+* License: BSD License, W3C (One File)
+* Project: https://github.com/codehaus/jaxen
+* Source: https://github.com/codehaus/jaxen/tree/V_1_1_6_Final/jaxen
+
+jcl-over-slf4j-1.7.10.jar (1.7.10)
+
+* License: Apache-2.0
+
+jdom (2.0.6)
+
+* License: JDom License (based on Apache 1.1 Style License)
+* Project: http://www.jdom.org
+* Source: http://www.jdom.org/dist/binary/jdom-2.0.6.zip
+
+jenetics (3.0.1)
+
+* License: Apache License, 2.0
+* Project: http://jenetics.io/
+* Source: https://github.com/jenetics/jenetics/releases/tag/v3.0.1
+
+Jenetics (3.8.0)
+
+* License: Apache-2.0
+* Project: http://jenetics.io/
+* Source: https://github.com/jenetics/jenetics/tree/v3.8.0
+
+jgrapht (0.9.0)
+
+* License: Eclipse Public License 1.0
+* Project: http://jgrapht.org/
+
+jgrapht-core (1.1.0)
+
+* License: EPL-1.0 OR LGPL-2.1-or-later
+
+JHHC-SR04 (n/a)
+
+* License: Pending
+
+JHPWMDriver (n/a)
+
+* License: MIT
+
+JUnit (4.12)
+
+* License: Eclipse Public License
+
+log4j (1.2.15)
+
+* License: Apache License, 2.0
+
+log4j over slf4j 1.7.10.jar (1.7.10)
+
+* License: Apache-2.0
+
+mxGraph (3.7.0.0)
+
+* License: Apache-2.0 AND BSD-3-Clause
+* Project: https://jgraph.github.io/mxgraph/
+* Source: https://github.com/jgraph/mxgraph
+
+net.sf.trove4j:trove4j (3.0.3)
+
+* License: GNU Library or 'Lesser' General Public License (LGPL) 2.1, MIT Style
+ (2 Files)
+
+ojalgo (39.0)
+
+* License: MIT License, BSD, Public Domain
+* Project: http://ojalgo.org/
+* Source: https://github.com/optimatika/ojAlgo/tree/v39
+
+org.xerial.sqlite (3.7.2)
+
+* License: Apache License, 2.0, ISC License
+
+pf4cs (1.0.5)
+
+* License: BSD-4-Clause
+* Project: https://github.com/chocoteam/pf4cs
+* Source: https://github.com/chocoteam/pf4cs
+
+plantUML (2018.8)
+
+* License: (EPL-1.0 OR BSD-3-CLAUSE OR MIT OR Apache-2.0 OR GPL-2.0-or-later OR
+ LGPL-3.0-or-later) AND (EPL-1.0 OR BSD-3-CLAUSE OR MIT OR Apache-2.0 OR
+ GPL-2.0-or-later OR LGPL-3.0-or-later OR AGPL-3.0-or-later) AND BSD-3-Clause
+ AND MIT AND Apache-2.0
+
+PlantUML EPL Version: 8000 (n/a)
+
+* License: Eclipse Public License + Public Domain (One File)
+
+protobuf-java (3.2.0)
+
+* License: New BSD license
+
+resolver.jar (1.2)
+
+* License: Apache License, 2.0
+
+serializer.jar (2.7.1)
+
+* License: Apache License, 2.0
+
+SLF4J API Module (slf4j-api-1.7.10.jar) (1.7.10)
+
+* License: MIT
+
+xalan 2.7.1 top level jar (2.7.1)
+
+* License: Apache License, 2.0
+
+Xerces (2.9.0)
+
+* License: Apache License, 2.0
+
+xml-apis.jar (1.3.04)
+
+* License: Apache License, 2.0, Public Domain, W3C
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/eclipse-tools/cdgen/.classpath b/eclipse-tools/cdgen/.classpath
new file mode 100755
index 0000000..2874ea5
--- /dev/null
+++ b/eclipse-tools/cdgen/.classpath
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+ <attributes>
+ <attribute name="module" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.project b/eclipse-tools/cdgen/.project
old mode 100644
new mode 100755
similarity index 93%
rename from eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.project
rename to eclipse-tools/cdgen/.project
index 7614bd0..f145eda
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.project
+++ b/eclipse-tools/cdgen/.project
@@ -1,28 +1,28 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>net.sourceforge.plantuml</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>cdgen</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.settings/org.eclipse.jdt.core.prefs b/eclipse-tools/cdgen/.settings/org.eclipse.jdt.core.prefs
old mode 100644
new mode 100755
similarity index 92%
rename from eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.settings/org.eclipse.jdt.core.prefs
rename to eclipse-tools/cdgen/.settings/org.eclipse.jdt.core.prefs
index a698e59..5caa538
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.settings/org.eclipse.jdt.core.prefs
+++ b/eclipse-tools/cdgen/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,13 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/eclipse-tools/cdgen/META-INF/MANIFEST.MF b/eclipse-tools/cdgen/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..9e3c6d6
--- /dev/null
+++ b/eclipse-tools/cdgen/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: app4mc.sniplets
+Bundle-ManifestVersion: 2
+Bundle-Name: GSOC2019
+Bundle-SymbolicName: cdgen
+Bundle-Version: 1.0.0.qualifier
+Export-Package: org.eclipse.app4mc.cdgen.utils,
+ org.eclipse.app4mc.cdgen
+Require-Bundle: org.eclipse.app4mc.amalthea.model,
+ org.junit,
+ org.eclipse.jdt.annotation
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Ram Prasath Govindarajan
diff --git a/eclipse-tools/cdgen/README.md b/eclipse-tools/cdgen/README.md
new file mode 100644
index 0000000..01067db
--- /dev/null
+++ b/eclipse-tools/cdgen/README.md
@@ -0,0 +1,33 @@
+# CdGen
+> CdGen is a model to text converter tool which is used for real time analysis of the Amalthea System model on the Adapteva Parallella Hardware.
+
+For more details please refer to [documentation][documentation].
+
+## Installation
+
+* [APP4MC version 0.9.5][APP4MC]
+* [Java SE 10][JAVA]
+* [Source code for the scheduler][here]
+
+## User Guide
+
+* Code Generation
+1. Download and Unzip APP4MC
+2. Install Java SE 10
+3. Start APP4MC and create a new workspace
+4. Import the project from git or any options available.
+5. Select checkFileCreateGUI.java from the checks directory andright click and run as Java application
+6. Select the scheduler, task preemption, file source of corresponding scheduler and Model of choice.
+7. Click start for code generation.
+8. Code is generated in the root location with a timestamp.
+
+* Compilation and Execution
+9. Replace the generated code in place of the src directory in below [setup][setup].
+10. Build, deploy and Run the code on Parallella.
+
+<!-- Markdown link & img dfn's -->
+[documentation]:https://cdgendoc.readthedocs.io/en/latest/
+[setup]:https://git.eclipse.org/c/app4mc/org.eclipse.app4mc.examples.git/commit/?id=69a0a24f120bb0d79cbd688081ca697368e252f7
+[APP4MC]:https://www.eclipse.org/app4mc/downloads/
+[JAVA]:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase10-4425482.html
+[here]:https://git.eclipse.org/c/app4mc/org.eclipse.app4mc.examples.git/commit/?id=69a0a24f120bb0d79cbd688081ca697368e252f7
diff --git a/eclipse-tools/sca2amalthea/plugins/org.eclipse.app4mc.sca.ui/bin/.gitignore b/eclipse-tools/cdgen/bin/.gitignore
similarity index 100%
rename from eclipse-tools/sca2amalthea/plugins/org.eclipse.app4mc.sca.ui/bin/.gitignore
rename to eclipse-tools/cdgen/bin/.gitignore
diff --git a/eclipse-tools/cdgen/build.properties b/eclipse-tools/cdgen/build.properties
new file mode 100644
index 0000000..b107977
--- /dev/null
+++ b/eclipse-tools/cdgen/build.properties
@@ -0,0 +1,3 @@
+source.. = src/
+bin.includes = META-INF/,\
+ .
diff --git a/eclipse-tools/cdgen/cdgen.graphics/browse.png b/eclipse-tools/cdgen/cdgen.graphics/browse.png
new file mode 100644
index 0000000..bcf72c1
--- /dev/null
+++ b/eclipse-tools/cdgen/cdgen.graphics/browse.png
Binary files differ
diff --git a/eclipse-tools/cdgen/cdgen.graphics/close.png b/eclipse-tools/cdgen/cdgen.graphics/close.png
new file mode 100644
index 0000000..fba904f
--- /dev/null
+++ b/eclipse-tools/cdgen/cdgen.graphics/close.png
Binary files differ
diff --git a/eclipse-tools/cdgen/cdgen.graphics/help.png b/eclipse-tools/cdgen/cdgen.graphics/help.png
new file mode 100644
index 0000000..8960bd6
--- /dev/null
+++ b/eclipse-tools/cdgen/cdgen.graphics/help.png
Binary files differ
diff --git a/eclipse-tools/cdgen/cdgen.graphics/start.png b/eclipse-tools/cdgen/cdgen.graphics/start.png
new file mode 100644
index 0000000..371a38f
--- /dev/null
+++ b/eclipse-tools/cdgen/cdgen.graphics/start.png
Binary files differ
diff --git a/eclipse-tools/cdgen/models/democarMulticore/AMALTHEA_Democar_MappingExample.amxmi b/eclipse-tools/cdgen/models/democarMulticore/AMALTHEA_Democar_MappingExample.amxmi
new file mode 100644
index 0000000..869b8e0
--- /dev/null
+++ b/eclipse-tools/cdgen/models/democarMulticore/AMALTHEA_Democar_MappingExample.amxmi
@@ -0,0 +1,1118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<am:Amalthea xmlns:am="http://app4mc.eclipse.org/amalthea/0.9.5" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmi:version="2.0">
+ <commonElements>
+ <tags name="SwcEngineController" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcActuators" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcBrakeForceArbiter" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcABSCalculation" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcSensors" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcSensorPostprocessing" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcCylNumObserver" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcBrakeForceCalculation" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcEngineSensors" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcInjIgnActuation" tagType="SOFTWARE_COMPONENT" />
+ <coreClassifiers name="FPU" />
+ </commonElements>
+ <swModel>
+ <tasks name="Task_ESSP0" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="EcuVehicleSpeedSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="VehicleSpeedSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="VehicleSpeedSensorVoter?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP1" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="CylNumObserver?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="DecelerationSensorDiagnosis?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP2" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="WheelSpeedSensorDiagnosis?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakePedalSensorDiagnosis?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP3" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="MassAirFlowSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BaseFuelMass?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="TransientFuelMass?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="TotalFuelMass?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="InjectionTimeActuation?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP4" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="APedSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="APedVoter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="ThrottleController?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="ThrottleActuator?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP5" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintInclude] Requires Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="ThrottleSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuBrakePedalSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakePedalSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakePedalSensorVoter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="CheckPlausability?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeSafetyMonitor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeForceCalculation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeForceArbiter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="StopLightActuator?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuStopLightActuator?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP6" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintInclude] Requires Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="VehicleStateMonitor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuDecelerationSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="DecelerationSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="DecelerationSensorVoter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="ABSCalculation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeForceActuation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="CaliperPositionCalculation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeActuator?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuBrakeActuator?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP7" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="VehicleSpeedSensorDiagnosis?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeActuatorMonitor?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP8" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="DiagnosisArbiter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="IgnitionTiming?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="IgnitionTimeActuation?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP9" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="EcuWheelSpeedSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="WheelSpeedSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="WheelSpeedSensorVoter?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <runnables name="ABSCalculation" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VotedDecelerationRate?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VotedVehicleSpeed?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VotedWheelSpeed?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ArbitratedBrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="ABSActivation?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ABSMode?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="APedSensor" tags="SwcEngineSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="APedSensor1Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="APedSensor2Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="APedPosition1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="APedPosition2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="APedVoter" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="APedPosition1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="APedPosition2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedAPedPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BaseFuelMass" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="MassAirFlow?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BaseFuelMassPerStroke?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="MAFRate?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeActuator" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CaliperPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeForceVoltage?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeActuatorMonitor" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceFeedback?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeForceActuation" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ABSActivation?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ABSMode?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeForce?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceCurrent?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeForceArbiter" tags="SwcBrakeForceArbiter?type=Tag" activations="Timer_20MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CalculatedBrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyState?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="ArbitratedBrakeForce?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeForceCalculation" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceFeedback?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ArbitratedDiagnosisRequest?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="MonitoredVehicleState?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyLevel?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="CalculatedBrakeForce?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeMonitorLevel?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakePedalSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="BrakePedalSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakePedalSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedBrakePedalPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeSafetyMonitor" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceFeedback?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ArbitratedDiagnosisRequest?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="MonitoredVehicleState?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeMonitorLevel?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyLevel?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyState?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="CaliperPositionCalculation" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CaliperPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceCurrent?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="CaliperPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="CheckPlausability" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VotedBrakePedalPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="CylNumObserver" tags="SwcCylNumObserver?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CylinderNumber?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="TriggeredCylinderNumber?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="DecelerationSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="DecelerationSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DecelerationRate1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationRate2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="DecelerationSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DecelerationRate1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationRate2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedDecelerationRate?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="DiagnosisArbiter" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ArbitratedDiagnosisRequest?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="EcuBrakeActuator" tags="SwcActuators?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakeForceVoltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="EcuBrakePedalSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="144000" upperBound="176000" average="160000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="EcuDecelerationSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="144000" upperBound="176000" average="160000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="EcuStopLightActuator" tags="SwcActuators?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakeApplication?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="EcuVehicleSpeedSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="EcuWheelSpeedSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="IgnitionTimeActuation" tags="SwcInjIgnActuation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="TriggeredCylinderNumber?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime3?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime4?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime5?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime6?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="IgnitionTime7?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime8?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="IgnitionTiming" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="MAFRate?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="IgnitionTime?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="InjectionTimeActuation" tags="SwcInjIgnActuation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="TriggeredCylinderNumber?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="TotalFuelMassPerStroke?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime3?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime4?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime5?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime6?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime7?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime8?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="MassAirFlowSensor" tags="SwcEngineSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="MAFSensorVoltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="MassAirFlow?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="StopLightActuator" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ArbitratedBrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeApplication?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="ThrottleActuator" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DesiredThrottlePosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DesiredThrottlePositionVoltage?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="ThrottleController" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VotedAPedPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ThrottlePosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DesiredThrottlePosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="ThrottleSensor" tags="SwcEngineSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ThrottleSensor1Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ThrottleSensor2Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="ThrottlePosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="TotalFuelMass" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="TransientFuelMassPerStroke?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="TotalFuelMassPerStroke?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="TransientFuelMass" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BaseFuelMassPerStroke?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="TransientFuelMassPerStroke?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleSpeedSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleSpeedSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleSpeedSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedVehicleSpeed?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleStateMonitor" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="MonitoredVehicleState?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="WheelSpeedSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="WheelSpeedSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="WheelSpeed1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeed2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="WheelSpeedSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="WheelSpeed1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeed2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedWheelSpeed?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <labels name="ABSActivation" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ABSMode" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="APedPosition1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="APedPosition2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="APedSensor1Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="APedSensor2Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="ArbitratedBrakeForce" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ArbitratedDiagnosisRequest" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BaseFuelMassPerStroke" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakeApplication" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForce" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForceCurrent" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForceFeedback" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForceVoltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakeMonitorLevel" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPosition1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPosition2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPositionVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPositionVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakeSafetyLevel" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeSafetyState" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="CalculatedBrakeForce" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="CaliperPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="CylinderNumber" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="DecelerationRate1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="DecelerationRate2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="DecelerationVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="DecelerationVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="DesiredThrottlePosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="DesiredThrottlePositionVoltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime3" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime4" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime5" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime6" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime7" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime8" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime3" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime4" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime5" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime6" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime7" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime8" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="MAFRate" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="MAFSensorVoltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="MassAirFlow" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="MonitoredVehicleState" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ThrottlePosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="ThrottleSensor1Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ThrottleSensor2Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="TotalFuelMassPerStroke" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="TransientFuelMassPerStroke" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="TriggeredCylinderNumber" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeed1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeed2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeedVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeedVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="VotedAPedPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedBrakePedalPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedDecelerationRate" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedVehicleSpeed" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedWheelSpeed" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="WheelSpeed1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="WheelSpeed2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="WheelSpeedVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="WheelSpeedVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <processPrototypes name="ESSP0" firstRunnable="EcuVehicleSpeedSensor?type=Runnable" lastRunnable="VehicleSpeedSensorVoter?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="EcuVehicleSpeedSensor?type=Runnable" />
+ <runnableCalls runnable="VehicleSpeedSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="VehicleSpeedSensorVoter?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP1" firstRunnable="CylNumObserver?type=Runnable" lastRunnable="DecelerationSensorDiagnosis?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="CylNumObserver?type=Runnable" />
+ <runnableCalls runnable="DecelerationSensorDiagnosis?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP2" firstRunnable="WheelSpeedSensorDiagnosis?type=Runnable" lastRunnable="BrakePedalSensorDiagnosis?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="WheelSpeedSensorDiagnosis?type=Runnable" />
+ <runnableCalls runnable="BrakePedalSensorDiagnosis?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP3" firstRunnable="MassAirFlowSensor?type=Runnable" lastRunnable="InjectionTimeActuation?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="MassAirFlowSensor?type=Runnable" />
+ <runnableCalls runnable="BaseFuelMass?type=Runnable" />
+ <runnableCalls runnable="TransientFuelMass?type=Runnable" />
+ <runnableCalls runnable="TotalFuelMass?type=Runnable" />
+ <runnableCalls runnable="InjectionTimeActuation?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP4" firstRunnable="APedSensor?type=Runnable" lastRunnable="ThrottleActuator?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="APedSensor?type=Runnable" />
+ <runnableCalls runnable="APedVoter?type=Runnable" />
+ <runnableCalls runnable="ThrottleController?type=Runnable" />
+ <runnableCalls runnable="ThrottleActuator?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP5" firstRunnable="ThrottleSensor?type=Runnable" lastRunnable="EcuStopLightActuator?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="ThrottleSensor?type=Runnable" />
+ <runnableCalls runnable="EcuBrakePedalSensor?type=Runnable" />
+ <runnableCalls runnable="BrakePedalSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="BrakePedalSensorVoter?type=Runnable" />
+ <runnableCalls runnable="CheckPlausability?type=Runnable" />
+ <runnableCalls runnable="BrakeSafetyMonitor?type=Runnable" />
+ <runnableCalls runnable="BrakeForceCalculation?type=Runnable" />
+ <runnableCalls runnable="BrakeForceArbiter?type=Runnable" />
+ <runnableCalls runnable="StopLightActuator?type=Runnable" />
+ <runnableCalls runnable="EcuStopLightActuator?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP6" firstRunnable="VehicleStateMonitor?type=Runnable" lastRunnable="EcuBrakeActuator?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="VehicleStateMonitor?type=Runnable" />
+ <runnableCalls runnable="EcuDecelerationSensor?type=Runnable" />
+ <runnableCalls runnable="DecelerationSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="DecelerationSensorVoter?type=Runnable" />
+ <runnableCalls runnable="ABSCalculation?type=Runnable" />
+ <runnableCalls runnable="BrakeForceActuation?type=Runnable" />
+ <runnableCalls runnable="CaliperPositionCalculation?type=Runnable" />
+ <runnableCalls runnable="BrakeActuator?type=Runnable" />
+ <runnableCalls runnable="EcuBrakeActuator?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP7" firstRunnable="VehicleSpeedSensorDiagnosis?type=Runnable" lastRunnable="BrakeActuatorMonitor?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="VehicleSpeedSensorDiagnosis?type=Runnable" />
+ <runnableCalls runnable="BrakeActuatorMonitor?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP8" firstRunnable="DiagnosisArbiter?type=Runnable" lastRunnable="IgnitionTimeActuation?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="DiagnosisArbiter?type=Runnable" />
+ <runnableCalls runnable="IgnitionTiming?type=Runnable" />
+ <runnableCalls runnable="IgnitionTimeActuation?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP9" firstRunnable="EcuWheelSpeedSensor?type=Runnable" lastRunnable="WheelSpeedSensorVoter?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="EcuWheelSpeedSensor?type=Runnable" />
+ <runnableCalls runnable="WheelSpeedSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="WheelSpeedSensorVoter?type=Runnable" />
+ </processPrototypes>
+ <activations xsi:type="am:PeriodicActivation" name="Timer_10MS">
+ <min value="10" unit="ms" />
+ <max value="10" unit="ms" />
+ <offset value="0" unit="ms" />
+ </activations>
+ <activations xsi:type="am:PeriodicActivation" name="Timer_20MS">
+ <min value="20" unit="ms" />
+ <max value="20" unit="ms" />
+ <offset value="0" unit="ms" />
+ </activations>
+ <activations xsi:type="am:PeriodicActivation" name="Timer_5MS">
+ <min value="5" unit="ms" />
+ <max value="5" unit="ms" />
+ <offset value="0" unit="ms" />
+ </activations>
+ </swModel>
+ <hwModel>
+ <definitions xsi:type="am:ProcessingUnitDefinition" name="Cortex-A9" puType="CPU" features="Instructions/IPC_1.0?type=HwFeature">
+ <customProperties key="EnEf-Volt_High">
+ <value xsi:type="am:DoubleObject" value="1.15" />
+ </customProperties>
+ <customProperties key="EnEf-Volt_Low">
+ <value xsi:type="am:DoubleObject" value="1.05" />
+ </customProperties>
+ <customProperties key="EnEf-Scale_High">
+ <value xsi:type="am:DoubleObject" value="1.0" />
+ </customProperties>
+ <customProperties key="EnEf-Scale_Low">
+ <value xsi:type="am:DoubleObject" value="0.5" />
+ </customProperties>
+ </definitions>
+ <featureCategories name="Instructions" featureType="performance">
+ <features name="IPC_1.0" value="1.0" />
+ </featureCategories>
+ <structures name="Homogeneous Example System" structureType="System">
+ <structures name="Freescale i.MX6 Board" structureType="ECU">
+ <structures name="i.MX 6 Series Processor" structureType="Microcontroller">
+ <modules xsi:type="am:ProcessingUnit" name="Cortex-A9 #1" frequencyDomain="792MHZ%2BQuartz__100.0?type=FrequencyDomain" definition="Cortex-A9?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="Cortex-A9 #2" frequencyDomain="792MHZ%2BQuartz__100.0?type=FrequencyDomain" definition="Cortex-A9?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="Cortex-A9 #3" frequencyDomain="792MHZ%2BQuartz__100.0?type=FrequencyDomain" definition="Cortex-A9?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="Cortex-A9 #4" frequencyDomain="792MHZ%2BQuartz__100.0?type=FrequencyDomain" definition="Cortex-A9?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="Cortex-A9 #5" frequencyDomain="792MHZ%2BQuartz__100.0?type=FrequencyDomain" definition="Cortex-A9?type=ProcessingUnitDefinition" />
+ </structures>
+ </structures>
+ </structures>
+ <domains xsi:type="am:FrequencyDomain" name="792MHZ Quartz" clockGating="false">
+ <defaultValue value="792.0" unit="MHz" />
+ </domains>
+ <domains xsi:type="am:FrequencyDomain" name="792MHZ+Quartz__100.0" clockGating="false">
+ <defaultValue value="792.0" unit="MHz" />
+ </domains>
+ </hwModel>
+ <osModel>
+ <operatingSystems name="OS">
+ <taskSchedulers name="SCHED_Cortex-A9 #1" />
+ <taskSchedulers name="SCHED_Cortex-A9 #2" />
+ <taskSchedulers name="SCHED_Cortex-A9 #3" />
+ <taskSchedulers name="SCHED_Cortex-A9 #4" />
+ <taskSchedulers name="SCHED_Cortex-A9 #5" />
+ </operatingSystems>
+ </osModel>
+ <stimuliModel>
+ <stimuli xsi:type="am:PeriodicStimulus" name="Timer_10MS">
+ <offset value="0" unit="ms" />
+ <recurrence value="10" unit="ms" />
+ </stimuli>
+ <stimuli xsi:type="am:PeriodicStimulus" name="Timer_20MS">
+ <offset value="0" unit="ms" />
+ <recurrence value="20" unit="ms" />
+ </stimuli>
+ <stimuli xsi:type="am:PeriodicStimulus" name="Timer_5MS">
+ <offset value="0" unit="ms" />
+ <recurrence value="5" unit="ms" />
+ </stimuli>
+ </stimuliModel>
+ <constraintsModel>
+ <runnableSequencingConstraints name="ABSCalculation-->BrakeForceActuation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ <runnableGroups runnables="BrakeForceActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceArbiter-->ABSCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="DecelerationSensorVoter-->ABSCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="DecelerationSensorVoter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleSpeedSensorVoter-->ABSCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleSpeedSensorVoter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="WheelSpeedSensorVoter-->ABSCalculation" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="WheelSpeedSensorVoter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="APedSensor-->APedVoter" orderType="successor" processScope="ESSP4?type=ProcessPrototype">
+ <runnableGroups runnables="APedSensor?type=Runnable" />
+ <runnableGroups runnables="APedVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="APedVoter-->ThrottleController" orderType="successor" processScope="ESSP4?type=ProcessPrototype">
+ <runnableGroups runnables="APedVoter?type=Runnable" />
+ <runnableGroups runnables="ThrottleController?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BaseFuelMass-->IgnitionTiming" orderType="successor" processScope="ESSP8?type=ProcessPrototype">
+ <runnableGroups runnables="BaseFuelMass?type=Runnable" />
+ <runnableGroups runnables="IgnitionTiming?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="MassAirFlowSensor-->BaseFuelMass" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="MassAirFlowSensor?type=Runnable" />
+ <runnableGroups runnables="BaseFuelMass?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BaseFuelMass-->TransientFuelMass" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="BaseFuelMass?type=Runnable" />
+ <runnableGroups runnables="TransientFuelMass?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CaliperPositionCalculation-->BrakeActuator" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="CaliperPositionCalculation?type=Runnable" />
+ <runnableGroups runnables="BrakeActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeActuator-->EcuBrakeActuator" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeActuator?type=Runnable" />
+ <runnableGroups runnables="EcuBrakeActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceActuation-->BrakeActuatorMonitor" orderType="successor" processScope="ESSP7?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceActuation?type=Runnable" />
+ <runnableGroups runnables="BrakeActuatorMonitor?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceActuation-->CaliperPositionCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceActuation?type=Runnable" />
+ <runnableGroups runnables="CaliperPositionCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceCalculation-->BrakeForceArbiter" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeSafetyMonitor-->BrakeForceArbiter" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceArbiter-->StopLightActuator" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ <runnableGroups runnables="StopLightActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeSafetyMonitor-->BrakeForceCalculation" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CheckPlausability-->BrakeForceCalculation" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="CheckPlausability?type=Runnable" />
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleStateMonitor-->BrakeForceCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleStateMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuBrakePedalSensor-->BrakePedalSensorDiagnosis" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="EcuBrakePedalSensor?type=Runnable" />
+ <runnableGroups runnables="BrakePedalSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakePedalSensorTranslation-->BrakePedalSensorVoter" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakePedalSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="BrakePedalSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuBrakePedalSensor-->BrakePedalSensorTranslation" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="EcuBrakePedalSensor?type=Runnable" />
+ <runnableGroups runnables="BrakePedalSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakePedalSensorVoter-->CheckPlausability" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakePedalSensorVoter?type=Runnable" />
+ <runnableGroups runnables="CheckPlausability?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CheckPlausability-->BrakeSafetyMonitor" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="CheckPlausability?type=Runnable" />
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleStateMonitor-->BrakeSafetyMonitor" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleStateMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CylNumObserver-->IgnitionTimeActuation" orderType="successor" processScope="ESSP8?type=ProcessPrototype">
+ <runnableGroups runnables="CylNumObserver?type=Runnable" />
+ <runnableGroups runnables="IgnitionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CylNumObserver-->InjectionTimeActuation" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="CylNumObserver?type=Runnable" />
+ <runnableGroups runnables="InjectionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuDecelerationSensor-->DecelerationSensorDiagnosis" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="EcuDecelerationSensor?type=Runnable" />
+ <runnableGroups runnables="DecelerationSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="DecelerationSensorTranslation-->DecelerationSensorVoter" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="DecelerationSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="DecelerationSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuDecelerationSensor-->DecelerationSensorTranslation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="EcuDecelerationSensor?type=Runnable" />
+ <runnableGroups runnables="DecelerationSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="StopLightActuator-->EcuStopLightActuator" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="StopLightActuator?type=Runnable" />
+ <runnableGroups runnables="EcuStopLightActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuVehicleSpeedSensor-->VehicleSpeedSensorDiagnosis" orderType="successor" processScope="ESSP7?type=ProcessPrototype">
+ <runnableGroups runnables="EcuVehicleSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="VehicleSpeedSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuVehicleSpeedSensor-->VehicleSpeedSensorTranslation" orderType="successor" processScope="ESSP0?type=ProcessPrototype">
+ <runnableGroups runnables="EcuVehicleSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="VehicleSpeedSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuWheelSpeedSensor-->WheelSpeedSensorDiagnosis" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="EcuWheelSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="WheelSpeedSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuWheelSpeedSensor-->WheelSpeedSensorTranslation" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="EcuWheelSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="WheelSpeedSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="IgnitionTiming-->IgnitionTimeActuation" orderType="successor" processScope="ESSP8?type=ProcessPrototype">
+ <runnableGroups runnables="IgnitionTiming?type=Runnable" />
+ <runnableGroups runnables="IgnitionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="TotalFuelMass-->InjectionTimeActuation" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="TotalFuelMass?type=Runnable" />
+ <runnableGroups runnables="InjectionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="ThrottleController-->ThrottleActuator" orderType="successor" processScope="ESSP4?type=ProcessPrototype">
+ <runnableGroups runnables="ThrottleController?type=Runnable" />
+ <runnableGroups runnables="ThrottleActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="ThrottleSensor-->ThrottleController" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="ThrottleSensor?type=Runnable" />
+ <runnableGroups runnables="ThrottleController?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="TransientFuelMass-->TotalFuelMass" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="TransientFuelMass?type=Runnable" />
+ <runnableGroups runnables="TotalFuelMass?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleSpeedSensorTranslation-->VehicleSpeedSensorVoter" orderType="successor" processScope="ESSP0?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleSpeedSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="VehicleSpeedSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="WheelSpeedSensorTranslation-->WheelSpeedSensorVoter" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="WheelSpeedSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="WheelSpeedSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ </constraintsModel>
+ <mappingModel>
+ <schedulerAllocation scheduler="SCHED_Cortex-A9+%231?type=TaskScheduler" responsibility="Cortex-A9+%231?type=ProcessingUnit" />
+ <schedulerAllocation scheduler="SCHED_Cortex-A9+%232?type=TaskScheduler" responsibility="Cortex-A9+%232?type=ProcessingUnit" />
+ <schedulerAllocation scheduler="SCHED_Cortex-A9+%233?type=TaskScheduler" responsibility="Cortex-A9+%233?type=ProcessingUnit" />
+ <schedulerAllocation scheduler="SCHED_Cortex-A9+%234?type=TaskScheduler" responsibility="Cortex-A9+%234?type=ProcessingUnit" />
+ <schedulerAllocation scheduler="SCHED_Cortex-A9+%235?type=TaskScheduler" responsibility="Cortex-A9+%235?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP0?type=Task" scheduler="SCHED_Cortex-A9+%231?type=TaskScheduler" affinity="Cortex-A9+%231?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP1?type=Task" scheduler="SCHED_Cortex-A9+%231?type=TaskScheduler" affinity="Cortex-A9+%231?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP2?type=Task" scheduler="SCHED_Cortex-A9+%232?type=TaskScheduler" affinity="Cortex-A9+%232?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP3?type=Task" scheduler="SCHED_Cortex-A9+%232?type=TaskScheduler" affinity="Cortex-A9+%232?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP4?type=Task" scheduler="SCHED_Cortex-A9+%233?type=TaskScheduler" affinity="Cortex-A9+%233?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP5?type=Task" scheduler="SCHED_Cortex-A9+%234?type=TaskScheduler" affinity="Cortex-A9+%234?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP6?type=Task" scheduler="SCHED_Cortex-A9+%233?type=TaskScheduler" affinity="Cortex-A9+%233?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP7?type=Task" scheduler="SCHED_Cortex-A9+%234?type=TaskScheduler" affinity="Cortex-A9+%234?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP8?type=Task" scheduler="SCHED_Cortex-A9+%235?type=TaskScheduler" affinity="Cortex-A9+%235?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP9?type=Task" scheduler="SCHED_Cortex-A9+%235?type=TaskScheduler" affinity="Cortex-A9+%235?type=ProcessingUnit" />
+ </mappingModel>
+</am:Amalthea>
diff --git a/eclipse-tools/cdgen/models/democarMulticoreRaspberryPi/AMALTHEA_Democar_Multi_RASPBERRYPI.amxmi b/eclipse-tools/cdgen/models/democarMulticoreRaspberryPi/AMALTHEA_Democar_Multi_RASPBERRYPI.amxmi
new file mode 100644
index 0000000..1d1d16e
--- /dev/null
+++ b/eclipse-tools/cdgen/models/democarMulticoreRaspberryPi/AMALTHEA_Democar_Multi_RASPBERRYPI.amxmi
@@ -0,0 +1,1106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<am:Amalthea xmlns:am="http://app4mc.eclipse.org/amalthea/0.9.5" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmi:version="2.0">
+ <commonElements>
+ <tags name="SwcEngineController" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcActuators" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcBrakeForceArbiter" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcABSCalculation" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcSensors" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcSensorPostprocessing" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcCylNumObserver" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcBrakeForceCalculation" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcEngineSensors" tagType="SOFTWARE_COMPONENT" />
+ <tags name="SwcInjIgnActuation" tagType="SOFTWARE_COMPONENT" />
+ <coreClassifiers name="FPU" />
+ </commonElements>
+ <swModel>
+ <tasks name="Task_ESSP0" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="EcuVehicleSpeedSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="VehicleSpeedSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="VehicleSpeedSensorVoter?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP1" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="CylNumObserver?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="DecelerationSensorDiagnosis?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP2" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="WheelSpeedSensorDiagnosis?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakePedalSensorDiagnosis?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP3" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="MassAirFlowSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BaseFuelMass?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="TransientFuelMass?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="TotalFuelMass?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="InjectionTimeActuation?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP4" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintExclude] Exclude Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="APedSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="APedVoter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="ThrottleController?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="ThrottleActuator?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP5" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintInclude] Requires Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="ThrottleSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuBrakePedalSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakePedalSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakePedalSensorVoter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="CheckPlausability?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeSafetyMonitor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeForceCalculation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeForceArbiter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="StopLightActuator?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuStopLightActuator?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP6" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <customProperties key="[ConstraintInclude] Requires Targets with FPU">
+ <value xsi:type="am:ReferenceObject" value="FPU?type=CoreClassifier" />
+ </customProperties>
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="VehicleStateMonitor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuDecelerationSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="DecelerationSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="DecelerationSensorVoter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="ABSCalculation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeForceActuation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="CaliperPositionCalculation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeActuator?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="EcuBrakeActuator?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP7" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="VehicleSpeedSensorDiagnosis?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="BrakeActuatorMonitor?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP8" stimuli="Timer_10MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="DiagnosisArbiter?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="IgnitionTiming?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="IgnitionTimeActuation?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <tasks name="Task_ESSP9" stimuli="Timer_5MS?type=PeriodicStimulus" multipleTaskActivationLimit="0">
+ <callGraph>
+ <items xsi:type="am:Group" name="CallSequence" ordered="true">
+ <items xsi:type="am:RunnableCall" runnable="EcuWheelSpeedSensor?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="WheelSpeedSensorTranslation?type=Runnable" />
+ <items xsi:type="am:RunnableCall" runnable="WheelSpeedSensorVoter?type=Runnable" />
+ </items>
+ </callGraph>
+ </tasks>
+ <runnables name="ABSCalculation" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VotedDecelerationRate?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VotedVehicleSpeed?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VotedWheelSpeed?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ArbitratedBrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="ABSActivation?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ABSMode?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="APedSensor" tags="SwcEngineSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="APedSensor1Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="APedSensor2Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="APedPosition1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="APedPosition2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="APedVoter" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="APedPosition1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="APedPosition2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedAPedPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BaseFuelMass" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="MassAirFlow?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BaseFuelMassPerStroke?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="MAFRate?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeActuator" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CaliperPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeForceVoltage?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeActuatorMonitor" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceFeedback?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeForceActuation" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ABSActivation?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ABSMode?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeForce?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceCurrent?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeForceArbiter" tags="SwcBrakeForceArbiter?type=Tag" activations="Timer_20MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CalculatedBrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyState?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="ArbitratedBrakeForce?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeForceCalculation" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceFeedback?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ArbitratedDiagnosisRequest?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="MonitoredVehicleState?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyLevel?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="CalculatedBrakeForce?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeMonitorLevel?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakePedalSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="BrakePedalSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakePedalSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedBrakePedalPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="BrakeSafetyMonitor" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceFeedback?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ArbitratedDiagnosisRequest?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="MonitoredVehicleState?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeMonitorLevel?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyLevel?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeSafetyState?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="CaliperPositionCalculation" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CaliperPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakeForceCurrent?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="CaliperPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="CheckPlausability" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VotedBrakePedalPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="CylNumObserver" tags="SwcCylNumObserver?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="CylinderNumber?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="TriggeredCylinderNumber?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="DecelerationSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="DecelerationSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DecelerationRate1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationRate2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="DecelerationSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DecelerationRate1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationRate2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedDecelerationRate?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="DiagnosisArbiter" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ArbitratedDiagnosisRequest?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="EcuBrakeActuator" tags="SwcActuators?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakeForceVoltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="EcuBrakePedalSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="144000" upperBound="176000" average="160000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="BrakePedalPositionVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="EcuDecelerationSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="144000" upperBound="176000" average="160000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="DecelerationVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="EcuStopLightActuator" tags="SwcActuators?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BrakeApplication?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="EcuVehicleSpeedSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="EcuWheelSpeedSensor" tags="SwcSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="IgnitionTimeActuation" tags="SwcInjIgnActuation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="TriggeredCylinderNumber?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime3?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime4?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime5?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime6?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="IgnitionTime7?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="IgnitionTime8?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="IgnitionTiming" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="MAFRate?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="IgnitionTime?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="InjectionTimeActuation" tags="SwcInjIgnActuation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="TriggeredCylinderNumber?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="TotalFuelMassPerStroke?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime3?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime4?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime5?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime6?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime7?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="InjectionTime8?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="MassAirFlowSensor" tags="SwcEngineSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="MAFSensorVoltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="MassAirFlow?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="StopLightActuator" tags="SwcABSCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ArbitratedBrakeForce?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="BrakeApplication?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="ThrottleActuator" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="DesiredThrottlePosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DesiredThrottlePositionVoltage?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="ThrottleController" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VotedAPedPosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ThrottlePosition?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="DesiredThrottlePosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="ThrottleSensor" tags="SwcEngineSensors?type=Tag" activations="Timer_5MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="ThrottleSensor1Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="ThrottleSensor2Voltage?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="ThrottlePosition?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="TotalFuelMass" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="TransientFuelMassPerStroke?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="TotalFuelMassPerStroke?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="TransientFuelMass" tags="SwcEngineController?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="BaseFuelMassPerStroke?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="TransientFuelMassPerStroke?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleSpeedSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleSpeedSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleSpeedSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="VehicleSpeed2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedVehicleSpeed?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="VehicleStateMonitor" tags="SwcBrakeForceCalculation?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="MonitoredVehicleState?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="WheelSpeedSensorDiagnosis" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ </callGraph>
+ </runnables>
+ <runnables name="WheelSpeedSensorTranslation" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeedVoltage2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="WheelSpeed1?type=Label" access="write" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeed2?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <runnables name="WheelSpeedSensorVoter" tags="SwcSensorPostprocessing?type=Tag" activations="Timer_10MS?type=PeriodicActivation" callback="false" service="false">
+ <callGraph>
+ <items xsi:type="am:LabelAccess" data="WheelSpeed1?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:LabelAccess" data="WheelSpeed2?type=Label" access="read" dataStability="inherited" />
+ <items xsi:type="am:Ticks">
+ <default xsi:type="am:DiscreteValueWeibullEstimatorsDistribution" lowerBound="72000" upperBound="88000" average="80000.0" pRemainPromille="0.5" />
+ </items>
+ <items xsi:type="am:LabelAccess" data="VotedWheelSpeed?type=Label" access="write" dataStability="inherited" />
+ </callGraph>
+ </runnables>
+ <labels name="ABSActivation" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ABSMode" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="APedPosition1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="APedPosition2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="APedSensor1Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="APedSensor2Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="ArbitratedBrakeForce" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ArbitratedDiagnosisRequest" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BaseFuelMassPerStroke" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakeApplication" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForce" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForceCurrent" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForceFeedback" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeForceVoltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakeMonitorLevel" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPosition1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPosition2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPositionVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakePedalPositionVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="BrakeSafetyLevel" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="BrakeSafetyState" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="CalculatedBrakeForce" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="CaliperPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="CylinderNumber" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="DecelerationRate1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="DecelerationRate2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="DecelerationVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="DecelerationVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="DesiredThrottlePosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="DesiredThrottlePositionVoltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime3" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime4" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime5" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime6" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime7" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="IgnitionTime8" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime3" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime4" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime5" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime6" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime7" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="InjectionTime8" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="MAFRate" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="MAFSensorVoltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="MassAirFlow" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="MonitoredVehicleState" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ThrottlePosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="ThrottleSensor1Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="ThrottleSensor2Voltage" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="TotalFuelMassPerStroke" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="TransientFuelMassPerStroke" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="TriggeredCylinderNumber" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeed1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeed2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeedVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="VehicleSpeedVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="VotedAPedPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedBrakePedalPosition" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedDecelerationRate" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedVehicleSpeed" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="VotedWheelSpeed" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="WheelSpeed1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="WheelSpeed2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="8" unit="bit" />
+ </labels>
+ <labels name="WheelSpeedVoltage1" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <labels name="WheelSpeedVoltage2" constant="false" bVolatile="false" dataStability="noProtection">
+ <size value="16" unit="bit" />
+ </labels>
+ <processPrototypes name="ESSP0" firstRunnable="EcuVehicleSpeedSensor?type=Runnable" lastRunnable="VehicleSpeedSensorVoter?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="EcuVehicleSpeedSensor?type=Runnable" />
+ <runnableCalls runnable="VehicleSpeedSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="VehicleSpeedSensorVoter?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP1" firstRunnable="CylNumObserver?type=Runnable" lastRunnable="DecelerationSensorDiagnosis?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="CylNumObserver?type=Runnable" />
+ <runnableCalls runnable="DecelerationSensorDiagnosis?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP2" firstRunnable="WheelSpeedSensorDiagnosis?type=Runnable" lastRunnable="BrakePedalSensorDiagnosis?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="WheelSpeedSensorDiagnosis?type=Runnable" />
+ <runnableCalls runnable="BrakePedalSensorDiagnosis?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP3" firstRunnable="MassAirFlowSensor?type=Runnable" lastRunnable="InjectionTimeActuation?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="MassAirFlowSensor?type=Runnable" />
+ <runnableCalls runnable="BaseFuelMass?type=Runnable" />
+ <runnableCalls runnable="TransientFuelMass?type=Runnable" />
+ <runnableCalls runnable="TotalFuelMass?type=Runnable" />
+ <runnableCalls runnable="InjectionTimeActuation?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP4" firstRunnable="APedSensor?type=Runnable" lastRunnable="ThrottleActuator?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="APedSensor?type=Runnable" />
+ <runnableCalls runnable="APedVoter?type=Runnable" />
+ <runnableCalls runnable="ThrottleController?type=Runnable" />
+ <runnableCalls runnable="ThrottleActuator?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP5" firstRunnable="ThrottleSensor?type=Runnable" lastRunnable="EcuStopLightActuator?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="ThrottleSensor?type=Runnable" />
+ <runnableCalls runnable="EcuBrakePedalSensor?type=Runnable" />
+ <runnableCalls runnable="BrakePedalSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="BrakePedalSensorVoter?type=Runnable" />
+ <runnableCalls runnable="CheckPlausability?type=Runnable" />
+ <runnableCalls runnable="BrakeSafetyMonitor?type=Runnable" />
+ <runnableCalls runnable="BrakeForceCalculation?type=Runnable" />
+ <runnableCalls runnable="BrakeForceArbiter?type=Runnable" />
+ <runnableCalls runnable="StopLightActuator?type=Runnable" />
+ <runnableCalls runnable="EcuStopLightActuator?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP6" firstRunnable="VehicleStateMonitor?type=Runnable" lastRunnable="EcuBrakeActuator?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="VehicleStateMonitor?type=Runnable" />
+ <runnableCalls runnable="EcuDecelerationSensor?type=Runnable" />
+ <runnableCalls runnable="DecelerationSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="DecelerationSensorVoter?type=Runnable" />
+ <runnableCalls runnable="ABSCalculation?type=Runnable" />
+ <runnableCalls runnable="BrakeForceActuation?type=Runnable" />
+ <runnableCalls runnable="CaliperPositionCalculation?type=Runnable" />
+ <runnableCalls runnable="BrakeActuator?type=Runnable" />
+ <runnableCalls runnable="EcuBrakeActuator?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP7" firstRunnable="VehicleSpeedSensorDiagnosis?type=Runnable" lastRunnable="BrakeActuatorMonitor?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="VehicleSpeedSensorDiagnosis?type=Runnable" />
+ <runnableCalls runnable="BrakeActuatorMonitor?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP8" firstRunnable="DiagnosisArbiter?type=Runnable" lastRunnable="IgnitionTimeActuation?type=Runnable" activation="Timer_10MS?type=PeriodicActivation">
+ <runnableCalls runnable="DiagnosisArbiter?type=Runnable" />
+ <runnableCalls runnable="IgnitionTiming?type=Runnable" />
+ <runnableCalls runnable="IgnitionTimeActuation?type=Runnable" />
+ </processPrototypes>
+ <processPrototypes name="ESSP9" firstRunnable="EcuWheelSpeedSensor?type=Runnable" lastRunnable="WheelSpeedSensorVoter?type=Runnable" activation="Timer_5MS?type=PeriodicActivation">
+ <runnableCalls runnable="EcuWheelSpeedSensor?type=Runnable" />
+ <runnableCalls runnable="WheelSpeedSensorTranslation?type=Runnable" />
+ <runnableCalls runnable="WheelSpeedSensorVoter?type=Runnable" />
+ </processPrototypes>
+ <activations xsi:type="am:PeriodicActivation" name="Timer_10MS">
+ <min value="10" unit="ms" />
+ <max value="10" unit="ms" />
+ <offset value="0" unit="ms" />
+ </activations>
+ <activations xsi:type="am:PeriodicActivation" name="Timer_20MS">
+ <min value="20" unit="ms" />
+ <max value="20" unit="ms" />
+ <offset value="0" unit="ms" />
+ </activations>
+ <activations xsi:type="am:PeriodicActivation" name="Timer_5MS">
+ <min value="5" unit="ms" />
+ <max value="5" unit="ms" />
+ <offset value="0" unit="ms" />
+ </activations>
+ </swModel>
+ <hwModel>
+ <definitions xsi:type="am:ProcessingUnitDefinition" name="ARM Cortex-A53" puType="CPU" features="Instructions/IPC_1.0?type=HwFeature" />
+ <featureCategories name="Instructions" featureType="performance">
+ <features name="IPC_1.0" value="1.0" />
+ </featureCategories>
+ <structures name="Homogeneous Example System" structureType="System">
+ <structures name="RPI3" structureType="ECU">
+ <structures name="ARM Cortex-A53" structureType="Microcontroller">
+ <modules xsi:type="am:ProcessingUnit" name="RPI_0" frequencyDomain="ClockARM0?type=FrequencyDomain" definition="ARM+Cortex-A53?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="RPI_1" frequencyDomain="ClockARM1?type=FrequencyDomain" definition="ARM+Cortex-A53?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="RPI_2" frequencyDomain="ClockARM2?type=FrequencyDomain" definition="ARM+Cortex-A53?type=ProcessingUnitDefinition" />
+ <modules xsi:type="am:ProcessingUnit" name="RPI_3" frequencyDomain="ClockARM3?type=FrequencyDomain" definition="ARM+Cortex-A53?type=ProcessingUnitDefinition" />
+ </structures>
+ </structures>
+ </structures>
+ <domains xsi:type="am:FrequencyDomain" name="ClockARM2" clockGating="false">
+ <defaultValue value="1.2" unit="GHz" />
+ </domains>
+ <domains xsi:type="am:FrequencyDomain" name="ClockARM3" clockGating="false">
+ <defaultValue value="1.2" unit="GHz" />
+ </domains>
+ <domains xsi:type="am:FrequencyDomain" name="ClockARM0" clockGating="false">
+ <defaultValue value="1.2" unit="GHz" />
+ </domains>
+ <domains xsi:type="am:FrequencyDomain" name="ClockARM1" clockGating="false">
+ <defaultValue value="1.2" unit="GHz" />
+ </domains>
+ </hwModel>
+ <osModel>
+ <operatingSystems name="OS">
+ <taskSchedulers name="SCHED_RPI_0 #1" />
+ <taskSchedulers name="SCHED_RPI_1 #2" />
+ <taskSchedulers name="SCHED_RPI_2 #3" />
+ <taskSchedulers name="SCHED_RPI_3 #4" />
+ </operatingSystems>
+ </osModel>
+ <stimuliModel>
+ <stimuli xsi:type="am:PeriodicStimulus" name="Timer_10MS">
+ <offset value="0" unit="ms" />
+ <recurrence value="10" unit="ms" />
+ </stimuli>
+ <stimuli xsi:type="am:PeriodicStimulus" name="Timer_20MS">
+ <offset value="0" unit="ms" />
+ <recurrence value="20" unit="ms" />
+ </stimuli>
+ <stimuli xsi:type="am:PeriodicStimulus" name="Timer_5MS">
+ <offset value="0" unit="ms" />
+ <recurrence value="5" unit="ms" />
+ </stimuli>
+ </stimuliModel>
+ <constraintsModel>
+ <runnableSequencingConstraints name="ABSCalculation-->BrakeForceActuation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ <runnableGroups runnables="BrakeForceActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceArbiter-->ABSCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="DecelerationSensorVoter-->ABSCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="DecelerationSensorVoter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleSpeedSensorVoter-->ABSCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleSpeedSensorVoter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="WheelSpeedSensorVoter-->ABSCalculation" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="WheelSpeedSensorVoter?type=Runnable" />
+ <runnableGroups runnables="ABSCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="APedSensor-->APedVoter" orderType="successor" processScope="ESSP4?type=ProcessPrototype">
+ <runnableGroups runnables="APedSensor?type=Runnable" />
+ <runnableGroups runnables="APedVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="APedVoter-->ThrottleController" orderType="successor" processScope="ESSP4?type=ProcessPrototype">
+ <runnableGroups runnables="APedVoter?type=Runnable" />
+ <runnableGroups runnables="ThrottleController?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BaseFuelMass-->IgnitionTiming" orderType="successor" processScope="ESSP8?type=ProcessPrototype">
+ <runnableGroups runnables="BaseFuelMass?type=Runnable" />
+ <runnableGroups runnables="IgnitionTiming?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="MassAirFlowSensor-->BaseFuelMass" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="MassAirFlowSensor?type=Runnable" />
+ <runnableGroups runnables="BaseFuelMass?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BaseFuelMass-->TransientFuelMass" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="BaseFuelMass?type=Runnable" />
+ <runnableGroups runnables="TransientFuelMass?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CaliperPositionCalculation-->BrakeActuator" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="CaliperPositionCalculation?type=Runnable" />
+ <runnableGroups runnables="BrakeActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeActuator-->EcuBrakeActuator" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeActuator?type=Runnable" />
+ <runnableGroups runnables="EcuBrakeActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceActuation-->BrakeActuatorMonitor" orderType="successor" processScope="ESSP7?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceActuation?type=Runnable" />
+ <runnableGroups runnables="BrakeActuatorMonitor?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceActuation-->CaliperPositionCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceActuation?type=Runnable" />
+ <runnableGroups runnables="CaliperPositionCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceCalculation-->BrakeForceArbiter" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeSafetyMonitor-->BrakeForceArbiter" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeForceArbiter-->StopLightActuator" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeForceArbiter?type=Runnable" />
+ <runnableGroups runnables="StopLightActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakeSafetyMonitor-->BrakeForceCalculation" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CheckPlausability-->BrakeForceCalculation" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="CheckPlausability?type=Runnable" />
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleStateMonitor-->BrakeForceCalculation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleStateMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeForceCalculation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuBrakePedalSensor-->BrakePedalSensorDiagnosis" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="EcuBrakePedalSensor?type=Runnable" />
+ <runnableGroups runnables="BrakePedalSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakePedalSensorTranslation-->BrakePedalSensorVoter" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakePedalSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="BrakePedalSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuBrakePedalSensor-->BrakePedalSensorTranslation" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="EcuBrakePedalSensor?type=Runnable" />
+ <runnableGroups runnables="BrakePedalSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="BrakePedalSensorVoter-->CheckPlausability" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="BrakePedalSensorVoter?type=Runnable" />
+ <runnableGroups runnables="CheckPlausability?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CheckPlausability-->BrakeSafetyMonitor" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="CheckPlausability?type=Runnable" />
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleStateMonitor-->BrakeSafetyMonitor" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleStateMonitor?type=Runnable" />
+ <runnableGroups runnables="BrakeSafetyMonitor?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CylNumObserver-->IgnitionTimeActuation" orderType="successor" processScope="ESSP8?type=ProcessPrototype">
+ <runnableGroups runnables="CylNumObserver?type=Runnable" />
+ <runnableGroups runnables="IgnitionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="CylNumObserver-->InjectionTimeActuation" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="CylNumObserver?type=Runnable" />
+ <runnableGroups runnables="InjectionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuDecelerationSensor-->DecelerationSensorDiagnosis" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="EcuDecelerationSensor?type=Runnable" />
+ <runnableGroups runnables="DecelerationSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="DecelerationSensorTranslation-->DecelerationSensorVoter" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="DecelerationSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="DecelerationSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuDecelerationSensor-->DecelerationSensorTranslation" orderType="successor" processScope="ESSP6?type=ProcessPrototype">
+ <runnableGroups runnables="EcuDecelerationSensor?type=Runnable" />
+ <runnableGroups runnables="DecelerationSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="StopLightActuator-->EcuStopLightActuator" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="StopLightActuator?type=Runnable" />
+ <runnableGroups runnables="EcuStopLightActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuVehicleSpeedSensor-->VehicleSpeedSensorDiagnosis" orderType="successor" processScope="ESSP7?type=ProcessPrototype">
+ <runnableGroups runnables="EcuVehicleSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="VehicleSpeedSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuVehicleSpeedSensor-->VehicleSpeedSensorTranslation" orderType="successor" processScope="ESSP0?type=ProcessPrototype">
+ <runnableGroups runnables="EcuVehicleSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="VehicleSpeedSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuWheelSpeedSensor-->WheelSpeedSensorDiagnosis" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="EcuWheelSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="WheelSpeedSensorDiagnosis?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="EcuWheelSpeedSensor-->WheelSpeedSensorTranslation" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="EcuWheelSpeedSensor?type=Runnable" />
+ <runnableGroups runnables="WheelSpeedSensorTranslation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="IgnitionTiming-->IgnitionTimeActuation" orderType="successor" processScope="ESSP8?type=ProcessPrototype">
+ <runnableGroups runnables="IgnitionTiming?type=Runnable" />
+ <runnableGroups runnables="IgnitionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="TotalFuelMass-->InjectionTimeActuation" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="TotalFuelMass?type=Runnable" />
+ <runnableGroups runnables="InjectionTimeActuation?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="ThrottleController-->ThrottleActuator" orderType="successor" processScope="ESSP4?type=ProcessPrototype">
+ <runnableGroups runnables="ThrottleController?type=Runnable" />
+ <runnableGroups runnables="ThrottleActuator?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="ThrottleSensor-->ThrottleController" orderType="successor" processScope="ESSP5?type=ProcessPrototype">
+ <runnableGroups runnables="ThrottleSensor?type=Runnable" />
+ <runnableGroups runnables="ThrottleController?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="TransientFuelMass-->TotalFuelMass" orderType="successor" processScope="ESSP3?type=ProcessPrototype">
+ <runnableGroups runnables="TransientFuelMass?type=Runnable" />
+ <runnableGroups runnables="TotalFuelMass?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="VehicleSpeedSensorTranslation-->VehicleSpeedSensorVoter" orderType="successor" processScope="ESSP0?type=ProcessPrototype">
+ <runnableGroups runnables="VehicleSpeedSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="VehicleSpeedSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ <runnableSequencingConstraints name="WheelSpeedSensorTranslation-->WheelSpeedSensorVoter" orderType="successor" processScope="ESSP9?type=ProcessPrototype">
+ <runnableGroups runnables="WheelSpeedSensorTranslation?type=Runnable" />
+ <runnableGroups runnables="WheelSpeedSensorVoter?type=Runnable" />
+ </runnableSequencingConstraints>
+ </constraintsModel>
+ <mappingModel>
+ <schedulerAllocation scheduler="SCHED_RPI_0+%231?type=TaskScheduler" responsibility="RPI_0?type=ProcessingUnit" />
+ <schedulerAllocation scheduler="SCHED_RPI_1+%232?type=TaskScheduler" responsibility="RPI_1?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP0?type=Task" scheduler="SCHED_RPI_1+%232?type=TaskScheduler" affinity="RPI_1?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP1?type=Task" scheduler="SCHED_RPI_1+%232?type=TaskScheduler" affinity="RPI_1?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP2?type=Task" scheduler="SCHED_RPI_0+%231?type=TaskScheduler" affinity="RPI_0?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP3?type=Task" scheduler="SCHED_RPI_0+%231?type=TaskScheduler" affinity="RPI_0?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP4?type=Task" scheduler="SCHED_RPI_1+%232?type=TaskScheduler" affinity="RPI_1?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP5?type=Task" scheduler="SCHED_RPI_0+%231?type=TaskScheduler" affinity="RPI_0?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP6?type=Task" scheduler="SCHED_RPI_1+%232?type=TaskScheduler" affinity="RPI_1?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP7?type=Task" scheduler="SCHED_RPI_1+%232?type=TaskScheduler" affinity="RPI_1?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP8?type=Task" scheduler="SCHED_RPI_0+%231?type=TaskScheduler" affinity="RPI_0?type=ProcessingUnit" />
+ <taskAllocation task="Task_ESSP9?type=Task" scheduler="SCHED_RPI_0+%231?type=TaskScheduler" affinity="RPI_0?type=ProcessingUnit" />
+ </mappingModel>
+</am:Amalthea>
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/ArmCodeFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/ArmCodeFileCreation.java
new file mode 100644
index 0000000..b689ea5
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/ArmCodeFileCreation.java
@@ -0,0 +1,347 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.MappingModel;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of Runnable Definition with Runnable specific delay.
+ *
+ */
+
+public class ArmCodeFileCreation {
+ final private Amalthea model;
+
+ /**
+ * Constructor ArmCodeFileCreation.
+ *
+ * @param Model
+ * @param srcPath
+ * @param hdrPath
+ * @param configFlag
+ * @throws IOException
+ */
+ public ArmCodeFileCreation(final Amalthea Model, final String srcPath, final String hdrPath, final int configFlag)
+ throws IOException {
+ this.model = Model;
+ final EList<Task> tasks = this.model.getSwModel().getTasks();
+ final EList<Runnable> runnables = this.model.getSwModel().getRunnables();
+ System.out.println("Runnable File Creation Begins");
+ fileCreate(this.model, srcPath, hdrPath, configFlag, tasks, runnables);
+ System.out.println("Runnable File Creation Ends");
+
+ }
+
+ /**
+ * file creation and specification for armcode file
+ *
+ * @param model
+ * @param srcPath
+ * @param hdrPath
+ * @param configFlag
+ * @param tasks
+ * @param runnables
+ * @throws IOException
+ */
+ private static void fileCreate(final Amalthea model, final String srcPath, final String hdrPath,
+ final int configFlag, final EList<Task> tasks, final EList<Runnable> runnables) throws IOException {
+ final String fname = srcPath + File.separator + "armcode.c";
+ final File f2 = new File(srcPath);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ if (0x3110 == (configFlag & 0xFFF0)) {
+ fileUtil.fileMainHeader(f1);
+ runFileHeader(f1);
+ headerIncludesArmCode(f1);
+ nsleep(f1);
+ zynqmain(model, f1);
+ }
+ else {
+ fileUtil.fileMainHeader(f1);
+ runFileHeader(f1);
+ headerIncludesArmCode(f1);
+ nsleep(f1);
+ zynqmain(model, f1);
+ }
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * ArmCode Header Title note.
+ *
+ * @param file
+ */
+ private static void runFileHeader(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : ArmCode Header\n");
+ fw.write("*Description : Header file for Deploy/Offloading of the task to EPI\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * nsleep - function call structure.
+ *
+ * @param file
+ */
+ private static void nsleep(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("int nsleep(long miliseconds){\n");
+ fw.write("\tstruct timespec req, rem;\n");
+ fw.write("\tif(miliseconds > 999){\n");
+ fw.write("\t\treq.tv_sec = (int)(miliseconds / 1000);\n");
+ fw.write("\t\treq.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000;\n");
+ fw.write("\t} else {\n");
+ fw.write("\t\treq.tv_sec = 0;\n");
+ fw.write("\t\treq.tv_nsec = miliseconds * 1000000;\n");
+ fw.write("\t}\n");
+ fw.write("\treturn nanosleep(&req , &rem);\n");
+ fw.write("}\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * main function for the zynq in which we deploy the
+ *
+ * @param model
+ * @param file
+ */
+ private static void zynqmain(final Amalthea model, final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final MappingModel mappingModel = model.getMappingModel();
+ if (mappingModel != null) {
+ final EList<SchedulerAllocation> processingUnits = model.getMappingModel().getSchedulerAllocation();
+ final ArrayList<SchedulerAllocation> localPU = new ArrayList<SchedulerAllocation>();
+ localPU.addAll(processingUnits);
+ final HashMap<SchedulerAllocation, Long> CoreMap = new HashMap<SchedulerAllocation, Long>();
+ long count = 0;
+ for (final SchedulerAllocation pu : localPU) {
+ CoreMap.put(pu, count);
+ count++;
+ }
+ fw.write("int main(){\n");
+ fw.write("\tunsigned int shared_label_to_read;\n");
+ fw.write("\tunsigned row_loop,col_loop;\n");
+ fw.write("\te_platform_t epiphany;\n");
+ fw.write("\te_epiphany_t dev;\n");
+ fw.write("\tint loop;\n");
+ fw.write("\tint addr;\n");
+ fw.write("\te_mem_t emem;\n");
+ fw.write("\te_init(NULL);\n");
+ fw.write("\te_reset_system();\n");
+ fw.write("\te_get_platform_info(&epiphany);\n");
+ int coreGroup = 0;
+ if (processingUnits.size() == 1) {
+ coreGroup = 0;
+ }
+ else if (processingUnits.size() > 1 && processingUnits.size() < 5) {
+ coreGroup = 2;
+ }
+ else if (processingUnits.size() > 4 && processingUnits.size() < 10) {
+ coreGroup = 3;
+ }
+ else if (processingUnits.size() > 9 && processingUnits.size() < 17) {
+ coreGroup = 4;
+ }
+ fw.write("\te_open(&dev,0,0," + coreGroup + "," + coreGroup + ");\n");
+ /* Core 1 */
+ // 00
+ /* Core 2 */
+ // 00 10
+ // 01 11
+ /* Core 3 */
+ // 00 10 20
+ // 01 11 21
+ // 02 12 22
+ /* Core 4 */
+ // 00 10 20 30
+ // 01 11 21 31
+ // 02 12 22 32
+ // 03 13 23 33
+
+ fw.write("\te_reset_group(&dev);\n");
+ int k = 0;
+ final ArrayList<String> result = new ArrayList<String>();
+ for (int i = 0; i < localPU.size(); i++) {
+ for (int j = 0; j < localPU.size(); j++) {
+ if (k < localPU.size()) {
+ fw.write("\te_return_stat_t\tresult" + k + ";\n");
+ k++;
+ }
+
+ }
+ }
+ int k3 = 0;
+ for (int rowCoreGroup = 0; rowCoreGroup < localPU.size(); rowCoreGroup++) {
+ for (int columnCoreGroup = 0; columnCoreGroup < localPU.size(); columnCoreGroup++) {
+ if (k3 < localPU.size()) {
+ fw.write("\tunsigned int message" + k3 + "[9];\n");
+ k3++;
+ }
+ }
+ }
+ int coreIndex = 0;
+ for (int rowCoreGroup = 0; rowCoreGroup < coreGroup; rowCoreGroup++) {
+ for (int columnCoreGroup = 0; columnCoreGroup < coreGroup; columnCoreGroup++) {
+ if (coreIndex < localPU.size()) {
+ fw.write("\tresult" + coreIndex + "= e_load(\"main" + coreIndex + ".elf\",&dev,"
+ + rowCoreGroup + "," + columnCoreGroup + ",E_FALSE);\n");
+ result.add("result" + coreIndex + "!=E_OK");
+ coreIndex++;
+ }
+ }
+ }
+ String resultFinal = "";
+ for (int k2 = 0; k2 < result.size(); k2++) {
+ // System.out.println("Size ==> "+result.size());
+ resultFinal = resultFinal + (result.get(k2) + "||");
+ if (k2 == (result.size() - 2)) {
+ k2++;
+ resultFinal = resultFinal + result.get(k2);
+ break;
+ }
+ }
+ coreIndex = 0;
+ for (int rowCoreGroup = 0; rowCoreGroup < localPU.size() & rowCoreGroup < 4; rowCoreGroup++) {
+ for (int columnCore = 0; columnCore < localPU.size() & columnCore < 4; columnCore++) {
+ if (coreIndex < localPU.size()) {
+ if (coreIndex == 0) {
+ fw.write("\tif (result" + coreIndex + "!=E_OK){\n");
+ }
+ else {
+ fw.write("\telse if (result" + coreIndex + "!=E_OK){\n");
+ }
+ fw.write("\t\tfprintf(stderr,\"Error Loading the Epiphany Application " + coreIndex
+ + " %i\\n\", result" + coreIndex + ");");
+ fw.write("\n\t}\n");
+ coreIndex++;
+ }
+ }
+ }
+ fw.write("\te_start_group(&dev);\n");
+ fw.write("\tfprintf(stderr,\"RMS Multicore on FreeRTOS started \\n\");\n");
+ fw.write("\taddr = cnt_address;\n");
+ fw.write("\tint pollLoopCounter = 0;\n");
+ fw.write("\tint taskMessage;\n");
+ fw.write("\tint prevtaskMessage;\n");
+ fw.write("\tint prevpollLoopCounter = 0;\n");
+ fw.write("\tfor (pollLoopCounter=0;pollLoopCounter<=40;pollLoopCounter++){\n");
+ coreIndex = 0;
+ for (int rowCoreGroup = 0; rowCoreGroup < coreGroup; rowCoreGroup++) {
+ for (int columnCoreGroup = 0; columnCoreGroup < coreGroup; columnCoreGroup++) {
+ if (coreIndex < localPU.size()) {
+ fw.write("\t\te_read(&dev," + rowCoreGroup + "," + columnCoreGroup + ",addr, &message"
+ + coreIndex + ", sizeof(message" + coreIndex + "));\n");
+ fw.write("\t\tfprintf(stderr, \"tick1 %3d||\",message" + coreIndex + "[8]+1);\n");
+ fw.write("\t\tfprintf(stderr,\"task holding core" + coreIndex + " %2u||\", message"
+ + coreIndex + "[6]);\n");
+ coreIndex++;
+ }
+ }
+ }
+ fw.write("\t\tfprintf(stderr,\"\\n\");\n");
+ fw.write("\t\tusleep(READ_PRECISION_US);\n");
+ fw.write("\t}\n");
+ fw.write("\tfprintf(stderr,\"----------------------------------------------\\n\");\n");
+ fw.write("\te_close(&dev);\n");
+ fw.write("\te_finalize();\n");
+ fw.write("\tfprintf(stderr,\"RMS Multicore on FreeRTOS Complete \\n \");\n");
+ fw.write("\treturn 0;\n");
+ fw.write("}\n");
+ fw.close();
+ }
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * header inclusion for armCode file
+ *
+ * @param file
+ */
+ private static void headerIncludesArmCode(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n");
+ fw.write("#include <unistd.h>\n");
+ fw.write("#include <e-hal.h>\n");
+ fw.write("#include <time.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"debugFlags.h\"\n");
+ fw.write("#define READ_PRECISION_US 1000\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/FreeRTOSConfigFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/FreeRTOSConfigFileCreation.java
new file mode 100755
index 0000000..7fdf04b
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/FreeRTOSConfigFileCreation.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+
+/**
+ * Implementation of FreeRTOS specific configuration and macros.
+ *
+ *
+ */
+public class FreeRTOSConfigFileCreation {
+ final private Amalthea model;
+
+ /**
+ * Constructor FreeRTOSConfigFileCreation
+ *
+ * @param Model
+ * @param srcPath
+ * @param configFlag
+ * @throws IOException
+ */
+ public FreeRTOSConfigFileCreation(final Amalthea Model, final String srcPath, final int configFlag)
+ throws IOException {
+ this.model = Model;
+ System.out.println("FreeRTOSConfig File Creation Begins");
+ fileCreate(this.model, srcPath, configFlag);
+ System.out.println("FreeRTOSConfig File Creation Ends");
+ }
+
+ /**
+ * FileCreation FreeRTOSConfigFileCreation
+ *
+ * @param model
+ * @param srcPath
+ * @param configFlag
+ * @throws IOException
+ */
+ public static void fileCreate(final Amalthea model, final String srcpath, final int configFlag) throws IOException {
+ final String fname = srcpath + File.separator + "FreeRTOSConfig.h";
+ final File f2 = new File(srcpath);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ fileUtil.FreeRTOSConfigFileHeader(f1);
+ headerIncludesFreeRTOS(model, f1, configFlag);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * Macro framework and definition.
+ *
+ * @param model
+ * @param file
+ * @param configFlag
+ */
+ public static void headerIncludesFreeRTOS(final Amalthea model, final File file, final int configFlag) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final int constval = 1;
+ final int taskSize = model.getSwModel().getTasks().size();
+ fw.write("\t#ifndef FREERTOS_CONFIG_H\n");
+ fw.write("\t#define FREERTOS_CONFIG_H\n");
+ fw.write("//-----------------------------------------------------------\n");
+ fw.write("\t#define configCALL_STACK_SIZE 0x50\n");
+ if (0x0020 == (configFlag & 0x00F0)) {
+ fw.write("\t#define configUSE_PREEMPTION 1\n");
+ }
+ else {
+ fw.write("\t#define configUSE_PREEMPTION 0\n");
+ }
+ fw.write("\t#define configUSE_TIME_SLICING 0\n");
+ fw.write("\t#define configUSE_IDLE_HOOK 0\n");
+ fw.write("\t#define configUSE_TICK_HOOK 0\n");
+ fw.write("\t#define configCPU_CLOCK_HZ ( ( unsigned long ) 700000000 )\n");
+ fw.write("\t#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )\n");
+ fw.write("\t#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) " + (taskSize + constval)
+ + " )\n");
+ fw.write("\t#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 0x200) //512 words\n");
+ fw.write("\t#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 10450 ) )\n");
+ fw.write("\t#define configMAX_TASK_NAME_LEN ( 128 )\n");
+ fw.write("\t#define configUSE_TRACE_FACILITY 0\n");
+ fw.write("\t#define configUSE_16_BIT_TICKS 1\n");
+ fw.write("\t#define configIDLE_SHOULD_YIELD 0\n");
+ fw.write("\t#define configUSE_ALTERNATIVE_API 0\n");
+ fw.write("//-----------------------------------------------------------\n");
+ fw.write("\t#define configUSE_CO_ROUTINES 0\n");
+ fw.write("\t#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\n");
+ fw.write("//-----------------------------------------------------------\n");
+ fw.write("\t#define INCLUDE_vTaskPrioritySet 0\n");
+ fw.write("\t#define INCLUDE_uxTaskPriorityGet 0\n");
+ fw.write("\t#define INCLUDE_vTaskDelete 0\n");
+ fw.write("\t#define INCLUDE_vTaskCleanUpResources 0\n");
+ fw.write("\t#define INCLUDE_vTaskSuspend 1\n");
+ fw.write("\t#define INCLUDE_vTaskDelayUntil 1\n");
+ fw.write("\t#define INCLUDE_vTaskDelay 1\n");
+ fw.write("\t#define INCLUDE_xTaskGetCurrentTaskHandle 1\n");
+ fw.write("\t#define INCLUDE_pcTaskGetTaskName 1\n");
+ fw.write("\n\t#define C2C_MSG_TYPE int \n");
+ fw.write("\t#endif\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/LabelFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/LabelFileCreation.java
new file mode 100755
index 0000000..9bbd09b
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/LabelFileCreation.java
@@ -0,0 +1,414 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Declaration of Labels with initial values .
+ *
+ *
+ */
+
+/**
+ * @author rpras
+ *
+ */
+public class LabelFileCreation {
+ final private Amalthea model;
+
+ /**
+ * Constructor LabelFileCreation
+ *
+ * @param Model
+ * Amalthea Model
+ * @param srcPath
+ * @throws IOException
+ */
+ public LabelFileCreation(final Amalthea Model, final String srcPath) throws IOException {
+ this.model = Model;
+ System.out.println("Label File Creation Begins");
+ fileCreate(this.model, srcPath);
+ System.out.println("Label File Creation Ends");
+ }
+
+ /**
+ * FileCreation LabelFileCreation
+ *
+ * @param model
+ * @param srcPath
+ * @throws IOException
+ */
+ private static void fileCreate(final Amalthea model, final String srcPath) throws IOException {
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> task = DeploymentUtil.getTasksMappedToCore(pu, model);
+ final List<Task> tasks = new ArrayList<Task>(task);
+ final List<Label> labelCoreCommonList = fileUtil.CoreSpecificLabel(model, tasks);
+ final List<Label> sharedLabelList = fileUtil.SharedLabelDeclarationHead(model, tasks);
+ final String fname1 = srcPath + File.separator + "label" + k + ".c";
+ final String fname2 = srcPath + File.separator + "label" + k + ".h";
+ final File f2 = new File(srcPath);
+ final File f1 = new File(fname1);
+ final File f3 = new File(fname2);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ labelFileHeader(f1);
+ headerIncludesLabelHead(f1, k);
+ LabelDeclaration(f1, tasks, labelCoreCommonList);
+ LabelDeclarationLocal(f1, tasks, labelCoreCommonList, sharedLabelList);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ try {
+ fileUtil.fileMainHeader(f3);
+ labelFileHeader(f3);
+ headerIncludesLabel(f3);
+ LabelDeclarationLocalHeader(f3, tasks, labelCoreCommonList);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ k++;
+ }
+ }
+
+ /**
+ * Title card - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void labelFileHeader(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : Label Declaration\n");
+ fw.write("*Description : Declaration and Initialisation of Label\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * Header inclusion - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void headerIncludesLabel(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdint.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"shared_comms.h\"\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * Header inclusion - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void headerIncludesLabelHead(final File file, final int k) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdint.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"shared_comms.h\"\n");
+ fw.write("#include \"label" + k + ".h\"\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+
+ /**
+ * Label definition and initialization structure.
+ *
+ * @param file
+ * @param tasks
+ * @param labellist
+ */
+ private static void LabelDeclaration(final File file, final List<Task> tasks, final List<Label> labellist) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ labellist.stream().distinct().collect(Collectors.toList());
+ for (final Label label : labellist) {
+ final String type = fileUtil.datatype(label.getSize().toString());
+ final long init = fileUtil.intialisation(label.getSize().toString());
+ fw.write("\t" + type + " " + label.getName() + " \t=\t " + init + ";\n");
+ }
+
+ fw.write("\n\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * Local label definition and initialization structure. Task specific local
+ * labels are defined to perform Cin and Cout operation.
+ *
+ * @param file
+ * @param tasks
+ * @param sharedLabelList
+ */
+ private static void LabelDeclarationLocal(final File file, final List<Task> tasks,
+ final List<Label> labelCoreCommonList, final List<Label> sharedLabelList) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ for (final Task task : tasks) {
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(task, null);
+ final ArrayList<Label> labellist1 = new ArrayList<Label>();
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ for (final Runnable run : runnablesOfTask) {
+ final Set<Label> labellist = SoftwareUtil.getAccessedLabelSet(run, null);
+ labellist1.addAll(labellist);
+ }
+ final List<Label> listWithoutDuplicates2 = labellist1.stream().distinct().collect(Collectors.toList());
+ final Set<Label> TaskLabel = SoftwareUtil.getAccessedLabelSet(task, null);
+ fw.write("\n //local variable for " + task.getName() + "\n");
+ for (final Label lab : listWithoutDuplicates2) {
+ if ((TaskLabel.contains(lab)) && !(sharedLabelList.contains(lab))
+ && (labelCoreCommonList.contains(lab))) {
+ final String type = fileUtil.datatype(lab.getSize().toString());
+ final long init = fileUtil.intialisation(lab.getSize().toString());
+ fw.write("\t\t" + type + "\t" + lab.getName() + "_" + task.getName() + "\t=\t" + init + ";\n");
+ }
+ }
+ fw.write("\n //Shared label \n");
+ for (final Label lab : sharedLabelList) {
+ if (TaskLabel.contains(lab)) {
+ final String type = fileUtil.datatype(lab.getSize().toString());
+ final long init = fileUtil.intialisation(lab.getSize().toString());
+ fw.write(
+ "\t\t" + type + "\t" + lab.getName() + "_" + task.getName() + " \t=\t " + init + ";\n");
+ }
+ }
+ final Set<Label> readLabels = SoftwareUtil.getReadLabelSet(task, null);
+ final Set<Label> writeLabels = SoftwareUtil.getWriteLabelSet(task, null);
+ fw.write("\n\tvoid cIN_" + task.getName() + "()\n\t{\n");
+ List<String> readLabelType = new ArrayList<String>();
+ final HashMap<String, HashMap<Label, Integer>> SharedLabelTypeMapIndexed = new HashMap<String, HashMap<Label, Integer>>();
+ for (final Label share : sharedLabelList) {
+ final String type = share.getSize().toString();
+ readLabelType.add(type);
+ }
+ readLabelType = readLabelType.stream().distinct().collect(Collectors.toList());
+ for (final String rLT : readLabelType) {
+
+ final HashMap<Label, Integer> SharedLabelTypeMap = new HashMap<Label, Integer>();
+ int k = 0;
+ for (final Label share : sharedLabelList) {
+ final String type = share.getSize().toString();
+ if (type.equals(rLT)) {
+ SharedLabelTypeMap.put(share, new Integer(k));
+ k++;
+ }
+ }
+ SharedLabelTypeMapIndexed.put(rLT, SharedLabelTypeMap);
+ }
+ HashMap<Label, Integer> LabelIndexedType = new HashMap<Label, Integer>();
+ for (final String rLT : readLabelType) {
+ LabelIndexedType = SharedLabelTypeMapIndexed.get(rLT);
+ for (final Label share : sharedLabelList) {
+ final String type = share.getSize().toString();
+ if ((type.equals(rLT)) & (readLabels.contains(share))) {
+ fw.write("\t\t" + share.getName() + "_" + task.getName() + "\t=\tshared_label_"
+ + type.replace(" ", "") + "_read(" + LabelIndexedType.get(share) + ");\n");
+ }
+ }
+ }
+ for (final Label lab : listWithoutDuplicates2) {
+ if (labelCoreCommonList.contains(lab)) {
+ fw.write("\t\t" + lab.getName() + "_" + task.getName() + "\t=\t" + lab.getName() + ";\n");
+ }
+ }
+ fw.write("\t}\n");
+ fw.write("\n\tvoid cOUT_" + task.getName() + "()\n\t{\n");
+ final ArrayList<Label> labellist2 = new ArrayList<Label>();
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ for (final Runnable run : runnablesOfTask) {
+ final Set<Label> labellist = SoftwareUtil.getWriteLabelSet(run, null);
+ labellist2.addAll(labellist);
+ }
+ final List<Label> listWithoutDuplicates1 = labellist2.stream().distinct().collect(Collectors.toList());
+ for (final Label lab : listWithoutDuplicates1) {
+ if (labelCoreCommonList.contains(lab) & (writeLabels.contains(lab))) {
+ fw.write("\t\t" + lab.getName() + "\t=\t" + lab.getName() + "_" + task.getName() + ";\n");
+ }
+ }
+ HashMap<Label, Integer> LabelWriteIndexedType = new HashMap<Label, Integer>();
+ for (final String rLT : readLabelType) {
+ LabelWriteIndexedType = SharedLabelTypeMapIndexed.get(rLT);
+ for (final Label share : sharedLabelList) {
+ final String type = share.getSize().toString();
+ if ((type.equals(rLT)) & (writeLabels.contains(share))) {
+ fw.write("\t\t" + share.getName() + "_" + task.getName() + "++;\n");
+ fw.write("\t\tshared_label_" + type.replace(" ", "") + "_write("
+ + LabelWriteIndexedType.get(share) + "," + share.getName() + "_" + task.getName()
+ + " );\n");
+ }
+ }
+ }
+ fw.write("\t}\n");
+ fw.write("\n\n");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void LabelDeclarationLocalHeader(final File file, final List<Task> tasks,
+ final List<Label> labelList) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ for (final Task task : tasks) {
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(task, null);
+ final ArrayList<Label> labellist1 = new ArrayList<Label>();
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ for (final Runnable run : runnablesOfTask) {
+ final Set<Label> labellist = SoftwareUtil.getAccessedLabelSet(run, null);
+ labellist1.addAll(labellist);
+ }
+ fw.write("\n\tvoid cIN_" + task.getName() + "();");
+ fw.write("\n\tvoid cOUT_" + task.getName() + "();");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ public static List<Label> SharedLabelFinder(final Amalthea model) {
+ final EList<Task> tasks = model.getSwModel().getTasks();
+ final ArrayList<Label> labelCombined = new ArrayList<Label>();
+ final ArrayList<Label> labelOhneDuplicate = new ArrayList<Label>();
+ for (final Task task : tasks) {
+ final Set<Label> labellist = SoftwareUtil.getAccessedLabelSet(task, null);
+ labelCombined.addAll(labellist);
+ }
+ final Set<Label> uniques = new HashSet<>();
+ for (final Label t : labelCombined) {
+ if (!uniques.add(t)) {
+ labelOhneDuplicate.add(t);
+ }
+ }
+ final List<Label> sharedLabelList = labelOhneDuplicate.stream().distinct().collect(Collectors.toList());
+ return sharedLabelList;
+ }
+
+ @SuppressWarnings("null")
+ public static HashMap<Label, HashMap<Task, ProcessingUnit>> LabelTaskMap(final Amalthea model,
+ final List<Label> labelList) {
+ final EList<Task> tasks = model.getSwModel().getTasks();
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> localLabelAllocation = new HashMap<Label, HashMap<Task, ProcessingUnit>>();
+
+ for (final Label label : labelList) {
+ final HashMap<Task, ProcessingUnit> localAllocation = new HashMap<Task, ProcessingUnit>();
+ for (final Task task : tasks) {
+ final ProcessingUnit pu = DeploymentUtil.getAssignedCoreForProcess(task, model).iterator().next();
+ final ArrayList<Label> labelListLocalTask = new ArrayList<Label>(
+ SoftwareUtil.getAccessedLabelSet(task, null));
+ if (labelListLocalTask.contains(label)) {
+ localAllocation.put(task, pu);
+ }
+ }
+ if (localAllocation != null) {
+ localLabelAllocation.put(label, localAllocation);
+ }
+ }
+ return localLabelAllocation;
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MainFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MainFileCreation.java
new file mode 100755
index 0000000..f0a3e6c
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MainFileCreation.java
@@ -0,0 +1,259 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of Main function in which scheduling is done.
+ *
+ *
+ */
+
+public class MainFileCreation {
+ final private Amalthea model;
+
+ /**
+ * MainFileCreation Constructor
+ *
+ * @param Model
+ * @param srcPath
+ * @param configFlag
+ * @throws IOException
+ */
+ public MainFileCreation(final Amalthea Model, final String srcPath, final int configFlag) throws IOException {
+ this.model = Model;
+ System.out.println("Main File Creation Begins");
+ if (0x2000 == (configFlag & 0xF000)) {
+ fileCreatePthread(this.model, srcPath);
+ }
+ System.out.println("Main File Creation Ends");
+ }
+
+
+ /**
+ * Shared Label definition and initialization structure.
+ *
+ * @param file
+ * @param labellist
+ */
+ public static List<Label> SharedLabelCoreDefinition(final Amalthea model, final String srcPath) {
+ final EList<Label> labellist = model.getSwModel().getLabels();
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (labellist.size() == 0) {
+ System.out.println("Shared Label size 0");
+ }
+ else {
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, labellist);
+ int i = 0, k = 0, j = 0;
+ for (final Label share : labellist) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ final Set<Task> TaskList = TaskMap.keySet();
+ if (puListUnique.size() == 1 && TaskList.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ i++;
+ }
+ else if (puListUnique.size() > 1) {
+ j++;
+ }
+ else if (TaskList.size() == 1) {
+ k++;
+ }
+ }
+ System.out.println("Total Labels :" + sharedLabelTaskMap.keySet().size() + "=" + i + "+" + j + "+" + k + "="
+ + (i + j + k));
+ }
+ return SharedLabelListSortCore;
+ }
+
+
+ private static void sleepTimerMsPthread(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("void sleepTimerMs(int ticks)\n");
+ fw.write("{\n");
+ fw.write("\tint var;\n");
+ fw.write("\tfor (var = 0; var < ticks; ++var)\n");
+ fw.write("\t{\n");
+ fw.write("\t\tsuspendMe();\n");
+ fw.write("\t\t{\n");
+ fw.write("\t\t\tusleep(1000);\n");
+ fw.write("\t\t}\n");
+ fw.write("\t\tresumeMe();\n");
+ fw.write("\t}\n");
+ fw.write("}\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void fileCreatePthread(final Amalthea model, final String path1) throws IOException {
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> tasks = DeploymentUtil.getTasksMappedToCore(pu, model);
+ final String fname = path1 + File.separator + "main" + k + ".c";
+ final File f2 = new File(path1);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ mainFileHeader(f1);
+ headerIncludesMainPthread(f1, model, k, tasks);
+ sleepTimerMsPthread(f1);
+ mainFucntionPthread(f1, tasks);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ k++;
+ }
+ }
+
+ private static void mainFucntionPthread(final File f1, final Set<Task> tasks) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("int main(void) \n{\n");
+ fw.write("\tpthread_t thread[NUM_THREADS];\n");
+ fw.write("\tpthread_attr_t attr;\n\n");
+ final int tasksize = tasks.size();
+ int init = 0;
+ while (init < tasksize) {
+ fw.write("\tlong rtr" + init + "=" + init + ";\n");
+ init++;
+ }
+ fw.write("\tlong t;\n");
+ fw.write("\tint rc;\n");
+ fw.write("\tvoid *status;\n\n");
+ fw.write("\tfor(;;)\n\t{\n");
+ fw.write("\t\tpthread_attr_init(&attr);\n");
+ fw.write("\t\tpthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);\n\n");
+ int init1 = 0;
+ while (init1 < tasksize) {
+ fw.write("\t\tpthread_create (&thread[" + init1 + "], &attr, v" + tasks.iterator().next().getName()
+ + ", (void *)rtr" + init1 + ");\n");
+ init1++;
+ }
+ fw.write("\t\tif (rc)\n");
+ fw.write("\t\t{\n");
+ fw.write("\t\t\tprintf(\"ERROR; return code from pthread_join() is %d\\n\", rc);\n");
+ fw.write("\t\t\texit(-1);\n");
+ fw.write("\t\t}\n");
+
+ fw.write("\n\t\tpthread_attr_destroy(&attr);\n");
+ fw.write("\n\t\tfor(t=0; t<NUM_THREADS; t++)\n");
+ fw.write("\t\t{\n");
+ fw.write("\t\t\trc = pthread_join(thread[t], &status);\n");
+ fw.write("\t\t\tif (rc)\n");
+ fw.write("\t\t\t{\n");
+ fw.write("\t\t\t\tprintf(\"ERROR; return code from pthread_join() is %d\\n\", rc);\n");
+ fw.write("\t\t\t\texit(-1);\n");
+ fw.write("\t\t\t}\n");
+ fw.write(
+ "\t\t\tprintf(\"Main: completed join with thread %ld having a status of %ld\\n\",t,(long)status);\n");
+ fw.write("\t\t}\n");
+ fw.write("\t\tprintf(\"\\n\");\n");
+ fw.write("\t}\n");
+ fw.write("\tprintf(\"Main: program completed. Exiting.\\n\");\n");
+ fw.write("\tpthread_exit(NULL);\n");
+ fw.write("}\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void headerIncludesMainPthread(final File f1, final Amalthea model2, final int k,
+ final Set<Task> tasks) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <pthread.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"taskDef" + k + ".h\"\n");
+ fw.write("#define NUM_THREADS\t" + tasks.size() + "\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ private static void mainFileHeader(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : C File for Tasks Call\n");
+ fw.write("*Description : Main file in which scheduling is done \n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MainRMSFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MainRMSFileCreation.java
new file mode 100644
index 0000000..16e3261
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MainRMSFileCreation.java
@@ -0,0 +1,475 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.MappingModel;
+import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Stimulus;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.Time;
+import org.eclipse.app4mc.amalthea.model.TimeUnit;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil.TimeType;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+import org.eclipse.app4mc.amalthea.model.util.TimeUtil;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of Main function in which scheduling is done. Specific to RMS
+ * Scheduler
+ *
+ *
+ */
+
+public class MainRMSFileCreation {
+ final private Amalthea model;
+
+ /**
+ * MainRMSFileCreation Constructor
+ *
+ * @param Model
+ * @param srcPath
+ * @param configFlag
+ * @throws IOException
+ */
+ public MainRMSFileCreation(final Amalthea Model, final String srcPath, final int configFlag) throws IOException {
+ this.model = Model;
+ System.out.println("Main File Creation Begins");
+ fileCreate(this.model, srcPath, configFlag);
+ System.out.println("Main File Creation Ends");
+ }
+
+ /**
+ * MainRMSFileCreation - File Creation
+ *
+ * @param model
+ * @param srcPath
+ * @param configFlag
+ * @throws IOException
+ */
+ private static void fileCreate(final Amalthea model, final String srcPath, final int configFlag)
+ throws IOException {
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> tasks = DeploymentUtil.getTasksMappedToCore(pu, model);
+ final String fname = srcPath + File.separator + "main" + k + ".c";
+ final File f2 = new File(srcPath);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ mainFileHeader(f1);
+ if ((0x0100 == (0x0F00 & configFlag)) & (0x3000 == (0xF000 & configFlag))) {
+ headerIncludesMainRMS(f1, k);
+ mainTaskStimuli(model, f1, tasks);
+ mainTaskPriority(f1, tasks);
+ mainFucntionRMS(model, f1, tasks);
+ // SharedLabelDeclarationHead(f1, model);
+ }
+ else {
+ headerIncludesMainFreeRTOS(f1, k);
+ mainTaskStimuli(model, f1, tasks);
+ mainTaskPriority(f1, tasks);
+ mainFucntionFreeRTOS(model, f1, tasks);
+ }
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ k++;
+ }
+ }
+
+ /**
+ * Main function in Main file of RMS specific scheduler
+ *
+ * @param model
+ * @param file
+ * @param tasks
+ */
+ private static void mainFucntionRMS(final Amalthea model, final File file, final Set<Task> tasks) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("int main(void) \n{\n");
+ fw.write("\toutbuf_init();\n");
+ final List<Label> SharedLabelList = LabelFileCreation.SharedLabelFinder(model);
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ System.out.println("Shared Label size 0");
+ }
+ else {
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (puListUnique.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+
+ final HashMap<Label, String> SharedLabelTypeMap = new HashMap<Label, String>();
+ for (final Label share : SharedLabelListSortCore) {
+ SharedLabelTypeMap.put(share, share.getSize().toString());
+ }
+ final List<String> SharedTypeMapList = new ArrayList<>(
+ SharedLabelTypeMap.values().stream().distinct().collect(Collectors.toList()));
+ final List<Label> SharedLabelMapList = new ArrayList<Label>(SharedLabelTypeMap.keySet());
+ for (int k = 0; k < SharedTypeMapList.size(); k++) {
+ final List<Label> SharedLabel = new ArrayList<Label>();
+ final String sh = SharedTypeMapList.get(k);
+ for (final Label s : SharedLabelMapList) {
+ final String ShTy = SharedLabelTypeMap.get(s);
+ if (sh.equals(ShTy)) {
+ SharedLabel.add(s);
+ }
+ }
+ int SharedLabelCounter = SharedLabel.size();
+ if (SharedLabelCounter != 0) {
+ fw.write("\tshared_label_" + sh.toString().replace(" ", "") + "_init();\n");
+ }
+ SharedLabelCounter = 0;
+ }
+
+ for (final Task task : tasks) {
+ final MappingModel mappingModel = model.getMappingModel();
+ ProcessingUnit pu = null;
+ if (mappingModel != null) {
+ pu = DeploymentUtil.getAssignedCoreForProcess(task, model).iterator().next();
+ Time taskTime = RuntimeUtil.getExecutionTimeForProcess(task, pu, null, TimeType.WCET);
+ taskTime = TimeUtil.convertToTimeUnit(taskTime, TimeUnit.MS);
+ final BigInteger sleepTime = taskTime.getValue();
+ final BigInteger b2 = new BigInteger("1000");
+ final int comparevalue = sleepTime.compareTo(b2);
+ if (comparevalue < 0) {
+ fw.write("\tAmaltheaTask AmalTk_" + task.getName() + " = createAmaltheaTask( v" + task.getName()
+ + ", cIN_" + task.getName() + ", cOUT_" + task.getName() + ", "
+ + task.getStimuli().get(0).getName() + ", " + task.getStimuli().get(0).getName()
+ + ", 1);\n");
+ }
+ else {
+ fw.write("\tAmaltheaTask AmalTk_" + task.getName() + " = createAmaltheaTask( v" + task.getName()
+ + ", cIN_" + task.getName() + ", cOUT_" + task.getName() + ", "
+ + task.getStimuli().get(0).getName() + ", " + task.getStimuli().get(0).getName() + ", "
+ + sleepTime + ");\n");
+ }
+ }
+ }
+ for (final Task task : tasks) {
+ final Set<Label> taskLabel = SoftwareUtil.getAccessedLabelSet(task, null);
+ final List<Label> taskLabelList = new ArrayList<>(taskLabel);
+ final HashMap<Label, String> LabelTypeMap = new HashMap<Label, String>();
+ for (final Label tl : taskLabelList) {
+ LabelTypeMap.put(tl, tl.getSize().toString());
+ }
+ final List<String> TypeList = new ArrayList<>(
+ LabelTypeMap.values().stream().distinct().collect(Collectors.toList()));
+ final List<Label> LabelList = new ArrayList<>(
+ LabelTypeMap.keySet().stream().distinct().collect(Collectors.toList()));
+ fw.write("\tcreateRTOSTask( &AmalTk_" + task.getName() + ", main" + task.getName() + ", "
+ + TypeList.size() + ",");
+ final List<Label> dataTypeList = new ArrayList<Label>();
+ int k = 0;
+ for (final String tl : TypeList) {
+ fw.write(fileUtil.datatypeSize(tl) + ", ");
+ for (final Label La : LabelList) {
+ if (LabelTypeMap.get(La).contains(tl) && (SharedLabelListSortCore.contains(La))) {
+ dataTypeList.add(La);
+ }
+ }
+ fw.write("" + dataTypeList.size() + "");
+ k++;
+ if (k < TypeList.size()) {
+ fw.write(", ");
+ }
+ }
+ fw.write(");\n");
+ }
+ fw.write("\tvTaskStartScheduler();\n");
+ fw.write("\t" + "return EXIT_SUCCESS;\n");
+ fw.write("}\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * Main function in Main file of RMS specific scheduler
+ *
+ * @param model
+ * @param file
+ * @param tasks
+ */
+ private static void mainFucntionFreeRTOS(final Amalthea model, final File file, final Set<Task> tasks) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("int main(void) \n{\n");
+ fw.write("\toutbuf_init();\n");
+ final List<Label> SharedLabelList = LabelFileCreation.SharedLabelFinder(model);
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ System.out.println("Shared Label size 0");
+ }
+ else {
+ // System.out.println("Shared Label size
+ // "+SharedLabelList.size());
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (puListUnique.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+
+ final HashMap<Label, String> SharedLabelTypeMap = new HashMap<Label, String>();
+ for (final Label share : SharedLabelListSortCore) {
+ SharedLabelTypeMap.put(share, share.getSize().toString());
+ }
+ final List<String> SharedTypeMapList = new ArrayList<>(
+ SharedLabelTypeMap.values().stream().distinct().collect(Collectors.toList()));
+ final List<Label> SharedLabelMapList = new ArrayList<Label>(SharedLabelTypeMap.keySet());
+ for (int k = 0; k < SharedTypeMapList.size(); k++) {
+ final List<Label> SharedLabel = new ArrayList<Label>();
+ final String sh = SharedTypeMapList.get(k);
+ for (final Label s : SharedLabelMapList) {
+ final String ShTy = SharedLabelTypeMap.get(s);
+ if (sh.equals(ShTy)) {
+ SharedLabel.add(s);
+ }
+ }
+ int SharedLabelCounter = SharedLabel.size();
+ if (SharedLabelCounter != 0) {
+ fw.write("\tshared_label_" + sh.toString().replace(" ", "") + "_init();\n");
+ // fw.write("void shared_label_"+sh.toString().replace(" ",
+ // "")+"_init_core();\n");
+
+ }
+ SharedLabelCounter = 0;
+ }
+
+ for (final Task task : tasks) {
+ fw.write("\txTaskCreate( v" + task.getName() + " , \"" + task.getName()
+ + "\", configMINIMAL_STACK_SIZE, &v" + task.getName() + ", main" + task.getName()
+ + ", NULL);\n");
+ }
+ fw.write("\tvTaskStartScheduler();\n");
+ fw.write("\t" + "return EXIT_SUCCESS;\n");
+ fw.write("}\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * Title Card of MainRMSFileCreation
+ *
+ * @param file
+ */
+ private static void mainFileHeader(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : C File for Tasks Call\n");
+ fw.write("*Description : Main file in which scheduling is done \n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * MainRMSFileCreation Header inclusion
+ *
+ * @param file
+ */
+ private static void headerIncludesMainRMS(final File file, final int k) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n");
+ fw.write("#include <e_lib.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"FreeRTOS.h\"\n");
+ fw.write("#include \"task.h\"\n");
+ fw.write("#include \"queue.h\"\n");
+ fw.write("#include \"AmaltheaConverter.h\"\n");
+ fw.write("#include \"debugFlags.h\"\n");
+ fw.write("#include \"ParallellaUtils.h\"\n");
+ fw.write("#include \"taskDef" + k + ".h\"\n");
+ fw.write("#include \"shared_comms.h\"\n\n");
+ fw.write("#include \"label" + k + ".h\"\n");
+ // fw.write("#include \"c2c.h\"\n\n");
+ // fw.write("#define READ_PRECISION_US 1000\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * Assign Priority to task in RMS
+ *
+ * @param file
+ * @param tasks
+ */
+ private static void mainTaskPriority(final File file, final Set<Task> tasks) {
+ try {
+ final File fn = file;
+ final List<Task> localTaskPriority = new ArrayList<Task>();
+ localTaskPriority.addAll(tasks);
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* TaskPriorities. */\n");
+ final HashMap<Task, Long> periodMap = new HashMap<Task, Long>();
+ for (final Task task : tasks) {
+ final long period = fileUtil.getRecurrence(task).getValue().longValue();
+ periodMap.put(task, period);
+ }
+ final Map<Task, Long> periodMapSorted = fileUtil.sortByValue(periodMap);
+ // System.out.println("periodMapSorted Size "+
+ // periodMapSorted.size());
+ // for (int i=0;i<(periodMapSorted.size());i++) {
+ for (int i = (periodMapSorted.size()), k = 0; i > 0; i--, k++) {
+ final Task task = (Task) periodMapSorted.keySet().toArray()[k];
+ fw.write("\t#define main" + task.getName() + "\t( tskIDLE_PRIORITY +" + (i) + " )\n");
+ }
+ fw.write("\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * MainRMSFileCreation Header inclusion
+ *
+ * @param file
+ */
+ private static void headerIncludesMainFreeRTOS(final File file, final int k) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n");
+ fw.write("#include <e_lib.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"FreeRTOS.h\"\n");
+ fw.write("#include \"task.h\"\n");
+ fw.write("#include \"queue.h\"\n");
+ fw.write("#include \"AmaltheaConverter.h\"\n");
+ fw.write("#include \"debugFlags.h\"\n");
+ fw.write("#include \"ParallellaUtils.h\"\n");
+ fw.write("#include \"taskDef" + k + ".h\"\n");
+ fw.write("#include \"shared_comms.h\"\n\n");
+ fw.write("#include \"label" + k + ".h\"\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * Macro for Stimuli in the model
+ *
+ * @param model
+ * @param file
+ * @param tasks
+ */
+ private static void mainTaskStimuli(final Amalthea model, final File f1, final Set<Task> tasks) {
+ try {
+ final File fn = f1;
+
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* TaskStimuli. */\n");
+ final EList<Stimulus> Stimuli = model.getStimuliModel().getStimuli();
+ for (final Stimulus s : Stimuli) {
+ if (s instanceof PeriodicStimulus) {
+ fw.write("\t#define " + s.getName() + "\t" + ((PeriodicStimulus) s).getRecurrence().getValue()
+ + " \n");
+ }
+ }
+ fw.write("\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MakeFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MakeFileCreation.java
new file mode 100644
index 0000000..a57b805
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/MakeFileCreation.java
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of Main function in which scheduling is done.
+ *
+ *
+ */
+
+public class MakeFileCreation {
+ final private Amalthea model;
+
+ public MakeFileCreation(final Amalthea Model, final String path1, final int configFlag) throws IOException {
+ this.model = Model;
+ System.out.println("MAKEFILE Creation Begins");
+ fileCreate(this.model, path1, configFlag);
+ System.out.println("MAKEFILE Creation Ends");
+ }
+
+ private static void fileCreate(final Amalthea model, final String path1, final int configFlag) throws IOException {
+ model.getMappingModel().getTaskAllocation();
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ final String fname = path1 + File.separator + "Makefile";
+ final File f2 = new File(path1);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ // fileUtil.fileMainHeader(f1);
+ makeFileHeader(f1);
+ headerIncludesMainRMS(f1, CoreNo);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ private static void makeFileHeader(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("#******************************************************************\n");
+ fw.write("#*Title : Makefile Setup\n");
+ fw.write("#*Description : Makefile Setup for the Scheduler \n");
+ fw.write("#******************************************************************\n");
+ fw.write("#******************************************************************\n");
+ fw.write("#******************************************************************\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void headerIncludesMainRMS(final File f1, final EList<SchedulerAllocation> coreNo) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("EPIPHANY_HOME=/opt/adapteva/esdk\n");
+ fw.write("#host compiler path\n");
+ fw.write("LCC=/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc\n");
+ fw.write("#device compiler path\n");
+ fw.write("CC=e-gcc\n");
+ fw.write("#FreeRTOS dependencies\n");
+ fw.write("CFLAGS=-I.\n");
+ fw.write("FREERTOSSRC=../../Source\n");
+ fw.write("INCLUDES= -g -I$(FREERTOSSRC)/include -I$(FREERTOSSRC)/portable/GCC/Epiphany -I.\n");
+ fw.write("DEPS = $(FREERTOSSRC)/portable/GCC/Epiphany/");
+ fw.write("portmacro.h ");
+ fw.write("Makefile ");
+ fw.write("FreeRTOSConfig.h ");
+ fw.write("debugFlags.h ");
+ fw.write("AmaltheaConverter.h ");
+ int coreIndex;
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("taskDef" + coreIndex + ".h ");
+ }
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("label" + coreIndex + ".h ");
+ }
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("runnable" + coreIndex + ".h ");
+ }
+ fw.write("ParallellaUtils.h \n");
+ fw.write("#Epiphany SDK dependencies\n");
+ fw.write("ESDK=${EPIPHANY_HOME} \n");
+ fw.write("ELIBS=${ESDK}/tools/host.armv7l/lib \n");
+ fw.write("EINCS=${ESDK}/tools/host.armv7l/include \n");
+ fw.write("ELDF=${ESDK}/bsps/current/fast.ldf \n");
+ fw.write("EHDF=${EPIPHANY_HDF} \n");
+ fw.write("#search paths for C source code files \n");
+ fw.write(
+ "vpath %.c .:$(FREERTOSSRC)/:$(FREERTOSSRC)/portable/MemMang:$(FREERTOSSRC)/portable/GCC/Epiphany:/ \n");
+ fw.write("#search path for assembly listings \n");
+ fw.write("vpath %.s $(FREERTOSSRC)/portable/GCC/Epiphany \n");
+ fw.write("#main target \n");
+ fw.write("run: armcode ");
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("main" + coreIndex + ".elf ");
+ }
+ fw.write("\n @echo build status : successful\n\n");
+ fw.write("#rule for every device target\n");
+ fw.write(
+ "%.elf: $(ELDF) tasks.o queue.o list.o port.o portasm.o heap_1.o c2c.o debugFlags.o AmaltheaConverter.o ");
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("taskDef" + coreIndex + ".o ");
+ }
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("label" + coreIndex + ".o ");
+ }
+ for (coreIndex = 0; coreIndex < coreNo.size(); coreIndex++) {
+ fw.write("runnable" + coreIndex + ".o ");
+ }
+
+ fw.write("ParallellaUtils.o shared_comms.o %.o \n");
+ fw.write(" $(CC) -g -T$< -Wl,--gc-sections -o $@ $(filter-out $<,$^) -le-lib\n\n");
+ fw.write("#host target\n");
+ fw.write("armcode: armcode.c $(DEPS)\n");
+ fw.write(" $(LCC) $< -o $@ -I ${EINCS} -L ${ELIBS} -lpal -le-hal -le-loader -lpthread\n");
+ fw.write("#clean target\n");
+ fw.write("clean:\n");
+ fw.write(" rm -f *.o *.srec *.elf armcode\n\n");
+ fw.write(".SECONDARY:\n");
+ fw.write("%.o: %.c $(DEPS)\n");
+ fw.write(" $(CC) -fdata-sections -ffunction-sections -c -o $@ $< $(INCLUDES)\n\n");
+ fw.write("%.o: %.s $(DEPS)\n");
+ fw.write(" $(CC) -c -o $@ $< $(INCLUDES)\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * helper function to get the Amalthea Model
+ *
+ */
+ public Amalthea getModel() {
+ return this.model;
+ }
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/RunFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/RunFileCreation.java
new file mode 100755
index 0000000..3d723f7
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/RunFileCreation.java
@@ -0,0 +1,375 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Process;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.Time;
+import org.eclipse.app4mc.amalthea.model.TimeUnit;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil.TimeType;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+import org.eclipse.app4mc.amalthea.model.util.TimeUtil;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of Runnable Definition with Runnable specific delay.
+ *
+ *
+ */
+
+public class RunFileCreation {
+ final private Amalthea model;
+
+ /**
+ * Constructor RunFileCreation
+ *
+ * @param Model
+ * Amalthea Model
+ * @param srcPath
+ * @param pthreadFlag
+ * @throws IOException
+ */
+ public RunFileCreation(final Amalthea Model, final String srcPath, final String path2, final int configFlag)
+ throws IOException {
+ this.model = Model;
+ System.out.println("Runnable File Creation Begins");
+ fileCreate(this.model, srcPath, path2, configFlag);
+ System.out.println("Runnable File Creation Ends");
+
+ }
+
+
+ /**
+ * Runnable File Creation
+ *
+ * @param model
+ * @param srcPath
+ * @param path2
+ * @param configFlag
+ * @param tasks
+ * @param runnables
+ * @throws IOException
+ */
+ private static void fileCreate(final Amalthea model, final String srcPath, final String path2, final int configFlag)
+ throws IOException {
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> task = DeploymentUtil.getTasksMappedToCore(pu, model);
+ final List<Task> tasks = new ArrayList<Task>(task);
+ final String fname = srcPath + File.separator + "runnable" + k + ".c";
+ final File f2 = new File(srcPath);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ if (0x2000 == (configFlag & 0xF000)) {
+ fileUtil.fileMainHeader(f1);
+ runFileHeader(f1);
+ headerIncludesRun(f1, k);
+ runnablePthreadDefinition(f1, tasks, model);
+ }
+ else {
+ fileUtil.fileMainHeader(f1);
+ runFileHeader(f1);
+ headerIncludesRun(f1, k);
+ runnableDefinition(f1, tasks, model);
+ }
+
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ final String fname2 = srcPath + File.separator + "runnable" + k + ".h";
+ final File f4 = new File(srcPath);
+ final File f3 = new File(fname2);
+ f4.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn1 = f3;
+ @SuppressWarnings("resource")
+ final FileWriter fw1 = new FileWriter(fn1, true);
+ try {
+ if (0x2000 == (configFlag & 0xF000)) {
+ fileUtil.fileMainHeader(f3);
+ runFileHeader(f3);
+ headerIncludesRunPthreadHead(f3);
+ runnableDeclaration(f3, tasks);
+ }
+ else {
+ fileUtil.fileMainHeader(f3);
+ runFileHeader(f3);
+ headerIncludesRunHead(f3);
+ runnableDeclaration(f3, tasks);
+ }
+
+ }
+ finally {
+ try {
+ fw1.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ k++;
+ }
+ }
+
+ /**
+ * Title Card for RunFileCreation
+ *
+ * @param file
+ */
+ private static void runFileHeader(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : Runnable Header\n");
+ fw.write("*Description : Runnable Definition with Runnable delay\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * Header inclusion for the Runnable.c file
+ *
+ * @param file
+ */
+ private static void headerIncludesRun(final File file, final int k) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"runnable" + k + ".h\"\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * RunFileCreation - Header inclusion for runnable.h
+ *
+ * @param file
+ */
+ private static void headerIncludesRunHead(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ // fw.write("#include \"runnable.h\"\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * RunFileCreation - Header inclusion for runnable.h pthread specific
+ *
+ * @param file
+ */
+ private static void headerIncludesRunPthreadHead(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * RunFileCreation - Runnable Definition Pthread specific
+ *
+ * @param file
+ * @param tasks
+ * @param model
+ */
+ private static void runnablePthreadDefinition(final File file, final List<Task> tasks, final Amalthea model) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ // int taskCounter =1;
+ for (final Task t : tasks) {
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(t, null);
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ // int runnableCounter =1;
+ for (final Runnable Run : runnablesOfTask) {
+ fw.write("void " + Run.getName() + " (void)\t{\n");
+ /*
+ * fw.write("\tvDisplayMessagePthread(\" " + t.getName() +
+ * " \tRunnable Execution " + "\t" + Run.getName() +
+ * "\\n\");\n");
+ */
+ final Process RunTaskName = SoftwareUtil.getCallingProcesses(Run, null).get(0);
+ final Set<ProcessingUnit> pu = DeploymentUtil.getAssignedCoreForProcess(RunTaskName, model);
+ if (pu != null) {
+ for (final ProcessingUnit p : pu) {
+ Time RunTime1 = RuntimeUtil.getExecutionTimeForRunnable(Run, p, null, TimeType.WCET);
+ RunTime1 = TimeUtil.convertToTimeUnit(RunTime1, TimeUnit.US);
+
+ final double sleepTime = RunTime1.getValue().doubleValue();
+
+ fw.write("\tusleep(" + sleepTime + ");\n");
+ break;
+ }
+ }
+ fw.write("}\n");
+ // runnableCounter++;
+ }
+ // taskCounter++;
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * Runnable Definition(Generic)
+ *
+ * @param file
+ * @param tasks
+ * @param model
+ */
+ private static void runnableDefinition(final File file, final List<Task> tasks, final Amalthea model) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ for (final Task t : tasks) {
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(t, null);
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ for (final Runnable Run : runnablesOfTask) {
+ fw.write("void " + Run.getName() + " \t(void)\t{\n");
+ final Process RunTaskName = SoftwareUtil.getCallingProcesses(Run, null).get(0);
+ final Set<ProcessingUnit> pu = DeploymentUtil.getAssignedCoreForProcess(RunTaskName, model);
+ for (final ProcessingUnit p : pu) {
+ Time RunTime1 = RuntimeUtil.getExecutionTimeForRunnable(Run, p, null, TimeType.WCET);
+ RunTime1 = TimeUtil.convertToTimeUnit(RunTime1, TimeUnit.US);
+ break;
+ }
+ fw.write("}\n");
+ }
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * Runnable Declaration in runnable.h
+ *
+ * @param file
+ * @param runnables
+ */
+ private static void runnableDeclaration(final File file, final List<Task> tasks) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final List<Runnable> runnables = new ArrayList<Runnable>();
+ for (final Task ta : tasks) {
+ runnables.addAll(SoftwareUtil.getRunnableList(ta, null));
+ }
+ for (final Runnable Run : runnables) {
+ fw.write("void " + Run.getName() + " (void);\n");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ /**
+ * helper function to get the Amalthea Model
+ *
+ */
+ public Amalthea getModel() {
+ return this.model;
+ }
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/SharedLabelsFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/SharedLabelsFileCreation.java
new file mode 100644
index 0000000..a991ec3
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/SharedLabelsFileCreation.java
@@ -0,0 +1,367 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Declaration of Labels with initial values .
+ *
+ *
+ */
+
+/**
+ * @author rpras
+ *
+ */
+public class SharedLabelsFileCreation {
+ final private Amalthea model;
+
+ /**
+ * Constructor LabelFileCreation
+ *
+ * @param Model
+ * Amalthea Model
+ * @param srcPath
+ * @throws IOException
+ */
+ public SharedLabelsFileCreation(final Amalthea Model, final String srcPath) throws IOException {
+ this.model = Model;
+ System.out.println("Shared Label File Creation Begins");
+ fileCreate(this.model, srcPath);
+ System.out.println("Shared Label File Creation Ends");
+ }
+
+ /**
+ * FileCreation LabelFileCreation
+ *
+ * @param model
+ * @param srcPath
+ * @throws IOException
+ */
+ private static void fileCreate(final Amalthea model, final String srcPath) throws IOException {
+ final EList<Label> labellist = model.getSwModel().getLabels();
+ final String fname1 = srcPath + File.separator + "shared_comms.c";
+ final String fname2 = srcPath + File.separator + "shared_comms.h";
+ final File f2 = new File(srcPath);
+ final File f1 = new File(fname1);
+ final File f3 = new File(fname2);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn1 = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn1, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ sharedLabelFileHeader(f1);
+ headerIncludesSharedLabel(f1);
+ SharedLabelDeclaration(f1, model, labellist);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ try {
+ fileUtil.fileMainHeader(f3);
+ sharedLabelFileHeaderHead(f3);
+ headerIncludesSharedLabelHead(f3);
+ SharedLabelDeclarationHead(f3, model, labellist);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * Title card - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void sharedLabelFileHeader(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : Shared Label Declaration\n");
+ fw.write("*Description : Declaration and Initialisation of Shared Label\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * Title card - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void sharedLabelFileHeaderHead(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : Shared Label Declaration\n");
+ fw.write("*Description : Header file for Declaration and Initialisation of Shared Label\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * Header inclusion - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void headerIncludesSharedLabelHead(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("#ifndef DEMO_PARALLELLA_SHARED_COMMS_H_\n");
+ fw.write("#define DEMO_PARALLELLA_SHARED_COMMS_H_\n\n");
+
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <stdint.h>\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * Header inclusion - LabelFileCreation
+ *
+ * @param file
+ */
+ private static void headerIncludesSharedLabel(final File file) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include \"shared_comms.h\"\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * Shared Label definition and initialization structure.
+ *
+ * @param file
+ * @param labellist
+ */
+ private static void SharedLabelDeclaration(final File file, final Amalthea model, final EList<Label> labellist) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final List<Label> SharedLabelList = LabelFileCreation.SharedLabelFinder(model);
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ // System.out.println("Shared Label size 0");
+ }
+ else {
+ // System.out.println("Shared Label size
+ // "+SharedLabelList.size());
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (puListUnique.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+
+ final HashMap<Label, String> SharedLabelTypeMap = new HashMap<Label, String>();
+ for (final Label share : SharedLabelListSortCore) {
+ SharedLabelTypeMap.put(share, share.getSize().toString());
+ }
+ final List<String> SharedTypeMapList = new ArrayList<>(
+ SharedLabelTypeMap.values().stream().distinct().collect(Collectors.toList()));
+ final List<Label> SharedLabelMapList = new ArrayList<Label>(SharedLabelTypeMap.keySet());
+ for (int k = 0; k < SharedTypeMapList.size(); k++) {
+ final List<Label> SharedLabel = new ArrayList<Label>();
+ final String sh = SharedTypeMapList.get(k);
+ for (final Label s : SharedLabelMapList) {
+ final String ShTy = SharedLabelTypeMap.get(s);
+ if (sh.equals(ShTy)) {
+ SharedLabel.add(s);
+ }
+ }
+ int SharedLabelCounter = SharedLabel.size();
+ if (SharedLabelCounter != 0) {
+
+
+ fw.write(fileUtil.datatype(sh.toString()) + " *outbuf_shared" + sh.toString().replace(" ", "")
+ + "[" + SharedLabelCounter + "];\n\n");
+ fw.write("void shared_label_" + sh.toString().replace(" ", "") + "_init(){\n");
+ fw.write("\toutbuf_shared" + sh.toString().replace(" ", "") + "[0] = ("
+ + fileUtil.datatype(sh.toString()) + " *) shared_mem_section"
+ + sh.toString().replace(" ", "") + ";\n");
+ for (int i = 1; i < SharedLabelCounter; i++) {
+ fw.write("\toutbuf_shared" + sh.toString().replace(" ", "") + "[" + i + "]=outbuf_shared"
+ + sh.toString().replace(" ", "") + "[" + i + "] + 1;\n");
+ }
+ fw.write("\tfor (int i=0;i<" + SharedLabelCounter + ";i++){\n");
+ fw.write("\t\t*outbuf_shared" + sh.toString().replace(" ", "") + "[i] =0;\n");
+ fw.write("\t}\n");
+ fw.write("}\n\n");
+ fw.write("void shared_label_" + sh.toString().replace(" ", "")
+ + "_write(int label_indx,int payload){\n");
+ // fw.write("\t"+fileUtil.datatype(sh.toString())+"
+ // retval=NULL;\n");
+ fw.write("\t*outbuf_shared" + sh.toString().replace(" ", "") + "[label_indx] = payload;\n");
+ // fw.write("\treturn retval;\n\n");
+ fw.write("}\n\n");
+ fw.write("" + fileUtil.datatype(sh.toString()) + " shared_label_" + sh.toString().replace(" ", "")
+ + "_read(int label_indx){\n");
+ fw.write("\treturn *outbuf_shared" + sh.toString().replace(" ", "") + "[label_indx];\n");
+ fw.write("}\n\n");
+ }
+ SharedLabelCounter = 0;
+ }
+ fw.write("\n\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * Shared Label definition and initialization structure.
+ *
+ * @param file
+ * @param labellist
+ */
+ private static void SharedLabelDeclarationHead(final File file, final Amalthea model,
+ final EList<Label> labellist) {
+ try {
+ final File fn = file;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final List<Label> SharedLabelList = LabelFileCreation.SharedLabelFinder(model);
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ System.out.println("Shared Label size 0");
+ }
+ else {
+ // System.out.println("Shared Label size
+ // "+SharedLabelList.size());
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (puListUnique.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+
+ final HashMap<Label, String> SharedLabelTypeMap = new HashMap<Label, String>();
+ for (final Label share : SharedLabelListSortCore) {
+ SharedLabelTypeMap.put(share, share.getSize().toString());
+ }
+ final List<String> SharedTypeMapList = new ArrayList<>(
+ SharedLabelTypeMap.values().stream().distinct().collect(Collectors.toList()));
+ final List<Label> SharedLabelMapList = new ArrayList<Label>(SharedLabelTypeMap.keySet());
+ for (int k = 0; k < SharedTypeMapList.size(); k++) {
+ final List<Label> SharedLabel = new ArrayList<Label>();
+ final String sh = SharedTypeMapList.get(k);
+ for (final Label s : SharedLabelMapList) {
+ final String ShTy = SharedLabelTypeMap.get(s);
+ if (sh.equals(ShTy)) {
+ SharedLabel.add(s);
+ }
+ }
+ int SharedLabelCounter = SharedLabel.size();
+ if (SharedLabelCounter != 0) {
+ fw.write("\n#define shared_mem_section" + sh.toString().replace(" ", "") + " 0x0" + (k + 1)
+ + "000000\n\n");
+ fw.write("void shared_label_" + sh.toString().replace(" ", "") + "_init();\n");
+ fw.write("void shared_label_" + sh.toString().replace(" ", "")
+ + "_write(int label_indx,int payload);\n");
+ fw.write("" + fileUtil.datatype(sh.toString()) + " shared_label_" + sh.toString().replace(" ", "")
+ + "_read(int label_indx);\n");
+ }
+ SharedLabelCounter = 0;
+ }
+ fw.write("\n\n");
+ fw.write("#endif");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ /**
+ * helper function to get the Amalthea Model
+ *
+ */
+ public Amalthea getModel() {
+ return this.model;
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/TaskFileCreation.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/TaskFileCreation.java
new file mode 100755
index 0000000..96d2815
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/TaskFileCreation.java
@@ -0,0 +1,683 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.MappingModel;
+import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Stimulus;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.Time;
+import org.eclipse.app4mc.amalthea.model.TimeUnit;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.amalthea.model.util.HardwareUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil;
+import org.eclipse.app4mc.amalthea.model.util.RuntimeUtil.TimeType;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+import org.eclipse.app4mc.amalthea.model.util.TimeUtil;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of Task Definition with Cin and Cout Calls.
+ *
+ *
+ */
+
+public class TaskFileCreation {
+ final private Amalthea model;
+
+ /**
+ * Constructor TaskFileCreation
+ *
+ * @param Model
+ * - Amalthea Model
+ * @param srcPath
+ * @param pthreadFlag
+ * @param preemptionFlag
+ * @throws IOException
+ */
+ public TaskFileCreation(final Amalthea Model, final String srcPath, final String path2, final int configFlag)
+ throws IOException {
+ this.model = Model;
+
+ if ((0x3100 == (0xFF00 & configFlag)) || (0x1300 == (0xFF00 & configFlag))) {
+ System.out.println("Task File Creation Begins");
+ fileCreate(this.model, srcPath, path2, configFlag);
+ System.out.println("Task File Creation Ends");
+ }
+ else {
+ System.out.println("Task File Creation Begins");
+ fileCreatePthread(this.model, srcPath, path2, configFlag);
+ System.out.println("Task File Creation Ends");
+ }
+
+ }
+
+
+ private static void fileCreate(final Amalthea model, final String srcPath, final String path2, final int configFlag)
+ throws IOException {
+ boolean preemptionFlag = false;
+ if (0x0020 == (0x00F0 & configFlag)) {
+ preemptionFlag = true;
+ }
+ else {
+ preemptionFlag = false;
+ }
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> task = DeploymentUtil.getTasksMappedToCore(pu, model);
+ final List<Task> tasks = new ArrayList<Task>(task);
+ final String fname = srcPath + File.separator + "taskDef" + k + ".c";
+ final File f2 = new File(srcPath);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ taskFileHeader(f1);
+ if ((0x3000 == (0xF000 & configFlag)) & (0x0100 == (0x0F00 & configFlag))) {
+ headerIncludesTaskHeadRMS(f1, k);
+ TaskCounter(f1, tasks);
+ TaskDefinitionRMS(f1, model, tasks, preemptionFlag);
+ }
+ else if ((0x1000 == (0xF000 & configFlag)) & (0x0300 == (0x0F00 & configFlag))) {
+ headerIncludesTaskHeadRMS(f1, k);
+ TaskCounter(f1, tasks);
+ TaskDefinitionFreeRTOS(f1, model, tasks, preemptionFlag);
+ }
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ final String fname2 = srcPath + File.separator + "taskDef" + k + ".h";
+ final File f4 = new File(srcPath);
+ final File f3 = new File(fname2);
+ f4.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ final File fn1 = f3;
+ @SuppressWarnings("resource")
+ final FileWriter fw1 = new FileWriter(fn1, true);
+ try {
+ fileUtil.fileMainHeader(f3);
+ taskFileHeader(f3);
+ headerIncludesTaskRMSHead(f3, k);
+ mainStaticTaskDef(f3, tasks);
+
+ }
+ finally {
+ try {
+ fw1.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ k++;
+ }
+ }
+
+
+ private static void TaskCounter(final File f3, final List<Task> tasks) {
+ try {
+ final File fn = f3;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true); // the true will
+ // append the new
+ // data
+ fw.write("/* Task Counter Declaration. */\n");
+ for (final Task ta : tasks) {
+ fw.write("int taskCount" + ta.getName() + "\t=\t0;\n");
+ }
+ fw.write("\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+
+ private static void fileCreatePthread(final Amalthea model, final String path1, final String path2,
+ final int configFlag) throws IOException {
+ boolean preemptionFlag = false;
+ if (0x0020 == (0x00F0 & configFlag)) {
+ preemptionFlag = true;
+ }
+ else {
+ preemptionFlag = false;
+ }
+ final EList<SchedulerAllocation> CoreNo = model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> task = DeploymentUtil.getTasksMappedToCore(pu, model);
+ final List<Task> tasks = new ArrayList<Task>(task);
+ final String fname = path1 + File.separator + "taskDef" + k + ".c";
+ final File f2 = new File(path1);
+ final File f1 = new File(fname);
+ f2.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ try {
+ fileUtil.fileMainHeader(f1);
+ taskFileHeader(f1);
+ headerIncludesTaskPthreadHead(f1);
+ TaskDefinitionPthread(f1, tasks, model, preemptionFlag);
+ }
+ finally {
+ try {
+ fw.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ final String fname2 = path1 + File.separator + "taskDef" + k + ".h";
+ final File f4 = new File(path1);
+ final File f3 = new File(fname2);
+ f4.mkdirs();
+ try {
+ f1.createNewFile();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ final File fn1 = f3;
+ @SuppressWarnings("resource")
+ final FileWriter fw1 = new FileWriter(fn1, true);
+ try {
+ fileUtil.fileMainHeader(f3);
+ taskFileHeader(f3);
+ headerIncludesPthreadTask(f3, k);
+ mainStaticTaskPthreadDef(f3, tasks);
+ }
+ finally {
+ try {
+ fw1.close();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ }
+ k++;
+ }
+ }
+
+ private static void headerIncludesPthreadTask(final File f3, final int k) {
+ try {
+ final File fn = f3;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true); // the true will
+ // append the new
+ // data
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n\n");
+ fw.write("#include <stdint.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"runnable" + k + ".h\"\n");
+ fw.write("#include \"label" + k + ".h\"\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ private static void mainStaticTaskPthreadDef(final File f3, final List<Task> tasks) {
+ try {
+ final File fn = f3;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Static definition of the tasks. */\n");
+ for (final Task task : tasks) {
+ fw.write("void v" + task.getName() + "( void *t );\n");
+ }
+ fw.write("\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ private static void TaskDefinitionPthread(final File f1, final List<Task> tasks, final Amalthea model,
+ final boolean preemptionFlag) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ for (final Task task : tasks) {
+ final List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(task, null);
+ final ArrayList<Label> labellist1 = new ArrayList<Label>();
+ for (final Runnable run : runnablesOfTask) {
+ final Set<Label> labellist = SoftwareUtil.getAccessedLabelSet(run, null);
+ labellist1.addAll(labellist);
+ }
+ final List<Label> listWithoutDuplicates2 = labellist1.stream().distinct().collect(Collectors.toList());
+ for (final Label lab : listWithoutDuplicates2) {
+ final String type = fileUtil.datatype(lab.getSize().toString());
+ fw.write("\t\textern\t" + type + "\t" + lab.getName() + ";\n");
+ }
+ fw.write("\n\n\n");
+ for (final Label lab : listWithoutDuplicates2) {
+ final String type = fileUtil.datatype(lab.getSize().toString());
+ fw.write("\t\textern\t" + type + "\t" + lab.getName() + "_" + task.getName() + ";\n");
+ }
+ fw.write("\n\n\n");
+
+ fw.write("\n\tvoid cIN_" + task.getName() + "()\n\t{\n");
+ for (final Label lab : listWithoutDuplicates2) {
+ fw.write("\t\t" + lab.getName() + "_" + task.getName() + "\t=\t" + lab.getName() + ";\n");
+ }
+ fw.write("\t}\n");
+ fw.write("\n\tvoid cOUT_" + task.getName() + "()\n\t{\n");
+ final ArrayList<Label> labellist2 = new ArrayList<Label>();
+ for (final Runnable run : runnablesOfTask) {
+ final Set<Label> labellist = SoftwareUtil.getWriteLabelSet(run, null);
+ labellist2.addAll(labellist);
+ }
+ final List<Label> listWithoutDuplicates1 = labellist2.stream().distinct().collect(Collectors.toList());
+
+ for (final Label lab : listWithoutDuplicates1) {
+ fw.write("\t\t" + lab.getName() + "\t=\t" + lab.getName() + "_" + task.getName() + ";\n");
+ }
+ fw.write("\t}\n");
+ fw.write("\n\tvoid v" + task.getName() + "( void *t )" + "\n\t{\n");
+ final MappingModel mappingModel = model.getMappingModel();
+ if (mappingModel != null) {
+ final List<ProcessingUnit> processingUnits = HardwareUtil
+ .getModulesFromHwModel(ProcessingUnit.class, model);
+ final ArrayList<ProcessingUnit> localPU = new ArrayList<ProcessingUnit>();
+ localPU.addAll(processingUnits);
+
+ final HashMap<ProcessingUnit, Long> CoreMap = new HashMap<ProcessingUnit, Long>();
+ long count = 0;
+ for (final ProcessingUnit p : localPU) {
+ CoreMap.put(p, count);
+ count++;
+ }
+ final ProcessingUnit pu = DeploymentUtil.getAssignedCoreForProcess(task, model).iterator().next();
+ final Long coreID = CoreMap.get(pu);
+ fw.write("\t\tcpu_set_t cpuset;\n");
+ fw.write("\t\tint cpu = " + coreID + ";\n");
+ fw.write("\t\tCPU_ZERO(&cpuset);\n");
+ fw.write("\t\tCPU_SET( cpu , &cpuset);\n");
+ final Set<ProcessingUnit> procUniSet = DeploymentUtil.getAssignedCoreForProcess(task, model);
+ List<ProcessingUnit> procUniList = null;
+ if (procUniSet != null) {
+ procUniList = new ArrayList<ProcessingUnit>(procUniSet);
+ }
+ if (procUniList != null) {
+ procUniList.get(0);
+ }
+ fw.write("\t\tsched_setaffinity(0, sizeof(cpuset), &cpuset);\n\n");
+ }
+ fw.write("\t\tfor( ;; )\n\t\t{\n");
+ fw.write("\t\t\tsuspendMe ();\n");
+ fw.write("\t\tprint_affinity();\n");
+ fw.write("\t\t\tvDisplayMessagePthread( \"" + task.getName() + " is running\\r\\n\" );\n");
+ fw.write("\t\t\t/* Cin - Create local variables and copy the actual variable to them */\n");
+ fw.write("\t\t\tcIN_" + task.getName() + "();\n");
+ if (preemptionFlag == true) {
+ fw.write("\t\t\tresumeMe ();\n");
+ }
+ fw.write("\n\t\t\t/*Runnable calls */\n");
+ for (final Runnable run : runnablesOfTask) {
+ fw.write("\t\t\t" + run.getName() + "();\n");
+ }
+ fw.write("\n\t\t\t/* Cout - Write back the local variables back to the actual variables */\n");
+ if (preemptionFlag == true) {
+ fw.write("\t\t\tsuspendMe ();\n");
+ }
+ fw.write("\t\t\tcOUT_" + task.getName() + "();\n");
+ fw.write("\t\t\tresumeMe ();\n");
+ fw.write("\t\t\tsleepTimerMs(DELAY_MULT*NULL);\n");
+ fw.write("\t\t\tpthread_exit((void*) t);\n");
+ final Time tasktime = fileUtil.getRecurrence(task);
+ if (tasktime != null) {
+ // TimeUtil.getAsTimeUnit(fileUtil.getRecurrence(task),
+ // null);
+
+ }
+ fw.write("\t\t}\n");
+ fw.write("\t}\n\n");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void taskFileHeader(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : Task Definition\n");
+ fw.write("*Description : Task Definition with Task Structure\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void headerIncludesTaskPthreadHead(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("#define _GNU_SOURCE\n\n");
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n");
+ fw.write("#include <pthread.h>\n");
+ fw.write("#include <sched.h>\n");
+ fw.write("#include <stdint.h>\n\n");
+
+ // fw.write("#define DELAY_MULT 100\n\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void headerIncludesTaskRMSHead(final File f1, final int k) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Standard includes. */\n");
+ fw.write("#include <stdio.h>\n");
+ fw.write("#include <stdlib.h>\n");
+ fw.write("#include <string.h>\n");
+ fw.write("#include <stdint.h>\n\n");
+ fw.write("/* Scheduler includes. */\n");
+ fw.write("#include \"FreeRTOS.h\"\n");
+ fw.write("#include \"queue.h\"\n");
+ fw.write("#include \"croutine.h\"\n");
+ fw.write("#include \"debugFlags.h\"\n");
+ fw.write("#include \"task.h\"\n");
+ fw.write("#include \"ParallellaUtils.h\"\n");
+ fw.write("#include \"label" + k + ".h\"\n");
+ fw.write("#include \"runnable" + k + ".h\"\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void headerIncludesTaskHeadRMS(final File f1, final int k) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("#include \"taskDef" + k + ".h\"\n\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ public static void mainStaticTaskDef(final File f1, final List<Task> tasks) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("/* Static definition of the tasks. */\n");
+ for (final Task task : tasks) {
+ fw.write("void v" + task.getName() + "( );\n");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ public static HashMap<Task, Integer> TaskIndexMapping(final Amalthea model) {
+ final EList<Task> tasks = model.getSwModel().getTasks();
+ final HashMap<Task, Integer> TaskMapping = new HashMap<Task, Integer>();
+ int i = 0;
+ for (final Task Ta : tasks) {
+ TaskMapping.put(Ta, i);
+ i++;
+ }
+ return TaskMapping;
+ }
+
+
+ private static void TaskDefinitionRMS(final File f1, final Amalthea model, final List<Task> tasks,
+ final boolean preemptionFlag) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final HashMap<Task, Integer> taskIndex = TaskIndexMapping(model);
+ for (final Task task : tasks) {
+ final Integer taskCount = taskIndex.get(task);
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(task, null);
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ fw.write("\n");
+ final List<Label> taskLabelList = TaskSpecificLabel(model, task);
+ for (final Label lab : taskLabelList) {
+ final String type = fileUtil.datatype(lab.getSize().toString());
+ fw.write("\t" + type + "\t" + lab.getName() + ";\n");
+ }
+ fw.write("\n");
+ fw.write("\n\n");
+ fw.write("\n\tvoid v" + task.getName() + "()" + "\n\t{\n");
+
+ // fw.write("\n\n");
+ fw.write("\t\tupdateDebugFlag(700);\n");
+ fw.write("\t\ttraceTaskPasses(1,1);\n");
+ fw.write("\n\t\t\t/*Runnable calls */\n");
+ for (final Runnable run : runnablesOfTask) {
+ fw.write("\t\t\t" + run.getName() + "();\n");
+ }
+ final MappingModel mappingModel = model.getMappingModel();
+ ProcessingUnit pu = null;
+ if (mappingModel != null) {
+ pu = DeploymentUtil.getAssignedCoreForProcess(task, model).iterator().next();
+ Time taskTime = RuntimeUtil.getExecutionTimeForProcess(task, pu, null, TimeType.WCET);
+ taskTime = TimeUtil.convertToTimeUnit(taskTime, TimeUnit.MS);
+ final BigInteger sleepTime = taskTime.getValue();
+ final BigInteger b2 = new BigInteger("1000");
+ final int comparevalue = sleepTime.compareTo(b2);
+ if (comparevalue < 0) {
+ fw.write("\n\t\t\tsleepTimerMs(1 , 1" + (taskCount + 1) + ");\n");
+ }
+ else {
+ fw.write("\n\t\t\tsleepTimerMs(" + sleepTime + ", " + taskCount + 1 + ");\n");
+ }
+
+ }
+ fw.write("\n\t\t\ttaskCount" + task.getName() + "++;");
+ fw.write("\n\t\t\ttraceTaskPasses(" + taskCount + ", taskCount" + task.getName() + ");");
+ fw.write("\n\t\t\ttraceRunningTask(0);\n");
+ fw.write("\t}\n\n");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ private static void TaskDefinitionFreeRTOS(final File f1, final Amalthea model, final List<Task> tasks,
+ final boolean preemptionFlag) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ final HashMap<Task, Integer> taskIndex = TaskIndexMapping(model);
+ for (final Task task : tasks) {
+ Integer taskCount = taskIndex.get(task);
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(task, null);
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ final List<Label> taskLabelList = TaskSpecificLabel(model, task);
+ fw.write("\n");
+ for (final Label lab : taskLabelList) {
+ final String type = fileUtil.datatype(lab.getSize().toString());
+ fw.write("\t\t" + type + "\t" + lab.getName() + ";\n");
+ }
+ fw.write("\n");
+ fw.write("\n\tvoid v" + task.getName() + "()" + "\n\t{\n");
+ fw.write("\tportTickType xLastWakeTime=xTaskGetTickCount();\n");
+ fw.write("\n\t\tfor( ;; )\n\t\t{\n");
+ fw.write("\t\tupdateDebugFlag(700);\n");
+ fw.write("\t\ttraceTaskPasses(1,1);\n");
+ fw.write("\t\t\t/* Cin - Create local variables and copy the actual variable to them */\n");
+ fw.write("\t\t\ttaskENTER_CRITICAL ();\n");
+ fw.write("\t\t\tcIN_" + task.getName() + "();\n");
+ fw.write("\t\t\ttaskEXIT_CRITICAL ();\n");
+ fw.write("\n\t\t\t/*Runnable calls */\n");
+ for (final Runnable run : runnablesOfTask) {
+ fw.write("\t\t\t" + run.getName() + "();\n");
+ }
+ fw.write("\n\t\t\t/* Cout - Write back the local variables back to the actual variables */\n");
+ fw.write("\t\t\ttaskENTER_CRITICAL ();\n");
+ fw.write("\t\t\tcOUT_" + task.getName() + "();\n");
+ fw.write("\t\t\ttaskEXIT_CRITICAL ();\n");
+ final MappingModel mappingModel = model.getMappingModel();
+ ProcessingUnit pu = null;
+ if (mappingModel != null) {
+ pu = DeploymentUtil.getAssignedCoreForProcess(task, model).iterator().next();
+ Time taskTime = RuntimeUtil.getExecutionTimeForProcess(task, pu, null, TimeType.WCET);
+ taskTime = TimeUtil.convertToTimeUnit(taskTime, TimeUnit.MS);
+ final BigInteger sleepTime = taskTime.getValue();
+ final BigInteger b2 = new BigInteger("1000");
+ final int comparevalue = sleepTime.compareTo(b2);
+ if (comparevalue < 0) {
+ fw.write("\n\t\t\tsleepTimerMs(1 , 1" + (taskCount + 1) + ");\n");
+ }
+ else {
+ fw.write("\n\t\t\tsleepTimerMs(" + sleepTime + ", " + taskCount + 1 + ");\n");
+ }
+ taskCount++;
+ }
+ fw.write("\n\t\t\ttaskCount" + task.getName() + "++;");
+ fw.write("\n\t\t\ttraceTaskPasses(" + taskCount + ", taskCount" + task.getName() + ");");
+ fw.write("\n\t\t\ttraceRunningTask(0);\n");
+ final EList<Stimulus> Stimuli = model.getStimuliModel().getStimuli();
+ for (final Stimulus s : Stimuli) {
+ if (s instanceof PeriodicStimulus) {
+ if (task.getStimuli().get(0) == s) {
+ fw.write("\t\t\tvTaskDelayUntil(&xLastWakeTime, "
+ + ((PeriodicStimulus) s).getRecurrence().getValue() + ");\n");
+ }
+ }
+ }
+ fw.write("\t\t}\n");
+ fw.write("\t}\n\n");
+ }
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+ }
+
+ /**
+ * Shared Label definition and initialization structure.
+ *
+ * @param file
+ * @param labellist
+ */
+ public static List<Label> TaskSpecificLabel(final Amalthea model, final Task tasks) {
+ List<Label> SharedLabelList = new ArrayList<Label>(SoftwareUtil.getAccessedLabelSet(tasks, null));
+ SharedLabelList = SharedLabelList.stream().distinct().collect(Collectors.toList());
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ // System.out.println("Shared Label size 0");
+ }
+ else {
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Set<Task> taskList = TaskMap.keySet();
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (!((puListUnique.size() == 1 && taskList.size() > 1) || (puListUnique.size() > 1))) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+ return SharedLabelListSortCore;
+ }
+
+ /**
+ * helper function to get the Amalthea Model
+ *
+ */
+ public Amalthea getModel() {
+ return this.model;
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkFileCreateGUI.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkFileCreateGUI.java
new file mode 100755
index 0000000..1f71463
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkFileCreateGUI.java
@@ -0,0 +1,322 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.checks;
+
+import java.awt.Color;
+import java.awt.Desktop;
+import java.awt.EventQueue;
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.sql.Timestamp;
+
+import javax.imageio.ImageIO;
+import javax.swing.ButtonGroup;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JRadioButton;
+import javax.swing.JSeparator;
+import javax.swing.JTextField;
+import javax.swing.filechooser.FileNameExtensionFilter;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.io.AmaltheaLoader;
+
+/**
+ * Implementation of GUI Design and Action on Button Click.
+ */
+
+public class checkFileCreateGUI {
+ JFrame frame;
+
+ public static void main(final String[] args) {
+ EventQueue.invokeLater(new Runnable() {
+ @SuppressWarnings("null")
+ @Override
+ public void run() {
+ checkFileCreateGUI window = null;
+ try {
+ window = new checkFileCreateGUI();
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+ window.frame.setVisible(true);
+ window.frame.setTitle("CDGen");
+
+ }
+ });
+
+ }
+
+ public checkFileCreateGUI() throws IOException {
+ initialize();
+ }
+
+ int modelIndex;
+ String fileInput;
+ String fileInput1;
+ JTextField txtFieldScheduler = new JTextField("FreeRTOS / RMS / POSIX Browse path");
+ JTextField txtFieldModel = new JTextField("Amalthea Model Browse path");
+
+ private void initialize() throws IOException {
+ this.frame = new JFrame();
+ this.frame.setBounds(100, 100, 864, 272);
+ this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ this.frame.getContentPane().setLayout(null);
+
+ final JRadioButton cdgenFreeRTOS = new JRadioButton("FreeRTOS");
+ cdgenFreeRTOS.setBounds(40, 80, 145, 25);
+ this.frame.getContentPane().add(cdgenFreeRTOS);
+
+ final JRadioButton cdgenPosix = new JRadioButton("POSIX");
+ cdgenPosix.setBounds(40, 110, 145, 25);
+ this.frame.getContentPane().add(cdgenPosix);
+
+ final JRadioButton cdgenCustom = new JRadioButton("RMS(Rate Monotonic)");
+ cdgenCustom.setBounds(40, 140, 210, 25);
+ this.frame.getContentPane().add(cdgenCustom);
+
+ final ButtonGroup group = new ButtonGroup();
+ group.add(cdgenFreeRTOS);
+ group.add(cdgenPosix);
+ group.add(cdgenCustom);
+
+ final JRadioButton cdgenCooperative = new JRadioButton("Cooperative");
+ cdgenCooperative.setBounds(190, 80, 145, 25);
+ this.frame.getContentPane().add(cdgenCooperative);
+
+ final JRadioButton cdgenPreemptive = new JRadioButton("Preemptive");
+ cdgenPreemptive.setBounds(190, 110, 145, 25);
+ this.frame.getContentPane().add(cdgenPreemptive);
+
+ final ButtonGroup group3 = new ButtonGroup();
+ group3.add(cdgenCooperative);
+ group3.add(cdgenPreemptive);
+ final BufferedImage browseButtonIconScheduler = ImageIO.read(new File("./cdgen.graphics/browse.png"));
+ final JButton btnBrowseScheduler = new JButton(new ImageIcon(browseButtonIconScheduler));
+ final JFileChooser fc = new JFileChooser();
+ btnBrowseScheduler.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+ if (e.getSource() == btnBrowseScheduler) {
+ final int returnVal = fc.showOpenDialog(checkFileCreateGUI.this.frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ final File file = fc.getCurrentDirectory();
+ checkFileCreateGUI.this.fileInput = file.getPath();
+ checkFileCreateGUI.this.txtFieldScheduler.setText(checkFileCreateGUI.this.fileInput);
+ }
+ }
+ }
+ });
+ btnBrowseScheduler.setBounds(673, 75, 120, 35);
+ this.frame.getContentPane().add(btnBrowseScheduler);
+
+ final BufferedImage browseButtonIconModel = ImageIO.read(new File("./cdgen.graphics/browse.png"));
+ final JButton btnBrowseModel = new JButton(new ImageIcon(browseButtonIconModel));
+ final JFileChooser fc1 = new JFileChooser();
+ // final String fileInput1;
+ btnBrowseModel.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+
+ if (e.getSource() == btnBrowseModel) {
+ final FileNameExtensionFilter filter = new FileNameExtensionFilter("*.amxmi", "*.amxmi");
+ fc1.addChoosableFileFilter(filter);
+ fc1.setMultiSelectionEnabled(false);
+ // fc1.showOpenDialog(null);
+ final int returnVal = fc1.showOpenDialog(checkFileCreateGUI.this.frame);
+ // System.out.println("\nRam " +
+ // fileUtil.getFileExtension(fc1.getSelectedFile()));
+ // if(fileUtil.getFileExtension(fc1.getSelectedFile())=="amxmi"){
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ final File file = fc1.getSelectedFile();
+ checkFileCreateGUI.this.fileInput1 = file.getPath();
+ checkFileCreateGUI.this.txtFieldModel.setText(checkFileCreateGUI.this.fileInput1);
+ }
+ /*
+ * }else { JOptionPane.showMessageDialog(null,
+ * " choose a file with \".amxmi\" file ","Wrong model file"
+ * ,2); }
+ */
+ }
+ }
+ });
+ btnBrowseModel.setBounds(673, 130, 120, 35);
+ this.frame.getContentPane().add(btnBrowseModel);
+ final BufferedImage helpButtonIcon = ImageIO.read(new File("./cdgen.graphics/help.png"));
+ final JButton btnHelp = new JButton(new ImageIcon(helpButtonIcon));
+ btnHelp.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+ try {
+ Desktop.getDesktop()
+ .browse(new URL("https://cdgendoc.readthedocs.io/en/latest/GUI_Layout.html").toURI());
+ }
+ catch (final Exception e1) {
+ e1.printStackTrace();
+ }
+ }
+ });
+ btnHelp.setBounds(800, 10, 30, 30);
+ this.frame.getContentPane().add(btnHelp);
+
+ this.txtFieldScheduler.setBounds(370, 80, 280, 25);
+ this.frame.getContentPane().add(this.txtFieldScheduler);
+
+
+ this.txtFieldModel.setBounds(370, 140, 280, 25);
+ this.frame.getContentPane().add(this.txtFieldModel);
+
+
+ final BufferedImage startButtonIcon = ImageIO.read(new File("./cdgen.graphics/start.png"));
+ final JButton btnSelectTasks = new JButton(new ImageIcon(startButtonIcon));
+ btnSelectTasks.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+ // File inputFile = new File();
+ // String inputFile = Constants.DEMOCARMULTI;
+ final Amalthea model = AmaltheaLoader
+ .loadFromFileNamed(checkFileCreateGUI.this.txtFieldModel.getText());
+ System.out.println("\n Model file " + checkFileCreateGUI.this.txtFieldModel.getText());
+ if (model == null) {
+ System.out.println("Error: No model loaded!");
+ return;
+ }
+ final String path = System.getProperty("user.dir");
+ String timestamp = new Timestamp(System.currentTimeMillis()).toString();
+ timestamp = timestamp.substring(0, timestamp.length() - 6).replaceAll(":", "");
+ timestamp = timestamp.replaceAll("-", "_");
+ timestamp = timestamp.replaceAll(" ", "_");
+ final File theDir = new File(timestamp);
+ if (!theDir.exists()) {
+ System.out.println("creating directory: " + theDir.getName());
+ boolean result = false;
+ try {
+ theDir.mkdir();
+ result = true;
+ }
+ catch (final SecurityException se) {
+ System.exit(0);
+ }
+ if (result) {
+ System.out.println("DIR created");
+ }
+ }
+ final String path1 = path + "/" + timestamp;
+ final String path2 = checkFileCreateGUI.this.txtFieldScheduler.getText();
+ int configFlag = 0xFFFF;
+ /*
+ *
+ * 0X1000 ==> FreeRTOS 0X2000 ==> POSIX 0x3000 ==> RMS
+ *
+ * 0X0010 ==> Cooperative 0X0020 ==> Preemptive
+ *
+ * FreeRTOS == Cooperative == 0x1X10 FreeRTOS == Preemptive ==
+ * 0x1X20 POSIX == Cooperative == 0x2X10 POSIX == Preemptive ==
+ * 0x2X20 RMS == Cooperative == 0x3X10 RMS == Preemptive ==
+ * 0x3X20 X == Don't care
+ */
+
+ System.out.println("############################################################");
+ if (cdgenFreeRTOS.isSelected() & cdgenPreemptive.isSelected()) {
+ configFlag = 0x1320;
+ System.out.println("\t\tFreeRTOS\tPreemptive");
+ System.out.println("############################################################");
+ new checkFreeRTOSConfiguration(model, path1, path2, configFlag);
+ }
+ else if (cdgenFreeRTOS.isSelected() & cdgenCooperative.isSelected()) {
+ configFlag = 0x1310;
+ System.out.println("\t\tFreeRTOS\tCooperative");
+ System.out.println("############################################################");
+ new checkFreeRTOSConfiguration(model, path1, path2, configFlag);
+ }
+ else if (cdgenPosix.isSelected() & cdgenPreemptive.isSelected()) {
+ configFlag = 0x2320;
+ System.out.println("\t\tPosix\tPreemptive");
+ System.out.println("############################################################");
+ new checkPOSIXConfiguration(model, path1, path2, configFlag);
+ }
+ else if (cdgenPosix.isSelected() & cdgenCooperative.isSelected()) {
+ configFlag = 0x2310;
+ System.out.println("\t\tPosix\tCooperative");
+ System.out.println("############################################################");
+ new checkPOSIXConfiguration(model, path1, path2, configFlag);
+ }
+ else if (cdgenCustom.isSelected() & cdgenPreemptive.isSelected()) {
+ configFlag = 0x3120;
+ System.out.println("\t\tRMS\tPreemptive");
+ System.out.println("############################################################");
+ new checkRMSConfiguration(model, path1, path2, configFlag);
+ }
+ else if (cdgenCustom.isSelected() & cdgenCooperative.isSelected()) {
+ configFlag = 0x3110;
+ System.out.println("\t\tRMS\tCooperative");
+ System.out.println("############################################################");
+ new checkRMSConfiguration(model, path1, path2, configFlag);
+ }
+ else {
+ System.out.println("Configuration Not Defined!");
+ }
+ }
+ });
+ btnSelectTasks.setBounds(190, 190, 120, 35);
+ this.frame.getContentPane().add(btnSelectTasks);
+ final BufferedImage closeButtonIcon = ImageIO.read(new File("./cdgen.graphics/close.png"));
+ final JButton btnClose = new JButton(new ImageIcon(closeButtonIcon));
+ btnClose.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(final ActionEvent e) {
+ System.exit(0);
+ }
+ });
+ btnClose.setBounds(370, 190, 120, 35);
+ this.frame.getContentPane().add(btnClose);
+ final JLabel lblAllTasks = new JLabel("OS Options");
+ lblAllTasks.setFont(new Font("Tahoma", Font.BOLD, 13));
+ lblAllTasks.setBounds(40, 55, 110, 16);
+ this.frame.getContentPane().add(lblAllTasks);
+
+ final JLabel lblModelSelection = new JLabel("Model selection");
+ lblModelSelection.setFont(new Font("Tahoma", Font.BOLD, 13));
+ lblModelSelection.setBounds(370, 110, 145, 25);
+ this.frame.getContentPane().add(lblModelSelection);
+
+ final JLabel lblSourcePath = new JLabel("Source Path");
+ lblSourcePath.setFont(new Font("Tahoma", Font.BOLD, 13));
+ lblSourcePath.setBounds(370, 50, 145, 25);
+ this.frame.getContentPane().add(lblSourcePath);
+
+ final JLabel lblResponsetime = new JLabel("Task Preemption");
+ lblResponsetime.setFont(new Font("Tahoma", Font.BOLD, 13));
+ lblResponsetime.setBounds(190, 55, 150, 16);
+ this.frame.getContentPane().add(lblResponsetime);
+
+ final JLabel lblPerformanceMetric = new JLabel("CDGen - Code Generator for APP4MC");
+ lblPerformanceMetric.setForeground(Color.ORANGE);
+ lblPerformanceMetric.setFont(new Font("Tahoma", Font.BOLD, 20));
+ lblPerformanceMetric.setBounds(27, 13, 450, 30);
+ this.frame.getContentPane().add(lblPerformanceMetric);
+
+ final JSeparator separator = new JSeparator();
+ separator.setBounds(12, 42, 822, 272);
+ this.frame.getContentPane().add(separator);
+ }
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkFreeRTOSConfiguration.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkFreeRTOSConfiguration.java
new file mode 100644
index 0000000..28b8fc0
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkFreeRTOSConfiguration.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.checks;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.cdgen.FreeRTOSConfigFileCreation;
+import org.eclipse.app4mc.cdgen.LabelFileCreation;
+import org.eclipse.app4mc.cdgen.MainRMSFileCreation;
+import org.eclipse.app4mc.cdgen.MakeFileCreation;
+import org.eclipse.app4mc.cdgen.RunFileCreation;
+import org.eclipse.app4mc.cdgen.SharedLabelsFileCreation;
+import org.eclipse.app4mc.cdgen.TaskFileCreation;
+import org.eclipse.app4mc.cdgen.test.testTaskStructure;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+
+
+/**
+ * Implementation of GUI Design and Action on Button Click.
+ *
+ */
+
+public class checkFreeRTOSConfiguration {
+ public checkFreeRTOSConfiguration(final Amalthea model, final String srcPath, final String headerPath,
+ final int configFlag) {
+ FreeRTOSConfiguration(model, srcPath, headerPath, configFlag);
+ }
+
+ public void FreeRTOSConfiguration(final Amalthea model, final String srcPath, final String headerPath,
+ final int configFlag) {
+ try {
+ // String path = System.getProperty("user.dir");
+ // create new file
+ final File l_SourceDirectory = new File(headerPath);
+ // array of files and directory
+ final String[] filesName = l_SourceDirectory.list();
+ // for each name in the path array
+ for (final String pathi : filesName) {
+ final File SourceFile = new File(l_SourceDirectory.toString() + "/" + pathi);
+ final File DestinationFile = new File(Paths.get(srcPath).toString() + "/" + pathi);
+ if (fileUtil.getFileExtension(SourceFile) == "c" || fileUtil.getFileExtension(SourceFile) == "h"
+ || fileUtil.getFileExtension(SourceFile) == "") {
+ com.google.common.io.Files.copy(SourceFile, DestinationFile);
+ }
+ }
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new MainRMSFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new RunFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new MakeFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new FreeRTOSConfigFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new TaskFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new SharedLabelsFileCreation(model, srcPath);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new LabelFileCreation(model, srcPath);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new testTaskStructure(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ System.out.println("Generation completed, Check path " + srcPath);
+ // TODO: Set hyperlink for path
+ // System.out.println("<a href=\"http://www.google.com\">whatever</a>");
+ try {
+ Desktop.getDesktop().open(new File(srcPath));
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ System.exit(0);
+ }
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkPOSIXConfiguration.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkPOSIXConfiguration.java
new file mode 100644
index 0000000..4bb4628
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkPOSIXConfiguration.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.checks;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.cdgen.FreeRTOSConfigFileCreation;
+import org.eclipse.app4mc.cdgen.LabelFileCreation;
+import org.eclipse.app4mc.cdgen.MainFileCreation;
+import org.eclipse.app4mc.cdgen.MakeFileCreation;
+import org.eclipse.app4mc.cdgen.RunFileCreation;
+import org.eclipse.app4mc.cdgen.TaskFileCreation;
+import org.eclipse.app4mc.cdgen.test.testTaskStructure;
+
+
+/**
+ * Implementation of GUI Design and Action on Button Click.
+ *
+ *
+ */
+
+public class checkPOSIXConfiguration {
+ public checkPOSIXConfiguration(final Amalthea model, final String srcPath, final String headerPath,
+ final int configFlag) {
+ POSIXConfiguration(model, srcPath, headerPath, configFlag);
+ }
+
+ public void POSIXConfiguration(final Amalthea model, final String srcPath, final String headerPath,
+ final int configFlag) {
+ try {
+ new MainFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new RunFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new LabelFileCreation(model, srcPath);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new FreeRTOSConfigFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new TaskFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new TaskFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new MakeFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new testTaskStructure(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+
+
+ System.out.println("Generation completed, Check path " + srcPath);
+ // TODO: Set hyperlink for path
+ try {
+ Desktop.getDesktop().open(new File(srcPath));
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+
+ System.exit(0);
+
+ }
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkRMSConfiguration.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkRMSConfiguration.java
new file mode 100644
index 0000000..85b3211
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/checks/checkRMSConfiguration.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.checks;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.cdgen.ArmCodeFileCreation;
+import org.eclipse.app4mc.cdgen.FreeRTOSConfigFileCreation;
+import org.eclipse.app4mc.cdgen.LabelFileCreation;
+import org.eclipse.app4mc.cdgen.MainRMSFileCreation;
+import org.eclipse.app4mc.cdgen.MakeFileCreation;
+import org.eclipse.app4mc.cdgen.RunFileCreation;
+import org.eclipse.app4mc.cdgen.SharedLabelsFileCreation;
+import org.eclipse.app4mc.cdgen.TaskFileCreation;
+import org.eclipse.app4mc.cdgen.test.testTaskStructure;
+import org.eclipse.app4mc.cdgen.utils.fileUtil;
+
+/**
+ * Implementation of GUI Design and Action on Button Click.
+ *
+ *
+ */
+
+public class checkRMSConfiguration {
+
+
+ public checkRMSConfiguration(final Amalthea model, final String srcPath, final String headerPath,
+ final int configFlag) {
+ RMSConfiguration(model, srcPath, headerPath, configFlag);
+ }
+
+ public void RMSConfiguration(final Amalthea model, final String srcPath, final String headerPath,
+ final int configFlag) {
+ /*
+ * try { String path = System.getProperty("user.dir"); File
+ * l_SourceDirectory = null; if(0x3110 == (configFlag & 0xFFF0)) {
+ * l_SourceDirectory = new File(path + "/ref/rms_coop/"); }else
+ * if(0x3120 == (configFlag & 0xFFF0)){ l_SourceDirectory = new
+ * File(path + "/ref/freertos_preem/"); } String[] filesName =
+ * l_SourceDirectory.list(); for(String pathi:filesName) { File
+ * SourceFile = new File(l_SourceDirectory.toString() +"/" + pathi);
+ * File DestinationFile = new File(Paths.get(srcPath).toString() + "/" +
+ * pathi ); com.google.common.io.Files.copy(SourceFile , DestinationFile
+ * ); } } catch (IOException e1) { e1.printStackTrace(); }
+ */
+ try {
+ // String path = System.getProperty("user.dir");
+ // create new file
+ final File l_SourceDirectory = new File(headerPath);
+ // array of files and directory
+ final String[] filesName = l_SourceDirectory.list();
+ // for each name in the path array
+ for (final String pathi : filesName) {
+ final File SourceFile = new File(l_SourceDirectory.toString() + "/" + pathi);
+ final File DestinationFile = new File(Paths.get(srcPath).toString() + "/" + pathi);
+ if (fileUtil.getFileExtension(SourceFile) == "c" || fileUtil.getFileExtension(SourceFile) == "h"
+ || fileUtil.getFileExtension(SourceFile) == "") {
+ com.google.common.io.Files.copy(SourceFile, DestinationFile);
+ }
+ }
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new MainRMSFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new RunFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new TaskFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new FreeRTOSConfigFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new MakeFileCreation(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new SharedLabelsFileCreation(model, srcPath);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new LabelFileCreation(model, srcPath);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new ArmCodeFileCreation(model, srcPath, headerPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ try {
+ new testTaskStructure(model, srcPath, configFlag);
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ System.out.println("Generation completed, Check path " + srcPath);
+ // TODO: Set hyperlink for path
+ try {
+ Desktop.getDesktop().open(new File(srcPath));
+ }
+ catch (final IOException e1) {
+ e1.printStackTrace();
+ }
+ System.exit(0);
+ }
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testLabel.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testLabel.java
new file mode 100644
index 0000000..49a84a8
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testLabel.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+
+/**
+ * Implementation of testing Task, Runnable structure and Label types.
+ *
+ */
+
+public class testLabel
+
+{
+
+ public testLabel(final Amalthea Model, final String path1, final int k, final List<Task> taskmod)
+ throws IOException {
+ fileTestLabel(Model, path1, k, taskmod);
+ }
+
+ private void fileTestLabel(final Amalthea model2, final String path1, final int k, final List<Task> tasks)
+ throws IOException {
+ final String fname = path1 + File.separator + "label" + k + ".c";
+ // EList<Label> label = model2.getSwModel().getLabels();
+ final List<Label> label = new ArrayList<Label>();
+ for (final Task ta : tasks) {
+ label.addAll(SoftwareUtil.getAccessedLabelSet(ta, null));
+ }
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ final String input = "\tuint", input1 = "\t=\t";
+ int count = 0, count1 = 0;
+ int Counter = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ if (word.contains(input)) {
+ count++;
+ }
+ if (word.equals(input1)) {
+ count1++;
+ }
+ }
+ }
+ for (final Task task : tasks) {
+ List<Runnable> runnablesOfTask = SoftwareUtil.getRunnableList(task, null);
+ final ArrayList<Label> labellist1 = new ArrayList<Label>();
+ runnablesOfTask = runnablesOfTask.stream().distinct().collect(Collectors.toList());
+ for (final Runnable run : runnablesOfTask) {
+ final Set<Label> labellist = SoftwareUtil.getAccessedLabelSet(run, null);
+ labellist1.addAll(labellist);
+ }
+ final List<Label> listWithoutDuplicates2 = labellist1.stream().distinct().collect(Collectors.toList());
+ Counter = Counter + listWithoutDuplicates2.size();
+ }
+ if (count != label.size() + Counter) {
+ System.out.println((label.size() + Counter) + "\tLabel : ERROR: Label2 count\t" + count);
+ }
+ else {
+ System.out.println("Label : Label2 count OK");
+ }
+ if (count1 != label.size()) {
+ System.out.println(label.size() + "\tLabel : ERROR: Label count\t" + count1);
+ }
+ else {
+ System.out.println("Label : Label1 count OK");
+ }
+ fr.close();
+ }
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testMain.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testMain.java
new file mode 100644
index 0000000..5b860a2
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testMain.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Task;
+
+/**
+ * Implementation of testing Task, Runnable structure and Label types.
+ *
+ */
+
+public class testMain
+
+{
+
+ public testMain(final Amalthea model, final String path1, final int configFlag, final int k,
+ final List<Task> taskmod) throws IOException {
+ if ((0x1000 == (configFlag & 0xF000))) {
+ fileTestmainTask(model, path1, k, taskmod);
+ }
+ else if (0x2000 == (configFlag & 0xF000)) {
+ fileTestmainTaskPthread(model, path1, k, taskmod);
+ }
+ }
+
+ private void fileTestmainTaskPthread(final Amalthea model2, final String path1, final int k,
+ final List<Task> taskmod) throws IOException {
+ final String fname = path1 + File.separator + "main" + k + ".c";
+ // EList<Task> taskmod = model2.getSwModel().getTasks();
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ final String input = "\t\tpthread_create";
+ int count = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ if (word.equals(input)) {
+ count++;
+ }
+ }
+ }
+ if (count != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tMain" + k + " : ERROR: Task create count\t" + count);
+ }
+ else {
+ System.out.println("Main" + k + " : Task create count OK");
+ }
+ fr.close();
+ }
+
+ private void fileTestmainTask(final Amalthea model2, final String path1, final int k, final List<Task> taskmod)
+ throws IOException {
+ final String fname = path1 + File.separator + "main" + k + ".c";
+ // EList<Task> taskmod = model2.getSwModel().getTasks();
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ final String input = "\txTaskCreate(";
+ final String input2 = "configMINIMAL_STACK_SIZE,";
+ int count = 0, count1 = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ if (word.equals(input)) {
+ count++;
+ }
+ else if (word.equals(input2)) {
+ count1++;
+ }
+ }
+ }
+ if (count != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tMain" + k + " : ERROR: Task create count\t" + count);
+ }
+ else {
+ System.out.println("Main" + k + " : Task create count OK");
+ }
+ if (count1 != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tMain" + k + " : ERROR: Task Priorities count\t" + count1);
+ }
+ else {
+ System.out.println("Main" + k + " : Task Priorities count OK");
+ }
+ fr.close();
+ }
+}
+
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testRunnable.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testRunnable.java
new file mode 100644
index 0000000..a30d9a2
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testRunnable.java
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+
+/**
+ * Implementation of testing Task, Runnable structure and Label types.
+ *
+ */
+
+
+public class testRunnable {
+ public testRunnable(final Amalthea Model, final String path1, final int configFlag, final int k,
+ final List<Task> tasks) throws IOException {
+ this.model = Model;
+ if (0x2000 != (configFlag & 0xF000)) {
+ fileTestRunnable(this.model, path1, k, tasks);
+ }
+ else {
+ fileTestRunnablePthread(this.model, path1, k, tasks);
+ }
+ }
+
+
+ private void fileTestRunnable(final Amalthea model2, final String path1, final int k, final List<Task> tasks)
+ throws IOException {
+ final String fname = path1 + File.separator + "runnable" + k + ".c";
+ final List<Runnable> runmod = new ArrayList<Runnable>();
+ for (final Task ta : tasks) {
+ runmod.addAll(SoftwareUtil.getRunnableList(ta, null));
+ }
+
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ final String input1 = "void";
+ int count1 = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ /*
+ * if (word.equals(input)) { count++; }
+ */
+ if (word.equals(input1)) {
+ count1++;
+ }
+ }
+ }
+ /*
+ * if (count != runmod.size()) { System.out.println(runmod.size() +
+ * "\tRunnable"+k+" : ERROR: Runnable size Not matching count\t" +
+ * count); } else {
+ * System.out.println("Runnable : Number of Runnables OK"); }
+ */
+ if (count1 == runmod.size()) {
+ System.out.println("Runnable" + k + " : Number of Runnables void OK");
+ }
+ else {
+
+ System.out.println(
+ runmod.size() + "\tRunnable" + k + " : ERROR: Runnable VOID Not matching count\t" + count1);
+ }
+ fr.close();
+ }
+
+ private void fileTestRunnablePthread(final Amalthea model2, final String path1, final int k, final List<Task> tasks)
+ throws IOException {
+ final String fname = path1 + File.separator + "runnable" + k + ".c";
+ final List<Runnable> runmod = new ArrayList<Runnable>();
+ for (final Task ta : tasks) {
+ runmod.addAll(SoftwareUtil.getRunnableList(ta, null));
+ }
+
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ boolean flagRun = false;
+ final String input = "\tRunnable", input1 = "void";
+ int count = 0, count1 = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ if (flagRun) {
+ // System.out.println("\nRunnable "+word);
+ flagRun = false;
+ }
+ if (word.equals(input)) {
+ count++;
+ }
+ if (word.equals(input1)) {
+ count1++;
+ flagRun = true;
+ }
+ }
+ }
+ if (count != runmod.size()) {
+ System.out
+ .println(runmod.size() + "\tRunnable" + k + " : ERROR: Runnable size Not matching count\t" + count);
+ }
+ else {
+ System.out.println("Runnable" + k + " : Number of Runnables OK");
+ }
+ if (count1 != runmod.size()) {
+ System.out.println(
+ runmod.size() + "\tRunnable" + k + " : ERROR: Runnable VOID Not matching count\t" + count1);
+ }
+ else {
+ System.out.println("Runnable" + k + " : Number of Runnables void OK");
+ }
+ fr.close();
+ }
+
+
+ final private Amalthea model;
+
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testTaskDef.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testTaskDef.java
new file mode 100644
index 0000000..f8710e2
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testTaskDef.java
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Task;
+
+/**
+ * Implementation of testing Task, Runnable structure and Label types.
+ *
+ */
+
+public class testTaskDef
+
+{
+
+
+ public testTaskDef(final Amalthea model, final String path1, final int configFlag, final int k,
+ final List<Task> tasks) throws IOException {
+
+ if (0x2000 != (configFlag & 0xF000)) {
+ fileTestTask(model, path1, configFlag, k, tasks);
+ }
+ else {
+ fileTestTaskPthread(model, path1, configFlag, k, tasks);
+ }
+ }
+
+ /**
+ *
+ * @param model2
+ * @param path1
+ * @param configFlag
+ * @throws IOException
+ */
+ private void fileTestTask(final Amalthea model2, final String path1, final int configFlag, final int k,
+ final List<Task> taskmod) throws IOException {
+ final String fname = path1 + File.separator + "taskDef" + k + ".c";
+ // EList<Task> taskmod = model2.getSwModel().getTasks();
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ // TODO
+ final String input = "Cout", input2 = "Cin", input3 = "\t\t\ttaskENTER_CRITICAL",
+ input4 = "\t\t\ttaskEXIT_CRITICAL";
+ final String input5 = "\tvoid";
+ int count = 0, count1 = 0, count2 = 0, count3 = 0, count4 = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ if (word.equals(input)) {
+ count++;
+ }
+ else if (word.equals(input2)) {
+ count1++;
+ }
+ else if (word.equals(input3)) {
+ count2++;
+ }
+ else if (word.equals(input4)) {
+ count3++;
+ }
+ else if (word.equals(input5)) {
+ count4++;
+ }
+ }
+ }
+ if (0x1000 == (configFlag & 0xF000)) {
+ if (count != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: Cout count\t" + count);
+ }
+ else {
+ System.out.println("Task" + k + " : Cout count OK");
+ }
+ if (count1 != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: Cin count\t" + count1);
+ }
+ else {
+ System.out.println("Task" + k + " : Cin count OK");
+ }
+ // if(0x0020 == (configFlag & 0x00F0)) {
+ if (count2 != taskmod.size() * 2) {
+ System.out.println(taskmod.size() * 2 + "\tTask" + k + " : ERROR: taskENTER_CRITICAL\t" + count2);
+ }
+ else {
+ System.out.println("Task" + k + " : taskENTER_CRITICAL OK");
+ }
+ /*
+ * else { if (count2 != taskmod.size()) {
+ * System.out.println(taskmod.size() * 2 +
+ * "\tTask"+k+" : ERROR: taskENTER_CRITICAL\t" + count2); } else {
+ * System.out.println("Task"+k+" : taskENTER_CRITICAL OK"); } }
+ */
+ // if(0x0020 == (configFlag & 0x00F0)) {
+ if (count3 != taskmod.size() * 2) {
+ System.out.println(taskmod.size() * 2 + "\tTask" + k + " : ERROR: taskEXIT_CRITICAL\t" + count2);
+ }
+ else {
+ System.out.println("Task" + k + " : taskEXIT_CRITICAL OK");
+ }
+ /*
+ * else { if (count3 != taskmod.size()) {
+ * System.out.println(taskmod.size()+
+ * "\tTask"+k+" : ERROR: taskEXIT_CRITICAL\t" + count2); } else {
+ * System.out.println("Task"+k+" : taskEXIT_CRITICAL OK"); }
+ */
+
+ if (count3 != count2) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: taskEXIT_CRITICAL\t" + count2);
+ }
+ else {
+ System.out.println("Task" + k + " : taskEXIT_CRITICAL and taskENTER_CRITICAL OK");
+ }
+ }
+ if (count4 != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: taskEXIT_CRITICAL\t" + count4);
+ }
+ else {
+ System.out.println("Task" + k + " : Task Count OK");
+ }
+
+ fr.close();
+ }
+
+ private void fileTestTaskPthread(final Amalthea model2, final String path1, final int configFlag, final int k,
+ final List<Task> taskmod) throws IOException {
+ final String fname = path1 + File.separator + "taskDef" + k + ".c";
+ // EList<Task> taskmod = model2.getSwModel().getTasks();
+ final File f1 = new File(fname);
+ String[] words = null;
+ @SuppressWarnings("resource")
+ final FileReader fr = new FileReader(f1);
+ @SuppressWarnings("resource")
+ final BufferedReader br = new BufferedReader(fr);
+ String s;
+ final String input1 = "Cout", input2 = "Cin", input3 = "\t\t\tsuspendMe", input4 = "\t\t\tresumeMe",
+ input5 = "void";
+ int count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0;
+ while ((s = br.readLine()) != null) {
+ words = s.split(" ");
+ for (final String word : words) {
+ if (word.equals(input1)) {
+ count1++;
+ }
+ else if (word.equals(input2)) {
+ count2++;
+ }
+ else if (word.equals(input3)) {
+ count3++;
+ }
+ else if (word.equals(input4)) {
+ count4++;
+ }
+ else if (word.equals(input5)) {
+ count5++;
+ }
+ }
+ }
+ if (0x3110 == (configFlag & 0xFFF0)) {
+ if (count1 != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: Cout count\t" + count1);
+ }
+ else {
+ System.out.println("Task" + k + " : Cout count OK");
+ }
+ if (count2 != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: Cin count\t" + count2);
+ }
+ else {
+ System.out.println("Task" + k + " : Cin count OK");
+ }
+
+ // if(0x0020 == (configFlag & 0x00F0)){
+ if (count3 != taskmod.size() * 2) {
+ System.out.println(taskmod.size() * 2 + "\tTask" + k + " : ERROR: suspendMe\t" + count3);
+ }
+ else {
+ System.out.println("Task" + k + " : suspendMe OK");
+ }
+ /*
+ * }else { if (count3 != taskmod.size()) {
+ * System.out.println(taskmod.size()+
+ * "\tTask"+k+" : ERROR: suspendMe\t" + count3); } else {
+ * System.out.println("Task"+k+" : suspendMe OK"); } }
+ */
+
+ // if(0x0020 == (configFlag & 0x00F0)) {
+ if (count4 != taskmod.size() * 2) {
+ System.out.println(taskmod.size() * 2 + "\tTask" + k + " : ERROR: resumeMe\t" + count4);
+ }
+ else {
+ System.out.println("Task" + k + " : resumeMe OK");
+ }
+ /*
+ * }else { if (count4 != taskmod.size()) {
+ * System.out.println(taskmod.size()+
+ * "\tTask"+k+" : ERROR: resumeMe\t" + count4); } else {
+ * System.out.println("Task"+k+" : resumeMe OK"); } }
+ */
+
+ if (count4 != count3) {
+ System.out.println(count4 + "\tTask" + k + " : ERROR: suspendMe \t" + count3);
+ }
+ else {
+ System.out.println("Task" + k + " : suspendMe and resumeMe OK");
+ }
+ if (count5 != taskmod.size()) {
+ System.out.println(taskmod.size() + "\tTask" + k + " : ERROR: taskEXIT_CRITICAL\t" + count5);
+ }
+ else {
+ System.out.println("Task" + k + " : Task Count OK");
+ }
+ }
+ fr.close();
+ }
+
+
+}
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testTaskStructure.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testTaskStructure.java
new file mode 100755
index 0000000..40199ab
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/test/testTaskStructure.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.SchedulerAllocation;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * Implementation of testing Task, Runnable structure and Label types.
+ *
+ */
+
+public class testTaskStructure
+
+{
+ final private Amalthea model;
+
+ public testTaskStructure(final Amalthea Model, final String path1, final int configFlag) throws IOException {
+ this.model = Model;
+ System.out.println("############################################################");
+ System.out.println("\t\t\tTest Begins");
+ System.out.println("############################################################");
+ final EList<SchedulerAllocation> CoreNo = this.model.getMappingModel().getSchedulerAllocation();
+ int k = 0;
+ for (final SchedulerAllocation c : CoreNo) {
+ final ProcessingUnit pu = c.getResponsibility().get(0);
+ final Set<Task> task = DeploymentUtil.getTasksMappedToCore(pu, this.model);
+ final List<Task> tasks = new ArrayList<Task>(task);
+ new testRunnable(this.model, path1, configFlag, k, tasks);
+ new testTaskDef(this.model, path1, configFlag, k, tasks);
+ new testMain(this.model, path1, configFlag, k, tasks);
+ // new testLabel(model, path1, k, tasks);
+ k++;
+ }
+ System.out.println("############################################################");
+ System.out.println("\t\t\tTest Ends");
+ System.out.println("############################################################");
+ }
+}
+
diff --git a/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/utils/fileUtil.java b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/utils/fileUtil.java
new file mode 100755
index 0000000..5b0598b
--- /dev/null
+++ b/eclipse-tools/cdgen/src/org/eclipse/app4mc/cdgen/utils/fileUtil.java
@@ -0,0 +1,290 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Dortmund University of Applied Sciences and Arts and others.
+ *
+ * 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:
+ * Dortmund University of Applied Sciences and Arts - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.app4mc.cdgen.utils;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.Stimulus;
+import org.eclipse.app4mc.amalthea.model.Task;
+import org.eclipse.app4mc.amalthea.model.Time;
+import org.eclipse.app4mc.amalthea.model.util.SoftwareUtil;
+import org.eclipse.app4mc.cdgen.LabelFileCreation;
+
+
+/**
+ * Implementation of Common API for CDGen.
+ *
+ */
+
+public class fileUtil {
+
+ @SuppressWarnings({ "null", "resource" })
+ public static void fileMainHeader(final File f) throws IOException {
+ FileWriter fr = null;
+ try {
+ fr = new FileWriter(f);
+ fr.write("/******************************************************************\n");
+ fr.write("******************************************************************\n");
+ fr.write("**************#####**####*****#####**######*###****##*************\n");
+ fr.write("*************##******#***##**##******##*****##*#***##*************\n");
+ fr.write("*************#*******#****#**#****##*######*##**#**##*************\n");
+ fr.write("*************##******#***##**##***##*##*****##***#*##*************\n");
+ fr.write("**************#####**####*****######*######*##****###*************\n");
+ fr.write("******************************************************************\n");
+ fr.write("******************************************************************\n");
+ fr.write("*Author : Ram Prasath Govindarajan\n");
+ fr.write("*Tool : CDGen_GSoC\n");
+ fr.write("*Version : V1.0.0\n");
+ }
+ catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ fr.close();
+ }
+
+ public static void FreeRTOSConfigFileHeader(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true);
+ fw.write("*Title : FreeRTOSConfig\n");
+ fw.write("*Description : Holds configuration for the FreeRTOS Software\n");
+ fw.write("******************************************************************\n");
+ fw.write("******************************************************************/\n\n\n");
+
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+
+ public static String getFileExtension(final File file) {
+ final String fileName = file.getName();
+ String fileExtension = null;
+ if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
+ fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
+ // return fileName.substring(fileName.lastIndexOf(".") + 1);
+ }
+ return fileExtension;
+ }
+
+ public static String datatype(final String string) {
+ String type = null;
+ switch (string) {
+ case "8 bit":
+ type = "uint8_t";
+ break;
+ case "16 bit":
+ type = "uint16_t";
+ break;
+ case "32 bit":
+ type = "uint32_t";
+ break;
+ case "64 bit":
+ type = "uint64_t";
+ break;
+ default:
+ type = "int";
+ break;
+ }
+ return type;
+ }
+
+
+ public static String datatypeSize(final String string) {
+ String type = null;
+ switch (string) {
+ case "8 bit":
+ type = "8";
+ break;
+ case "16 bit":
+ type = "16";
+ break;
+ case "32 bit":
+ type = "32";
+ break;
+ case "64 bit":
+ type = "64";
+ break;
+ default:
+ type = "00";
+ break;
+ }
+ return type;
+ }
+
+ /**
+ * Shared Label definition and initialization structure.
+ *
+ * @param tasks
+ *
+ * @param file
+ * @param labellist
+ * @return
+ */
+ public static List<Label> CoreSpecificLabel(final Amalthea model, final List<Task> tasks) {
+ List<Label> SharedLabelList = new ArrayList<Label>();
+ for (final Task ta : tasks) {
+ SharedLabelList.addAll(SoftwareUtil.getReadLabelSet(ta, null));
+ }
+ SharedLabelList = SharedLabelList.stream().distinct().collect(Collectors.toList());
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ System.out.println("Shared Label size 0");
+ }
+ else {
+ // System.out.println("Shared Label size "+SharedLabelList.size());
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Set<Task> taskList = TaskMap.keySet();
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (puListUnique.size() == 1 && taskList.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+ return SharedLabelListSortCore;
+ }
+
+ /**
+ * Shared Label definition and initialization structure.
+ *
+ * @param tasks
+ *
+ * @param file
+ * @param labellist
+ * @return
+ */
+ // public static List<Label> SharedLabelDeclarationHead(Amalthea model,
+ // List<Task> tasks) {
+ public static List<Label> SharedLabelDeclarationHead(final Amalthea model, final List<Task> tasks) {
+ final List<Label> SharedLabelList = LabelFileCreation.SharedLabelFinder(model);
+ final List<Label> SharedLabelListSortCore = new ArrayList<Label>();
+ final List<Label> SharedLabel = new ArrayList<Label>();
+ if (SharedLabelList.size() == 0) {
+ // System.out.println("Shared Label size 0");
+ }
+ else {
+ // System.out.println("Shared Label size "+SharedLabelList.size());
+ final HashMap<Label, HashMap<Task, ProcessingUnit>> sharedLabelTaskMap = LabelFileCreation
+ .LabelTaskMap(model, SharedLabelList);
+ for (final Label share : SharedLabelList) {
+ final HashMap<Task, ProcessingUnit> TaskMap = sharedLabelTaskMap.get(share);
+ final Collection<ProcessingUnit> puList = TaskMap.values();
+ final List<ProcessingUnit> puListUnique = puList.stream().distinct().collect(Collectors.toList());
+ if (puListUnique.size() > 1) {
+ SharedLabelListSortCore.add(share);
+ }
+ }
+ }
+
+ final HashMap<Label, String> SharedLabelTypeMap = new HashMap<Label, String>();
+ for (final Label share : SharedLabelListSortCore) {
+ SharedLabelTypeMap.put(share, share.getSize().toString());
+ }
+ final List<String> SharedTypeMapList = new ArrayList<>(
+ SharedLabelTypeMap.values().stream().distinct().collect(Collectors.toList()));
+ final List<Label> SharedLabelMapList = new ArrayList<Label>(SharedLabelTypeMap.keySet());
+ for (int k = 0; k < SharedTypeMapList.size(); k++) {
+ final String sh = SharedTypeMapList.get(k);
+ for (final Label s : SharedLabelMapList) {
+ final String ShTy = SharedLabelTypeMap.get(s);
+ if (sh.equals(ShTy)) {
+ SharedLabel.add(s);
+ }
+ }
+ }
+ return SharedLabel;
+ }
+
+
+ public static long intialisation(final String string) {
+ long init = 0;
+ switch (string) {
+ case "8 bit":
+ init = 255;
+ break;
+ case "16 bit":
+ init = 65535;
+ break;
+ // case "32 bit": init =4294967295; break;
+ // case "64 bit": init =18446744073709551615; break;
+ default:
+ init = 0000;
+ break;
+ }
+ return init;
+ }
+
+ public static void defineMain(final File f1) {
+ try {
+ final File fn = f1;
+ @SuppressWarnings("resource")
+ final FileWriter fw = new FileWriter(fn, true); // the true will
+ // append the new
+ // data
+ fw.write("#define DELAY_MULT 100");
+ fw.write("\n");
+ fw.close();
+ }
+ catch (final IOException ioe) {
+ System.err.println("IOException: " + ioe.getMessage());
+ }
+
+ }
+
+ public static Time getRecurrence(final Task t) {
+ final List<Stimulus> lStimuli = t.getStimuli();
+ for (final Stimulus s : lStimuli) {
+ if (s instanceof PeriodicStimulus) {
+ return ((PeriodicStimulus) s).getRecurrence();
+ }
+ System.out.println("ERR: Unsupported Stimulus in Task " + t + " -> " + s);
+ }
+ return null;
+ }
+
+ // This code is form stackoverflow https://stackoverflow.com/a/2581754
+ public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(final Map<K, V> map) {
+ final List<Entry<K, V>> list = new ArrayList<>(map.entrySet());
+ list.sort(Entry.comparingByValue());
+
+ final Map<K, V> result = new LinkedHashMap<>();
+ for (final Entry<K, V> entry : list) {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ return result;
+ }
+}
diff --git a/eclipse-tools/emf-graphical-viewer/.gitignore b/eclipse-tools/emf-graphical-viewer/.gitignore
new file mode 100644
index 0000000..f1c734e
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/.gitignore
@@ -0,0 +1,5 @@
+.metadata/
+
+# Eclipse target directories
+bin/
+target/
diff --git a/eclipse-tools/emf-graphical-viewer/.mvn/extensions.xml b/eclipse-tools/emf-graphical-viewer/.mvn/extensions.xml
new file mode 100644
index 0000000..710a9ec
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/.mvn/extensions.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<extensions>
+ <extension>
+ <groupId>org.eclipse.tycho.extras</groupId>
+ <artifactId>tycho-pomless</artifactId>
+ <version>1.6.0</version>
+ </extension>
+</extensions>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/.project b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/.project
deleted file mode 100644
index c93b42d..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/.project
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.app4mc.emfutils.extractor.build</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- </buildSpec>
- <natures>
- </natures>
-</projectDescription>
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/META-INF/MANIFEST.MF b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/META-INF/MANIFEST.MF
deleted file mode 100644
index a77fb88..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: EMF Content Extractor Build
-Bundle-SymbolicName: org.eclipse.app4mc.emfutils.extractor.build;singleton:=true
-Bundle-Version: 1.2.0
-Bundle-Activator: org.eclipse.app4mc.emfutils.content.extractor.Activator
-Require-Bundle: org.eclipse.ui
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7,
- JavaSE-1.8
-Bundle-ActivationPolicy: lazy
-Bundle-ClassPath: .,
- lib/plantuml.8041.jar
-Bundle-Vendor: Eclipse APP4MC
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/about.html b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/about.html
deleted file mode 100644
index 164f781..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
- <h2>About This Content</h2>
-
- <p>November 30, 2017</p>
- <h3>License</h3>
-
- <p>
- The Eclipse Foundation makes available all content in this plug-in
- ("Content"). Unless otherwise indicated below, the Content
- is provided to you under the terms and conditions of the Eclipse
- Public License Version 2.0 ("EPL"). A copy of the EPL is
- available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
- For purposes of the EPL, "Program" will mean the Content.
- </p>
-
- <p>
- If you did not receive this Content directly from the Eclipse
- Foundation, the Content is being redistributed by another party
- ("Redistributor") and different terms and conditions may
- apply to your use of any object code in the Content. Check the
- Redistributor's license that was provided with the Content. If no such
- license exists, contact the Redistributor. Unless otherwise indicated
- below, the terms and conditions of the EPL still apply to any source
- code in the Content and such source code may be obtained at <a
- href="http://www.eclipse.org/">http://www.eclipse.org</a>.
- </p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/epl-2.0.html b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/epl-2.0.html
deleted file mode 100644
index 637a181..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/epl-2.0.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Eclipse Public License - Version 2.0</title>
- <style type="text/css">
- body {
- margin: 1.5em 3em;
- }
- h1{
- font-size:1.5em;
- }
- h2{
- font-size:1em;
- margin-bottom:0.5em;
- margin-top:1em;
- }
- p {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
- }
- ul, ol{
- list-style-type:none;
- }
- </style>
- </head>
- <body>
- <h1>Eclipse Public License - v 2.0</h1>
- <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
- PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
- OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
- </p>
- <h2 id="definitions">1. DEFINITIONS</h2>
- <p>“Contribution” means:</p>
- <ul>
- <li>a) in the case of the initial Contributor, the initial content
- Distributed under this Agreement, and
- </li>
- <li>
- b) in the case of each subsequent Contributor:
- <ul>
- <li>i) changes to the Program, and</li>
- <li>ii) additions to the Program;</li>
- </ul>
- where such changes and/or additions to the Program originate from
- and are Distributed by that particular Contributor. A Contribution
- “originates” from a Contributor if it was added to the Program by such
- Contributor itself or anyone acting on such Contributor's behalf.
- Contributions do not include changes or additions to the Program that
- are not Modified Works.
- </li>
- </ul>
- <p>“Contributor” means any person or entity that Distributes the Program.</p>
- <p>“Licensed Patents” mean patent claims licensable by a Contributor which
- are necessarily infringed by the use or sale of its Contribution alone
- or when combined with the Program.
- </p>
- <p>“Program” means the Contributions Distributed in accordance with this
- Agreement.
- </p>
- <p>“Recipient” means anyone who receives the Program under this Agreement
- or any Secondary License (as applicable), including Contributors.
- </p>
- <p>“Derivative Works” shall mean any work, whether in Source Code or other
- form, that is based on (or derived from) the Program and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship.
- </p>
- <p>“Modified Works” shall mean any work in Source Code or other form that
- results from an addition to, deletion from, or modification of the
- contents of the Program, including, for purposes of clarity any new file
- in Source Code form that contains any contents of the Program. Modified
- Works shall not include works that contain only declarations, interfaces,
- types, classes, structures, or files of the Program solely in each case
- in order to link to, bind by name, or subclass the Program or Modified
- Works thereof.
- </p>
- <p>“Distribute” means the acts of a) distributing or b) making available
- in any manner that enables the transfer of a copy.
- </p>
- <p>“Source Code” means the form of a Program preferred for making
- modifications, including but not limited to software source code,
- documentation source, and configuration files.
- </p>
- <p>“Secondary License” means either the GNU General Public License,
- Version 2.0, or any later versions of that license, including any
- exceptions or additional permissions as identified by the initial
- Contributor.
- </p>
- <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
- <ul>
- <li>a) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free copyright
- license to reproduce, prepare Derivative Works of, publicly display,
- publicly perform, Distribute and sublicense the Contribution of such
- Contributor, if any, and such Derivative Works.
- </li>
- <li>b) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free patent
- license under Licensed Patents to make, use, sell, offer to sell,
- import and otherwise transfer the Contribution of such Contributor,
- if any, in Source Code or other form. This patent license shall
- apply to the combination of the Contribution and the Program if,
- at the time the Contribution is added by the Contributor, such
- addition of the Contribution causes such combination to be covered
- by the Licensed Patents. The patent license shall not apply to any
- other combinations which include the Contribution. No hardware per
- se is licensed hereunder.
- </li>
- <li>c) Recipient understands that although each Contributor grants the
- licenses to its Contributions set forth herein, no assurances are
- provided by any Contributor that the Program does not infringe the
- patent or other intellectual property rights of any other entity.
- Each Contributor disclaims any liability to Recipient for claims
- brought by any other entity based on infringement of intellectual
- property rights or otherwise. As a condition to exercising the rights
- and licenses granted hereunder, each Recipient hereby assumes sole
- responsibility to secure any other intellectual property rights needed,
- if any. For example, if a third party patent license is required to
- allow Recipient to Distribute the Program, it is Recipient's
- responsibility to acquire that license before distributing the Program.
- </li>
- <li>d) Each Contributor represents that to its knowledge it has sufficient
- copyright rights in its Contribution, if any, to grant the copyright
- license set forth in this Agreement.
- </li>
- <li>e) Notwithstanding the terms of any Secondary License, no Contributor
- makes additional grants to any Recipient (other than those set forth
- in this Agreement) as a result of such Recipient's receipt of the
- Program under the terms of a Secondary License (if permitted under
- the terms of Section 3).
- </li>
- </ul>
- <h2 id="requirements">3. REQUIREMENTS</h2>
- <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
- <ul>
- <li>a) the Program must also be made available as Source Code, in
- accordance with section 3.2, and the Contributor must accompany
- the Program with a statement that the Source Code for the Program
- is available under this Agreement, and informs Recipients how to
- obtain it in a reasonable manner on or through a medium customarily
- used for software exchange; and
- </li>
- <li>
- b) the Contributor may Distribute the Program under a license
- different than this Agreement, provided that such license:
- <ul>
- <li>i) effectively disclaims on behalf of all other Contributors all
- warranties and conditions, express and implied, including warranties
- or conditions of title and non-infringement, and implied warranties
- or conditions of merchantability and fitness for a particular purpose;
- </li>
- <li>ii) effectively excludes on behalf of all other Contributors all
- liability for damages, including direct, indirect, special, incidental
- and consequential damages, such as lost profits;
- </li>
- <li>iii) does not attempt to limit or alter the recipients' rights in the
- Source Code under section 3.2; and
- </li>
- <li>iv) requires any subsequent distribution of the Program by any party
- to be under a license that satisfies the requirements of this section 3.
- </li>
- </ul>
- </li>
- </ul>
- <p>3.2 When the Program is Distributed as Source Code:</p>
- <ul>
- <li>a) it must be made available under this Agreement, or if the Program (i)
- is combined with other material in a separate file or files made available
- under a Secondary License, and (ii) the initial Contributor attached to
- the Source Code the notice described in Exhibit A of this Agreement,
- then the Program may be made available under the terms of such
- Secondary Licenses, and
- </li>
- <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
- </ul>
- <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
- attribution notices, disclaimers of warranty, or limitations of liability
- (‘notices’) contained within the Program from any copy of the Program which
- they Distribute, provided that Contributors may add their own appropriate
- notices.
- </p>
- <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
- <p>Commercial distributors of software may accept certain responsibilities
- with respect to end users, business partners and the like. While this
- license is intended to facilitate the commercial use of the Program, the
- Contributor who includes the Program in a commercial product offering should
- do so in a manner which does not create potential liability for other
- Contributors. Therefore, if a Contributor includes the Program in a
- commercial product offering, such Contributor (“Commercial Contributor”)
- hereby agrees to defend and indemnify every other Contributor
- (“Indemnified Contributor”) against any losses, damages and costs
- (collectively “Losses”) arising from claims, lawsuits and other legal actions
- brought by a third party against the Indemnified Contributor to the extent
- caused by the acts or omissions of such Commercial Contributor in connection
- with its distribution of the Program in a commercial product offering.
- The obligations in this section do not apply to any claims or Losses relating
- to any actual or alleged intellectual property infringement. In order to
- qualify, an Indemnified Contributor must: a) promptly notify the
- Commercial Contributor in writing of such claim, and b) allow the Commercial
- Contributor to control, and cooperate with the Commercial Contributor in,
- the defense and any related settlement negotiations. The Indemnified
- Contributor may participate in any such claim at its own expense.
- </p>
- <p>For example, a Contributor might include the Program
- in a commercial product offering, Product X. That Contributor is then a
- Commercial Contributor. If that Commercial Contributor then makes performance
- claims, or offers warranties related to Product X, those performance claims
- and warranties are such Commercial Contributor's responsibility alone.
- Under this section, the Commercial Contributor would have to defend claims
- against the other Contributors related to those performance claims and
- warranties, and if a court requires any other Contributor to pay any damages
- as a result, the Commercial Contributor must pay those damages.
- </p>
- <h2 id="warranty">5. NO WARRANTY</h2>
- <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
- BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
- WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
- WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
- solely responsible for determining the appropriateness of using and
- distributing the Program and assumes all risks associated with its
- exercise of rights under this Agreement, including but not limited to the
- risks and costs of program errors, compliance with applicable laws, damage
- to or loss of data, programs or equipment, and unavailability or
- interruption of operations.
- </p>
- <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
- <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
- BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
- LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
- GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- </p>
- <h2 id="general">7. GENERAL</h2>
- <p>If any provision of this Agreement is invalid or unenforceable under
- applicable law, it shall not affect the validity or enforceability of the
- remainder of the terms of this Agreement, and without further action by the
- parties hereto, such provision shall be reformed to the minimum extent
- necessary to make such provision valid and enforceable.
- </p>
- <p>If Recipient institutes patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Program itself
- (excluding combinations of the Program with other software or hardware)
- infringes such Recipient's patent(s), then such Recipient's rights granted
- under Section 2(b) shall terminate as of the date such litigation is filed.
- </p>
- <p>All Recipient's rights under this Agreement shall terminate if it fails to
- comply with any of the material terms or conditions of this Agreement and
- does not cure such failure in a reasonable period of time after becoming
- aware of such noncompliance. If all Recipient's rights under this Agreement
- terminate, Recipient agrees to cease use and distribution of the Program
- as soon as reasonably practicable. However, Recipient's obligations under
- this Agreement and any licenses granted by Recipient relating to the
- Program shall continue and survive.
- </p>
- <p>Everyone is permitted to copy and distribute copies of this Agreement,
- but in order to avoid inconsistency the Agreement is copyrighted and may
- only be modified in the following manner. The Agreement Steward reserves
- the right to publish new versions (including revisions) of this Agreement
- from time to time. No one other than the Agreement Steward has the right
- to modify this Agreement. The Eclipse Foundation is the initial Agreement
- Steward. The Eclipse Foundation may assign the responsibility to serve as
- the Agreement Steward to a suitable separate entity. Each new version of
- the Agreement will be given a distinguishing version number. The Program
- (including Contributions) may always be Distributed subject to the version
- of the Agreement under which it was received. In addition, after a new
- version of the Agreement is published, Contributor may elect to Distribute
- the Program (including its Contributions) under the new version.
- </p>
- <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
- receives no rights or licenses to the intellectual property of any
- Contributor under this Agreement, whether expressly, by implication,
- estoppel or otherwise. All rights in the Program not expressly granted
- under this Agreement are reserved. Nothing in this Agreement is intended
- to be enforceable by any entity that is not a Contributor or Recipient.
- No third-party beneficiary rights are created under this Agreement.
- </p>
- <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
- <p>“This Source Code may also be made available under the following
- Secondary Licenses when the conditions for such availability set forth
- in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
- version(s), and exceptions or additional permissions here}.”
- </p>
- <blockquote>
- <p>Simply including a copy of this Agreement, including this Exhibit A
- is not sufficient to license the Source Code under Secondary Licenses.
- </p>
- <p>If it is not possible or desirable to put the notice in a particular file,
- then You may include the notice in a location (such as a LICENSE file in a
- relevant directory) where a recipient would be likely to look for
- such a notice.
- </p>
- <p>You may add additional accurate notices of copyright ownership.</p>
- </blockquote>
- </body>
-</html>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/pom.xml b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/pom.xml
deleted file mode 100644
index 9fed643..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.extractor.build/pom.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.eclipse.app4mc.emfutils.content.extractor</groupId>
- <artifactId>org.eclipse.app4mc.emfutils.extractor.build</artifactId>
- <version>0.8.3</version>
- <packaging>pom</packaging>
- <name>Ecore Reference Extractor</name>
-
- <properties>
- <tycho.version>0.22.0</tycho.version>
- <jacoco.version>0.7.4.201502262128</jacoco.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <luna-repo.url>http://download.eclipse.org/releases/luna</luna-repo.url>
- <amalthea-repo.url>http://download.eclipse.org/app4mc/updatesites/releases/0.8.3/</amalthea-repo.url>
-
- <franca-repo.url>http://franca.github.io/franca/update_site/releases/0.9.1/</franca-repo.url>
- <orbit-repo.url>http://download.eclipse.org/tools/orbit/downloads/drops/R20150124073747/repository/</orbit-repo.url>
- <ease-repo-url>http://download.eclipse.org/ease/update/release</ease-repo-url>
- <sphinx-repo-url>http://download.eclipse.org/sphinx/updates/interim</sphinx-repo-url>
- </properties>
- <repositories>
-<repository>
- <id>amalthea</id>
- <url>${amalthea-repo.url}</url>
- <layout>p2</layout>
- </repository>
- <repository>
- <id>franca</id>
- <url>${franca-repo.url}</url>
- <layout>p2</layout>
- </repository>
- <repository>
- <id>luna</id>
- <url>${luna-repo.url}</url>
- <layout>p2</layout>
- </repository>
- <repository>
- <id>orbit</id>
- <url>${orbit-repo.url}</url>
- <layout>p2</layout>
- </repository>
- <repository>
- <id>ease</id>
- <url>${ease-repo-url}</url>
- <layout>p2</layout>
- </repository>
- <repository>
- <id>sphinx</id>
- <url>${sphinx-repo-url}</url>
- <layout>p2</layout>
- </repository>
- </repositories>
-
-
- <modules>
- <!-- Plugins -->
- <module>../../plugins/org.eclipse.app4mc.emfutils.content.extractor</module>
- <module>../../plugins/org.eclipse.app4mc.emfutils.metamodelviewer</module>
- <module>../../plugins/org.eclipse.app4mc.emfutils.resourceset.mapper</module>
-
- <module>../../plugins/net.sourceforge.plantuml</module>
-
- <!-- Tests -->
-
- <!-- Features -->
- <module>../../features/org.eclipse.app4mc.emfutils.content.extractor.feature</module>
- <module>../../features/org.eclipse.app4mc.emfutils.metamodelviewer.feature</module>
-
- <!-- P2Repo -->
- <module>../org.eclipse.app4mc.emfutils.p2repo</module>
-
- </modules>
-
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.eclipse.tycho</groupId>
- <artifactId>tycho-maven-plugin</artifactId>
- <version>${tycho.version}</version>
- <extensions>true</extensions>
- <configuration>
-
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.eclipse.tycho</groupId>
- <artifactId>tycho-compiler-plugin</artifactId>
- <version>${tycho.version}</version>
- <configuration>
- <verbose>true</verbose>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.eclipse.tycho</groupId>
- <artifactId>target-platform-configuration</artifactId>
- <version>${tycho.version}</version>
- <configuration>
- <dependency-resolution>
- <extraRequirements>
- <requirement>
- <type>eclipse-plugin</type>
- <id>org.hamcrest</id>
- <versionRange>0.0.0</versionRange>
- </requirement>
- </extraRequirements>
- </dependency-resolution>
- <environments>
- <environment>
- <os>linux</os>
- <ws>gtk</ws>
- <arch>x86</arch>
- </environment>
- <environment>
- <os>linux</os>
- <ws>gtk</ws>
- <arch>x86_64</arch>
- </environment>
- <environment>
- <os>win32</os>
- <ws>win32</ws>
- <arch>x86</arch>
- </environment>
- <environment>
- <os>win32</os>
- <ws>win32</ws>
- <arch>x86_64</arch>
- </environment>
- <environment>
- <os>macosx</os>
- <ws>cocoa</ws>
- <arch>x86_64</arch>
- </environment>
- </environments>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.eclipse.tycho</groupId>
- <artifactId>tycho-surefire-plugin</artifactId>
- <version>${tycho.version}</version>
- <configuration>
- <!-- argLine>${tycho.testArgLine}</argLine> -->
- <forkMode>never</forkMode>
- <includes>
- <include>**/*Test.*</include>
- </includes>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.jacoco</groupId>
- <artifactId>jacoco-maven-plugin</artifactId>
- <version>0.7.4.201502262128</version>
- <configuration>
- <excludes>
-
- </excludes>
- </configuration>
- <executions>
- <!-- Prepares the property pointing to the JaCoCo runtime agent which
- is passed as VM argument when Maven the Surefire plugin is executed. -->
- <execution>
- <id>pre-unit-test</id>
- <goals>
- <goal>prepare-agent</goal>
- </goals>
- <configuration>
- <!-- Sets the path to the file which contains the execution data. -->
- <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
- </configuration>
- </execution>
- <!-- Ensures that the code coverage report for unit tests is created
- after unit tests have been run. -->
- <execution>
- <id>post-unit-test</id>
- <phase>verify</phase>
- <goals>
- <goal>report</goal>
- </goals>
- <configuration>
- <!-- Sets the path to the file which contains the execution data. -->
- <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
- <!-- Sets the output directory for the code coverage report. -->
- <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/category.xml b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/category.xml
deleted file mode 100644
index 661b7f4..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/category.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<site>
- <feature url="features/org.eclipse.app4mc.emfutils.metamodelviewer.feature_0.8.3.jar" id="org.eclipse.app4mc.emfutils.metamodelviewer.feature" version="0.8.3">
- <category name="Ecore Tools"/>
- </feature>
- <feature url="features/org.eclipse.app4mc.emfutils.content.extractor.feature_0.8.3.jar" id="org.eclipse.app4mc.emfutils.content.extractor.feature" version="0.8.3">
- <category name="Ecore Tools"/>
- </feature>
- <category-def name="Ecore Tools" label="org.eclipse.app4mc.emfutils.content.extractor"/>
-</site>
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/pom.xml b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/pom.xml
deleted file mode 100644
index 973db9b..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/pom.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <relativePath>../org.eclipse.app4mc.emfutils.extractor.build</relativePath>
- <groupId>org.eclipse.app4mc.emfutils.content.extractor</groupId>
- <artifactId>org.eclipse.app4mc.emfutils.extractor.build</artifactId>
- <version>0.8.3</version>
- </parent>
-
- <artifactId>org.eclipse.app4mc.emfutils.p2repo</artifactId>
- <packaging>eclipse-repository</packaging>
-
- <properties>
- <org.jboss.tools.tycho-plugins.version>0.22.0</org.jboss.tools.tycho-plugins.version>
- </properties>
-
- <pluginRepositories>
- <pluginRepository>
- <id>jboss-public-repository-group</id>
- <name>JBoss Public Repository Group</name>
- <url>http://repository.jboss.org/nexus/content/groups/public/</url>
- </pluginRepository>
-
- <pluginRepository>
- <id>jboss-snapshots-repository</id>
- <name>JBoss Snapshots Repository</name>
- <url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
- </pluginRepository>
- </pluginRepositories>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.eclipse.tycho</groupId>
- <artifactId>tycho-p2-repository-plugin</artifactId>
- <version>${tycho.version}</version>
-
- <configuration>
- <compress/>
- </configuration>
- </plugin>
-
-
- <plugin>
- <groupId>org.jboss.tools.tycho-plugins</groupId>
- <artifactId>repository-utils</artifactId>
- <version>${org.jboss.tools.tycho-plugins.version}</version>
-
- <executions>
- <execution>
- <id>generate-facade</id>
- <phase>package</phase>
-
- <goals>
- <goal>generate-repository-facade</goal>
- </goals>
-
- <configuration>
- <siteTemplateFolder>siteTemplate</siteTemplateFolder>
-
- <!-- Symbols are used while expanding index.html template -->
- <symbols>
- <update.site.name>${project.parent.name}</update.site.name>
- <target.eclipse.version>4.3.2</target.eclipse.version>
- </symbols>
-
- <associateSites>
- <!-- site>http://hudson.eclipse.org/hudson/job/damos-master/lastSuccessfulBuild/artifact/update-site</site>
- <site>http://download.eclipse.org/modeling/emf/emf/updates/releases</site>
- <site>http://download.eclipse.org/modeling/emf/compare/updates/releases</site>
- <site>http://download.eclipse.org/rmf/updates</site>
- <site>http://download.eclipse.org/sphinx/updates/interim</site>
- <site>http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases</site>
- <site>http://franca.github.io/franca/update_site/releases</site>
- <site>http://updates.yakindu.org/sct/kepler/releases</site>
-
- <site>http://download.eclipse.org/sphinx/updates/interim</site-->
- </associateSites>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/site.xml b/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/site.xml
deleted file mode 100644
index 806f343..0000000
--- a/eclipse-tools/emf-graphical-viewer/build/org.eclipse.app4mc.emfutils.p2repo/site.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<site>
- <feature url="features/org.eclipse.app4mc.emfutils.content.extractor.feature_0.8.3.201704071342.jar" id="org.eclipse.app4mc.emfutils.content.extractor.feature" version="0.8.3.201704071342">
- <category name="Ecore Tools"/>
- </feature>
- <feature url="features/org.eclipse.app4mc.emfutils.metamodelviewer.feature_0.8.3.201704071342.jar" id="org.eclipse.app4mc.emfutils.metamodelviewer.feature" version="0.8.3.201704071342">
- <category name="Ecore Tools"/>
- </feature>
- <category-def name="Ecore Tools" label="Ecore Tools"/>
-</site>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.gitignore b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/.gitignore
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.gitignore
rename to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/.gitignore
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.project b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/.project
similarity index 83%
rename from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.project
rename to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/.project
index 2b681c4..30a42d9 100644
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.project
+++ b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>org.eclipse.app4mc.emfutils.metamodelviewer.feature</name>
+ <name>org.eclipse.app4mc.emf.metamodelviewers</name>
<comment></comment>
<projects>
</projects>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/about.html b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/about.html
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/about.html
rename to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/about.html
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/build.properties b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/build.properties
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/build.properties
rename to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/build.properties
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/epl-2.0.html b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/epl-2.0.html
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/epl-2.0.html
rename to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/epl-2.0.html
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/feature.xml b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/feature.xml
new file mode 100644
index 0000000..d4d985d
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.metamodelviewers/feature.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.app4mc.emf.metamodelviewers"
+ label="APP4MC EMF MetaModel Viewers"
+ version="0.9.8.qualifier"
+ provider-name="Eclipse APP4MC"
+ license-feature="org.eclipse.license"
+ license-feature-version="2.0.2.qualifier">
+
+ <description url="https://projects.eclipse.org/projects/technology.app4mc">
+ APP4MC EMF MetaModel Viewers
+ </description>
+
+ <copyright url="https://projects.eclipse.org/projects/technology.app4mc">
+ (c) Copyright Robert Bosch GmbH. 2017-2020.
+All rights reserved.
+ </copyright>
+
+ <requires>
+ <import plugin="org.eclipse.core.runtime"/>
+ <import plugin="org.eclipse.sphinx.emf"/>
+ <import plugin="org.eclipse.ui"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.app4mc.emf.metamodelviewer"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/.gitignore b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/.gitignore
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/.gitignore
rename to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/.gitignore
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.project b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/.project
similarity index 83%
copy from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.project
copy to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/.project
index 2b681c4..921ceb6 100644
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/.project
+++ b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>org.eclipse.app4mc.emfutils.metamodelviewer.feature</name>
+ <name>org.eclipse.app4mc.emf.viewers.graphical</name>
<comment></comment>
<projects>
</projects>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/about.html b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/about.html
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/about.html
copy to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/about.html
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/build.properties b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/build.properties
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/build.properties
copy to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/build.properties
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/epl-2.0.html b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/epl-2.0.html
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/epl-2.0.html
copy to eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/epl-2.0.html
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/feature.xml b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/feature.xml
new file mode 100644
index 0000000..f9d3655
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emf.viewers.graphical/feature.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.app4mc.emf.viewers.graphical"
+ label="APP4MC EMF Graphical Viewers"
+ version="0.9.8.qualifier"
+ provider-name="Eclipse APP4MC"
+ license-feature="org.eclipse.license"
+ license-feature-version="2.0.2.qualifier">
+
+ <description url="https://projects.eclipse.org/projects/technology.app4mc">
+ APP4MC EMF Graphical Viewers
+ </description>
+
+ <copyright url="https://projects.eclipse.org/projects/technology.app4mc">
+ (c) Copyright Robert Bosch GmbH. 2017-2020.
+All rights reserved.
+ </copyright>
+
+ <includes
+ id="org.eclipse.app4mc.emf.metamodelviewers"
+ version="0.0.0"/>
+
+ <requires>
+ <import plugin="org.eclipse.core.runtime"/>
+ <import plugin="org.eclipse.emf.ecore"/>
+ <import plugin="org.eclipse.emf.ecore.xmi"/>
+ <import plugin="org.eclipse.sphinx.emf"/>
+ <import plugin="org.eclipse.sphinx.emf.editors"/>
+ <import plugin="org.eclipse.sphinx.emf.editors.forms"/>
+ <import plugin="org.eclipse.ui"/>
+ <import plugin="org.eclipse.ui.browser"/>
+ <import feature="net.sourceforge.plantuml.ecore.feature" version="1.1.24"/>
+ <import feature="net.sourceforge.plantuml.feature" version="1.1.24"/>
+ <import feature="net.sourceforge.plantuml.lib.feature" version="1.2019.11"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.app4mc.emf.viewer.plantuml"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/.project b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/.project
deleted file mode 100644
index b090637..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.app4mc.emfutils.content.extractor.feature</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.FeatureBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.FeatureNature</nature>
- </natures>
-</projectDescription>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/feature.xml b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/feature.xml
deleted file mode 100644
index 92e1e33..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/feature.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature id="org.eclipse.app4mc.emfutils.content.extractor.feature" label="AMALTHEA Graphical Tools" provider-name="Eclipse APP4MC" version="0.8.3">
- <copyright url="http://www.example.com/copyright">
- [Enter Copyright Description here.]
- </copyright>
- <description url="http://www.example.com/description">
- [Enter Feature Description here.]
- </description>
- <includes id="org.eclipse.app4mc.emfutils.metamodelviewer.feature" version="0.0.0"/>
- <license url="http://www.example.com/license">
- [Enter License Description here.]
- </license>
- <plugin download-size="0" id="net.sourceforge.plantuml" install-size="0" version="0.0.0"/>
- <plugin download-size="0" id="org.eclipse.app4mc.emfutils.content.extractor" install-size="0" unpack="false" version="0.0.0"/>
- <requires>
- <import plugin="org.eclipse.core.runtime"/>
- <import plugin="org.eclipse.emf.ecore"/>
- <import plugin="org.eclipse.emf.ecore.xmi"/>
- <import plugin="org.eclipse.sphinx.emf"/>
- <import plugin="org.eclipse.sphinx.emf.editors"/>
- <import plugin="org.eclipse.sphinx.emf.editors.forms"/>
- <import plugin="org.eclipse.ui"/>
- <import plugin="org.eclipse.ui.browser"/>
- </requires>
-</feature>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/pom.xml b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/pom.xml
deleted file mode 100644
index 19ab779..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.content.extractor.feature/pom.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <relativePath>../../build/org.eclipse.app4mc.emfutils.extractor.build</relativePath>
- <groupId>org.eclipse.app4mc.emfutils.content.extractor</groupId>
- <artifactId>org.eclipse.app4mc.emfutils.extractor.build</artifactId>
- <version>0.8.3</version>
- </parent>
-
- <artifactId>org.eclipse.app4mc.emfutils.content.extractor.feature</artifactId>
- <packaging>eclipse-feature</packaging>
-
-</project>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/about.html b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/about.html
deleted file mode 100644
index 164f781..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
- <h2>About This Content</h2>
-
- <p>November 30, 2017</p>
- <h3>License</h3>
-
- <p>
- The Eclipse Foundation makes available all content in this plug-in
- ("Content"). Unless otherwise indicated below, the Content
- is provided to you under the terms and conditions of the Eclipse
- Public License Version 2.0 ("EPL"). A copy of the EPL is
- available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
- For purposes of the EPL, "Program" will mean the Content.
- </p>
-
- <p>
- If you did not receive this Content directly from the Eclipse
- Foundation, the Content is being redistributed by another party
- ("Redistributor") and different terms and conditions may
- apply to your use of any object code in the Content. Check the
- Redistributor's license that was provided with the Content. If no such
- license exists, contact the Redistributor. Unless otherwise indicated
- below, the terms and conditions of the EPL still apply to any source
- code in the Content and such source code may be obtained at <a
- href="http://www.eclipse.org/">http://www.eclipse.org</a>.
- </p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/build.properties b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/build.properties
deleted file mode 100644
index 1690c70..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/build.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-# *******************************************************************************
-# Copyright (c) 2017 - 2018 Robert Bosch GmbH and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License 2.0
-# which accompanies this distribution, and is available at
-# https://www.eclipse.org/legal/epl-2.0/
-#
-# Contributors:
-# Robert Bosch GmbH - initial API and implementation
-#
-# *******************************************************************************
-bin.includes = feature.xml,\
- epl-2.0.html,\
- about.html
-src.includes = about.html,\
- epl-2.0.html
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/epl-2.0.html b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/epl-2.0.html
deleted file mode 100644
index 637a181..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/epl-2.0.html
+++ /dev/null
@@ -1,300 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Eclipse Public License - Version 2.0</title>
- <style type="text/css">
- body {
- margin: 1.5em 3em;
- }
- h1{
- font-size:1.5em;
- }
- h2{
- font-size:1em;
- margin-bottom:0.5em;
- margin-top:1em;
- }
- p {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
- }
- ul, ol{
- list-style-type:none;
- }
- </style>
- </head>
- <body>
- <h1>Eclipse Public License - v 2.0</h1>
- <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
- PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION
- OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
- </p>
- <h2 id="definitions">1. DEFINITIONS</h2>
- <p>“Contribution” means:</p>
- <ul>
- <li>a) in the case of the initial Contributor, the initial content
- Distributed under this Agreement, and
- </li>
- <li>
- b) in the case of each subsequent Contributor:
- <ul>
- <li>i) changes to the Program, and</li>
- <li>ii) additions to the Program;</li>
- </ul>
- where such changes and/or additions to the Program originate from
- and are Distributed by that particular Contributor. A Contribution
- “originates” from a Contributor if it was added to the Program by such
- Contributor itself or anyone acting on such Contributor's behalf.
- Contributions do not include changes or additions to the Program that
- are not Modified Works.
- </li>
- </ul>
- <p>“Contributor” means any person or entity that Distributes the Program.</p>
- <p>“Licensed Patents” mean patent claims licensable by a Contributor which
- are necessarily infringed by the use or sale of its Contribution alone
- or when combined with the Program.
- </p>
- <p>“Program” means the Contributions Distributed in accordance with this
- Agreement.
- </p>
- <p>“Recipient” means anyone who receives the Program under this Agreement
- or any Secondary License (as applicable), including Contributors.
- </p>
- <p>“Derivative Works” shall mean any work, whether in Source Code or other
- form, that is based on (or derived from) the Program and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship.
- </p>
- <p>“Modified Works” shall mean any work in Source Code or other form that
- results from an addition to, deletion from, or modification of the
- contents of the Program, including, for purposes of clarity any new file
- in Source Code form that contains any contents of the Program. Modified
- Works shall not include works that contain only declarations, interfaces,
- types, classes, structures, or files of the Program solely in each case
- in order to link to, bind by name, or subclass the Program or Modified
- Works thereof.
- </p>
- <p>“Distribute” means the acts of a) distributing or b) making available
- in any manner that enables the transfer of a copy.
- </p>
- <p>“Source Code” means the form of a Program preferred for making
- modifications, including but not limited to software source code,
- documentation source, and configuration files.
- </p>
- <p>“Secondary License” means either the GNU General Public License,
- Version 2.0, or any later versions of that license, including any
- exceptions or additional permissions as identified by the initial
- Contributor.
- </p>
- <h2 id="grant-of-rights">2. GRANT OF RIGHTS</h2>
- <ul>
- <li>a) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free copyright
- license to reproduce, prepare Derivative Works of, publicly display,
- publicly perform, Distribute and sublicense the Contribution of such
- Contributor, if any, and such Derivative Works.
- </li>
- <li>b) Subject to the terms of this Agreement, each Contributor hereby
- grants Recipient a non-exclusive, worldwide, royalty-free patent
- license under Licensed Patents to make, use, sell, offer to sell,
- import and otherwise transfer the Contribution of such Contributor,
- if any, in Source Code or other form. This patent license shall
- apply to the combination of the Contribution and the Program if,
- at the time the Contribution is added by the Contributor, such
- addition of the Contribution causes such combination to be covered
- by the Licensed Patents. The patent license shall not apply to any
- other combinations which include the Contribution. No hardware per
- se is licensed hereunder.
- </li>
- <li>c) Recipient understands that although each Contributor grants the
- licenses to its Contributions set forth herein, no assurances are
- provided by any Contributor that the Program does not infringe the
- patent or other intellectual property rights of any other entity.
- Each Contributor disclaims any liability to Recipient for claims
- brought by any other entity based on infringement of intellectual
- property rights or otherwise. As a condition to exercising the rights
- and licenses granted hereunder, each Recipient hereby assumes sole
- responsibility to secure any other intellectual property rights needed,
- if any. For example, if a third party patent license is required to
- allow Recipient to Distribute the Program, it is Recipient's
- responsibility to acquire that license before distributing the Program.
- </li>
- <li>d) Each Contributor represents that to its knowledge it has sufficient
- copyright rights in its Contribution, if any, to grant the copyright
- license set forth in this Agreement.
- </li>
- <li>e) Notwithstanding the terms of any Secondary License, no Contributor
- makes additional grants to any Recipient (other than those set forth
- in this Agreement) as a result of such Recipient's receipt of the
- Program under the terms of a Secondary License (if permitted under
- the terms of Section 3).
- </li>
- </ul>
- <h2 id="requirements">3. REQUIREMENTS</h2>
- <p>3.1 If a Contributor Distributes the Program in any form, then:</p>
- <ul>
- <li>a) the Program must also be made available as Source Code, in
- accordance with section 3.2, and the Contributor must accompany
- the Program with a statement that the Source Code for the Program
- is available under this Agreement, and informs Recipients how to
- obtain it in a reasonable manner on or through a medium customarily
- used for software exchange; and
- </li>
- <li>
- b) the Contributor may Distribute the Program under a license
- different than this Agreement, provided that such license:
- <ul>
- <li>i) effectively disclaims on behalf of all other Contributors all
- warranties and conditions, express and implied, including warranties
- or conditions of title and non-infringement, and implied warranties
- or conditions of merchantability and fitness for a particular purpose;
- </li>
- <li>ii) effectively excludes on behalf of all other Contributors all
- liability for damages, including direct, indirect, special, incidental
- and consequential damages, such as lost profits;
- </li>
- <li>iii) does not attempt to limit or alter the recipients' rights in the
- Source Code under section 3.2; and
- </li>
- <li>iv) requires any subsequent distribution of the Program by any party
- to be under a license that satisfies the requirements of this section 3.
- </li>
- </ul>
- </li>
- </ul>
- <p>3.2 When the Program is Distributed as Source Code:</p>
- <ul>
- <li>a) it must be made available under this Agreement, or if the Program (i)
- is combined with other material in a separate file or files made available
- under a Secondary License, and (ii) the initial Contributor attached to
- the Source Code the notice described in Exhibit A of this Agreement,
- then the Program may be made available under the terms of such
- Secondary Licenses, and
- </li>
- <li>b) a copy of this Agreement must be included with each copy of the Program.</li>
- </ul>
- <p>3.3 Contributors may not remove or alter any copyright, patent, trademark,
- attribution notices, disclaimers of warranty, or limitations of liability
- (‘notices’) contained within the Program from any copy of the Program which
- they Distribute, provided that Contributors may add their own appropriate
- notices.
- </p>
- <h2 id="commercial-distribution">4. COMMERCIAL DISTRIBUTION</h2>
- <p>Commercial distributors of software may accept certain responsibilities
- with respect to end users, business partners and the like. While this
- license is intended to facilitate the commercial use of the Program, the
- Contributor who includes the Program in a commercial product offering should
- do so in a manner which does not create potential liability for other
- Contributors. Therefore, if a Contributor includes the Program in a
- commercial product offering, such Contributor (“Commercial Contributor”)
- hereby agrees to defend and indemnify every other Contributor
- (“Indemnified Contributor”) against any losses, damages and costs
- (collectively “Losses”) arising from claims, lawsuits and other legal actions
- brought by a third party against the Indemnified Contributor to the extent
- caused by the acts or omissions of such Commercial Contributor in connection
- with its distribution of the Program in a commercial product offering.
- The obligations in this section do not apply to any claims or Losses relating
- to any actual or alleged intellectual property infringement. In order to
- qualify, an Indemnified Contributor must: a) promptly notify the
- Commercial Contributor in writing of such claim, and b) allow the Commercial
- Contributor to control, and cooperate with the Commercial Contributor in,
- the defense and any related settlement negotiations. The Indemnified
- Contributor may participate in any such claim at its own expense.
- </p>
- <p>For example, a Contributor might include the Program
- in a commercial product offering, Product X. That Contributor is then a
- Commercial Contributor. If that Commercial Contributor then makes performance
- claims, or offers warranties related to Product X, those performance claims
- and warranties are such Commercial Contributor's responsibility alone.
- Under this section, the Commercial Contributor would have to defend claims
- against the other Contributors related to those performance claims and
- warranties, and if a court requires any other Contributor to pay any damages
- as a result, the Commercial Contributor must pay those damages.
- </p>
- <h2 id="warranty">5. NO WARRANTY</h2>
- <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
- BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT
- WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
- WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
- MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
- solely responsible for determining the appropriateness of using and
- distributing the Program and assumes all risks associated with its
- exercise of rights under this Agreement, including but not limited to the
- risks and costs of program errors, compliance with applicable laws, damage
- to or loss of data, programs or equipment, and unavailability or
- interruption of operations.
- </p>
- <h2 id="disclaimer">6. DISCLAIMER OF LIABILITY</h2>
- <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED
- BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY
- LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
- GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- </p>
- <h2 id="general">7. GENERAL</h2>
- <p>If any provision of this Agreement is invalid or unenforceable under
- applicable law, it shall not affect the validity or enforceability of the
- remainder of the terms of this Agreement, and without further action by the
- parties hereto, such provision shall be reformed to the minimum extent
- necessary to make such provision valid and enforceable.
- </p>
- <p>If Recipient institutes patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Program itself
- (excluding combinations of the Program with other software or hardware)
- infringes such Recipient's patent(s), then such Recipient's rights granted
- under Section 2(b) shall terminate as of the date such litigation is filed.
- </p>
- <p>All Recipient's rights under this Agreement shall terminate if it fails to
- comply with any of the material terms or conditions of this Agreement and
- does not cure such failure in a reasonable period of time after becoming
- aware of such noncompliance. If all Recipient's rights under this Agreement
- terminate, Recipient agrees to cease use and distribution of the Program
- as soon as reasonably practicable. However, Recipient's obligations under
- this Agreement and any licenses granted by Recipient relating to the
- Program shall continue and survive.
- </p>
- <p>Everyone is permitted to copy and distribute copies of this Agreement,
- but in order to avoid inconsistency the Agreement is copyrighted and may
- only be modified in the following manner. The Agreement Steward reserves
- the right to publish new versions (including revisions) of this Agreement
- from time to time. No one other than the Agreement Steward has the right
- to modify this Agreement. The Eclipse Foundation is the initial Agreement
- Steward. The Eclipse Foundation may assign the responsibility to serve as
- the Agreement Steward to a suitable separate entity. Each new version of
- the Agreement will be given a distinguishing version number. The Program
- (including Contributions) may always be Distributed subject to the version
- of the Agreement under which it was received. In addition, after a new
- version of the Agreement is published, Contributor may elect to Distribute
- the Program (including its Contributions) under the new version.
- </p>
- <p>Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
- receives no rights or licenses to the intellectual property of any
- Contributor under this Agreement, whether expressly, by implication,
- estoppel or otherwise. All rights in the Program not expressly granted
- under this Agreement are reserved. Nothing in this Agreement is intended
- to be enforceable by any entity that is not a Contributor or Recipient.
- No third-party beneficiary rights are created under this Agreement.
- </p>
- <h2 id="exhibit-a">Exhibit A – Form of Secondary Licenses Notice</h2>
- <p>“This Source Code may also be made available under the following
- Secondary Licenses when the conditions for such availability set forth
- in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
- version(s), and exceptions or additional permissions here}.”
- </p>
- <blockquote>
- <p>Simply including a copy of this Agreement, including this Exhibit A
- is not sufficient to license the Source Code under Secondary Licenses.
- </p>
- <p>If it is not possible or desirable to put the notice in a particular file,
- then You may include the notice in a location (such as a LICENSE file in a
- relevant directory) where a recipient would be likely to look for
- such a notice.
- </p>
- <p>You may add additional accurate notices of copyright ownership.</p>
- </blockquote>
- </body>
-</html>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/feature.xml b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/feature.xml
deleted file mode 100644
index e6a90b8..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/feature.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature id="org.eclipse.app4mc.emfutils.metamodelviewer.feature" label="AMALTHEA MetaModel Viewer" provider-name="Eclipse APP4MC" version="0.8.3">
- <copyright url="http://www.example.com/copyright">
- [Enter Copyright Description here.]
- </copyright>
- <description url="http://www.example.com/description">
- [Enter Feature Description here.]
- </description>
- <license url="http://www.example.com/license">
- [Enter License Description here.]
- </license>
- <plugin download-size="0" id="org.eclipse.app4mc.emfutils.metamodelviewer" install-size="0" unpack="false" version="0.0.0"/>
- <requires>
- <import plugin="org.eclipse.core.runtime"/>
- <import plugin="org.eclipse.sphinx.emf"/>
- <import plugin="org.eclipse.ui"/>
- </requires>
-</feature>
diff --git a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/pom.xml b/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/pom.xml
deleted file mode 100644
index 0dd477c..0000000
--- a/eclipse-tools/emf-graphical-viewer/features/org.eclipse.app4mc.emfutils.metamodelviewer.feature/pom.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <relativePath>../../build/org.eclipse.app4mc.emfutils.extractor.build</relativePath>
- <groupId>org.eclipse.app4mc.emfutils.content.extractor</groupId>
- <artifactId>org.eclipse.app4mc.emfutils.extractor.build</artifactId>
- <version>0.8.3</version>
- </parent>
-
- <artifactId>org.eclipse.app4mc.emfutils.metamodelviewer.feature</artifactId>
- <packaging>eclipse-feature</packaging>
-
-</project>
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.classpath b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.classpath
deleted file mode 100644
index 3cd64d4..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry exported="true" kind="lib" path="lib/plantuml-2018.8.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
- <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.gitignore b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.gitignore
deleted file mode 100644
index 09e3bc9..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/bin/
-/target/
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/META-INF/MANIFEST.MF b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/META-INF/MANIFEST.MF
deleted file mode 100644
index 19c6390..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,152 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Plantuml
-Bundle-SymbolicName: net.sourceforge.plantuml
-Bundle-Version: 8000.0.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ClassPath: lib/plantuml-2018.8.jar
-Export-Package: gen.lib.cdt,
- gen.lib.cgraph,
- gen.lib.circogen,
- gen.lib.common,
- gen.lib.dotgen,
- gen.lib.fdpgen,
- gen.lib.gvc,
- gen.lib.label,
- gen.lib.ortho,
- gen.lib.pack,
- gen.lib.pathplan,
- gen.lib.xdot,
- gen.plugin.core,
- gen.plugin.dot_layout,
- h,
- net.sourceforge.plantuml,
- net.sourceforge.plantuml.activitydiagram,
- net.sourceforge.plantuml.activitydiagram.command,
- net.sourceforge.plantuml.activitydiagram3,
- net.sourceforge.plantuml.activitydiagram3.command,
- net.sourceforge.plantuml.activitydiagram3.ftile,
- net.sourceforge.plantuml.activitydiagram3.ftile.vcompact,
- net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.cond,
- net.sourceforge.plantuml.activitydiagram3.ftile.vertical,
- net.sourceforge.plantuml.anim,
- net.sourceforge.plantuml.ant,
- net.sourceforge.plantuml.api,
- net.sourceforge.plantuml.api.mda.option2,
- net.sourceforge.plantuml.api.mda.option3,
- net.sourceforge.plantuml.asciiart,
- net.sourceforge.plantuml.bpm,
- net.sourceforge.plantuml.braille,
- net.sourceforge.plantuml.brotli,
- net.sourceforge.plantuml.classdiagram,
- net.sourceforge.plantuml.classdiagram.command,
- net.sourceforge.plantuml.code,
- net.sourceforge.plantuml.command,
- net.sourceforge.plantuml.command.note,
- net.sourceforge.plantuml.command.note.sequence,
- net.sourceforge.plantuml.command.regex,
- net.sourceforge.plantuml.compositediagram,
- net.sourceforge.plantuml.compositediagram.command,
- net.sourceforge.plantuml.core,
- net.sourceforge.plantuml.creole,
- net.sourceforge.plantuml.cucadiagram,
- net.sourceforge.plantuml.cucadiagram.dot,
- net.sourceforge.plantuml.cucadiagram.entity,
- net.sourceforge.plantuml.cute,
- net.sourceforge.plantuml.dedication,
- net.sourceforge.plantuml.definition,
- net.sourceforge.plantuml.descdiagram,
- net.sourceforge.plantuml.descdiagram.command,
- net.sourceforge.plantuml.directdot,
- net.sourceforge.plantuml.donors,
- net.sourceforge.plantuml.eggs,
- net.sourceforge.plantuml.eps,
- net.sourceforge.plantuml.flashcode,
- net.sourceforge.plantuml.flowdiagram,
- net.sourceforge.plantuml.font,
- net.sourceforge.plantuml.ftp,
- net.sourceforge.plantuml.fun,
- net.sourceforge.plantuml.geom,
- net.sourceforge.plantuml.geom.kinetic,
- net.sourceforge.plantuml.golem,
- net.sourceforge.plantuml.graph,
- net.sourceforge.plantuml.graph2,
- net.sourceforge.plantuml.graphic,
- net.sourceforge.plantuml.graphic.color,
- net.sourceforge.plantuml.hector,
- net.sourceforge.plantuml.hector2,
- net.sourceforge.plantuml.hector2.continuity,
- net.sourceforge.plantuml.hector2.graphic,
- net.sourceforge.plantuml.hector2.layering,
- net.sourceforge.plantuml.hector2.mpos,
- net.sourceforge.plantuml.html,
- net.sourceforge.plantuml.jdot,
- net.sourceforge.plantuml.jungle,
- net.sourceforge.plantuml.math,
- net.sourceforge.plantuml.mda,
- net.sourceforge.plantuml.mjpeg,
- net.sourceforge.plantuml.objectdiagram,
- net.sourceforge.plantuml.objectdiagram.command,
- net.sourceforge.plantuml.openiconic,
- net.sourceforge.plantuml.openiconic.data,
- net.sourceforge.plantuml.oregon,
- net.sourceforge.plantuml.pdf,
- net.sourceforge.plantuml.png,
- net.sourceforge.plantuml.posimo,
- net.sourceforge.plantuml.postit,
- net.sourceforge.plantuml.preproc,
- net.sourceforge.plantuml.printskin,
- net.sourceforge.plantuml.project,
- net.sourceforge.plantuml.project.command,
- net.sourceforge.plantuml.project.graphic,
- net.sourceforge.plantuml.project2,
- net.sourceforge.plantuml.project2.command,
- net.sourceforge.plantuml.project3,
- net.sourceforge.plantuml.real,
- net.sourceforge.plantuml.salt,
- net.sourceforge.plantuml.salt.element,
- net.sourceforge.plantuml.salt.factory,
- net.sourceforge.plantuml.sequencediagram,
- net.sourceforge.plantuml.sequencediagram.command,
- net.sourceforge.plantuml.sequencediagram.graphic,
- net.sourceforge.plantuml.sequencediagram.puma,
- net.sourceforge.plantuml.sequencediagram.teoz,
- net.sourceforge.plantuml.skin,
- net.sourceforge.plantuml.skin.bluemodern,
- net.sourceforge.plantuml.skin.rose,
- net.sourceforge.plantuml.statediagram,
- net.sourceforge.plantuml.statediagram.command,
- net.sourceforge.plantuml.stats,
- net.sourceforge.plantuml.stats.api,
- net.sourceforge.plantuml.suggest,
- net.sourceforge.plantuml.svek,
- net.sourceforge.plantuml.svek.extremity,
- net.sourceforge.plantuml.svek.image,
- net.sourceforge.plantuml.svg,
- net.sourceforge.plantuml.swing,
- net.sourceforge.plantuml.syntax,
- net.sourceforge.plantuml.telnet,
- net.sourceforge.plantuml.tikz,
- net.sourceforge.plantuml.timingdiagram,
- net.sourceforge.plantuml.ugraphic,
- net.sourceforge.plantuml.ugraphic.arc,
- net.sourceforge.plantuml.ugraphic.crossing,
- net.sourceforge.plantuml.ugraphic.eps,
- net.sourceforge.plantuml.ugraphic.g2d,
- net.sourceforge.plantuml.ugraphic.hand,
- net.sourceforge.plantuml.ugraphic.html5,
- net.sourceforge.plantuml.ugraphic.sprite,
- net.sourceforge.plantuml.ugraphic.svg,
- net.sourceforge.plantuml.ugraphic.tikz,
- net.sourceforge.plantuml.ugraphic.txt,
- net.sourceforge.plantuml.ugraphic.visio,
- net.sourceforge.plantuml.utils,
- net.sourceforge.plantuml.version,
- net.sourceforge.plantuml.vizjs,
- net.sourceforge.plantuml.xmi,
- net.sourceforge.plantuml.xmlsc,
- net.sourceforge.plantuml.zopfli,
- smetana.core,
- smetana.core.amiga,
- smetana.core.debug
-Automatic-Module-Name: net.sourceforge.plantuml
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/build.properties b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/build.properties
deleted file mode 100644
index dc20abe..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# *******************************************************************************
-# Copyright (c) 2017 - 2018 Robert Bosch GmbH and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License 2.0
-# which accompanies this distribution, and is available at
-# https://www.eclipse.org/legal/epl-2.0/
-#
-# Contributors:
-# Robert Bosch GmbH - initial API and implementation
-#
-# *******************************************************************************
-bin.includes = META-INF/,\
- lib-src/,\
- lib/plantuml-2018.8.jar
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib-src/README.txt b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib-src/README.txt
deleted file mode 100644
index 6416959..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib-src/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Goto http://plantuml.sourceforge.net/ for product info
-
-CQ clearance as a part of eclipse IPZilla (CQ 8178): https://dev.eclipse.org/ipzilla/show_bug.cgi?id=8178
-
-Downloaded jar from : http://sourceforge.net/projects/plantuml/files/plantuml-jar-epl-8000.zip/download
-
-Downloaded sources from : https://dev.eclipse.org/ipzilla/attachment.cgi?id=11627
\ No newline at end of file
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib-src/plantuml-sources-epl-8000.zip b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib-src/plantuml-sources-epl-8000.zip
deleted file mode 100644
index 69db480..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib-src/plantuml-sources-epl-8000.zip
+++ /dev/null
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib/plantuml-2018.8.jar b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib/plantuml-2018.8.jar
deleted file mode 100644
index 7f4bde6..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/lib/plantuml-2018.8.jar
+++ /dev/null
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/license/license.txt b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/license/license.txt
deleted file mode 100644
index 47adaf9..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/license/license.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-========================================================================
-PlantUML : a free UML diagram generator
-========================================================================
-
-(C) Copyright 2009-2014, Arnaud Roques
-
-Project Info: http://plantuml.sourceforge.net
-
-PlantUML is free software; you can redistribute it and/or modify it
-under the terms of the Eclipse Public License.
-
-THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
-LICENSE ("AGREEMENT"). [Eclipse Public License - v 1.0]
-
-ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES
-RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
-
-You may obtain a copy of the License at
-
-http://www.eclipse.org/legal/epl-v10.html
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-Note that images (whatever their format : PNG, SVG...) generated by running PlantUML
-are owned by the author of their corresponding sources code (that is, their
-textual description in PlantUML language). Those images are not covered by
-the Eclipse Public License.
-
-The generated images can then be used without any reference to the Eclipse Public License.
-It is not even necessary to stipulate that they have been generated with PlantUML,
-also this will be appreciate by PlantUML team.
-
-There is an exception : if the textual description in PlantUML language is also covered
-by a license (like the EPL), then the generated images are logically covered
-by the very same license.
-
-Icon provided by OpenIconic : https://useiconic.com/open/
-
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/pom.xml b/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/pom.xml
deleted file mode 100644
index f489eaa..0000000
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/pom.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
-<parent>
- <relativePath>../../build/org.eclipse.app4mc.emfutils.extractor.build</relativePath>
- <groupId>org.eclipse.app4mc.emfutils.content.extractor</groupId>
- <artifactId>org.eclipse.app4mc.emfutils.extractor.build</artifactId>
- <version>0.8.3</version>
- </parent>
-
- <artifactId>net.sourceforge.plantuml</artifactId>
- <packaging>eclipse-plugin</packaging>
- <version>8000.0.0-SNAPSHOT</version>
-
-</project>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.classpath b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.classpath
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.classpath
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.classpath
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.gitignore b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.gitignore
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.gitignore
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.gitignore
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.project b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.project
similarity index 91%
copy from eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.project
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.project
index 7614bd0..751de6a 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/net.sourceforge.plantuml/.project
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>net.sourceforge.plantuml</name>
+ <name>org.eclipse.app4mc.emf.metamodelviewer</name>
<comment></comment>
<projects>
</projects>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.settings/org.eclipse.jdt.core.prefs b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.settings/org.eclipse.jdt.core.prefs
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/.settings/org.eclipse.jdt.core.prefs
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/META-INF/MANIFEST.MF b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..b54e4f2
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: APP4MC EMF Metamodel Viewer
+Bundle-SymbolicName: org.eclipse.app4mc.emf.metamodelviewer;singleton:=true
+Bundle-Version: 0.9.8.qualifier
+Bundle-Vendor: Eclipse APP4MC
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.sphinx.emf,
+ org.eclipse.jface;bundle-version="3.14.0",
+ org.eclipse.ui
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.app4mc.emf.metamodelviewer.base.Activator
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.app4mc.emf.metamodelviewer.base,
+ org.eclipse.app4mc.emf.metamodelviewer.dialogs,
+ org.eclipse.app4mc.emf.metamodelviewer.preferences,
+ org.eclipse.app4mc.emf.metamodelviewer.utils,
+ org.eclipse.app4mc.emf.metamodelviewer.views,
+ org.eclipse.app4mc.emf.metamodelviewer.views.providers
+Automatic-Module-Name: org.eclipse.app4mc.emf.metamodelviewer
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/about.html b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/about.html
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/about.html
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/about.html
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/build.properties b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/build.properties
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/build.properties
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/build.properties
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/epl-2.0.html b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/epl-2.0.html
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/epl-2.0.html
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/epl-2.0.html
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/abstract_class_obj.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/abstract_class_obj.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/abstract_class_obj.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/abstract_class_obj.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/attribute.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/attribute.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/attribute.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/attribute.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/attribute_containment.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/attribute_containment.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/attribute_containment.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/attribute_containment.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/attribute_reference.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/attribute_reference.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/attribute_reference.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/attribute_reference.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/class_obj.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/class_obj.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/class_obj.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/class_obj.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/container.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/container.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/container.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/container.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/downward_co.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/downward_co.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/downward_co.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/downward_co.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/enum_obj.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/enum_obj.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/enum_obj.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/enum_obj.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/hierarchy.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/hierarchy.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/hierarchy.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/hierarchy.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/interface_obj.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/interface_obj.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/interface_obj.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/interface_obj.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/prop_ps.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/prop_ps.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/prop_ps.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/prop_ps.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/register_ecores.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/register_ecores.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/register_ecores.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/register_ecores.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/sample.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/sample.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/sample.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/sample.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/super_co.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/super_co.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/super_co.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/super_co.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/type_obj.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/type_obj.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/type_obj.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/icons/type_obj.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/plugin.xml b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/plugin.xml
new file mode 100644
index 0000000..8834d5d
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/plugin.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension
+ point="org.eclipse.ui.views">
+ <category
+ name="Meta Model Explorer"
+ id="org.eclipse.app4mc.emf.metamodelviewer.explorer.view.category">
+ </category>
+ <view
+ allowMultiple="true"
+ category="org.eclipse.app4mc.emf.metamodelviewer.explorer.view.category"
+ class="org.eclipse.app4mc.emf.metamodelviewer.views.MetaModelExplorerView"
+ icon="icons/sample.gif"
+ id="org.eclipse.app4mc.emf.metamodelviewer.views.MetaModel-ExplorerView"
+ name="Meta Model Explorer">
+ </view>
+ </extension>
+ <extension
+ point="org.eclipse.core.runtime.preferences">
+ <initializer
+ class="org.eclipse.app4mc.emf.metamodelviewer.preferences.PreferenceInitializer">
+ </initializer>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ class="org.eclipse.app4mc.emf.metamodelviewer.preferences.MetaModelViewerPreferencePage"
+ id="org.eclipse.app4mc.emf.metamodelviewer.page1"
+ name="Meta Model Viewer">
+ </page>
+ </extension>
+
+</plugin>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/src/org/eclipse/app4mc/emfutils/content/extractor/Activator.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/base/Activator.java
similarity index 86%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/src/org/eclipse/app4mc/emfutils/content/extractor/Activator.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/base/Activator.java
index c86b924..952b3f5 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/src/org/eclipse/app4mc/emfutils/content/extractor/Activator.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/base/Activator.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.content.extractor;
+
+package org.eclipse.app4mc.emf.metamodelviewer.base;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -23,7 +24,7 @@
public class Activator extends AbstractUIPlugin {
// The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.app4mc.emfutils.content.extractor"; //$NON-NLS-1$
+ public static final String PLUGIN_ID = "org.eclipse.app4mc.emf.metamodelviewer"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
@@ -36,7 +37,7 @@
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
@Override
@@ -47,7 +48,7 @@
/*
* (non-Javadoc)
- *
+ *
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
@Override
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/dialogs/SelectedElementContentDialog.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java
similarity index 84%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/dialogs/SelectedElementContentDialog.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java
index 71538d3..8de6d96 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/dialogs/SelectedElementContentDialog.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/dialogs/SelectedElementContentDialog.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,15 +12,16 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.dialogs;
+
+package org.eclipse.app4mc.emf.metamodelviewer.dialogs;
import java.util.AbstractMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
-import org.eclipse.app4mc.emfutils.metamodelviewer.base.Activator;
-import org.eclipse.app4mc.emfutils.metamodelviewer.preferences.MetaModelViewerPreferenceConstants;
+import org.eclipse.app4mc.emf.metamodelviewer.base.Activator;
+import org.eclipse.app4mc.emf.metamodelviewer.preferences.MetaModelViewerPreferenceConstants;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.action.IContributionItem;
@@ -54,7 +55,6 @@
this.iWorkbenchPartSite = iWorkbenchPartSite;
}
-
@Override
protected Control createDialogArea(final Composite parent) {
final Composite container = (Composite) super.createDialogArea(parent);
@@ -73,13 +73,11 @@
//
// this.tv = filteredTree.getViewer();
-
this.tv = new TreeViewer(container);
this.tv.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
this.tv.setContentProvider(
- new org.eclipse.app4mc.emfutils.metamodelviewer.views.providers.ViewContentProvider());
- this.tv.setLabelProvider(new org.eclipse.app4mc.emfutils.metamodelviewer.views.providers.ViewLabelProvider());
-
+ new org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewContentProvider());
+ this.tv.setLabelProvider(new org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewLabelProvider());
final Entry<String, EObject> entry = new AbstractMap.SimpleEntry<String, EObject>("Selected Element",
this.eObject);
@@ -117,7 +115,6 @@
getIWorkbenchPartSite().registerContextMenu(menuMgr, this.tv);
}
-
private void hookDoubleClickAction() {
this.tv.addDoubleClickListener(new IDoubleClickListener() {
@Override
@@ -129,20 +126,24 @@
if (selection instanceof TreeSelection) {
final Object firstElement = ((TreeSelection) selection).getFirstElement();
if (firstElement instanceof EObject) {
- Shell parentShell = null;
-
- String displayDialogStyle=(Activator.getDefault().getPreferenceStore().getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY));
-
- if(displayDialogStyle !=null && displayDialogStyle.equals(MetaModelViewerPreferenceConstants.V_ON_TOP)){
- parentShell=new Shell(SWT.ON_TOP);
- }else{
- parentShell=new Shell();
- }
+ Shell parentShell = null;
- // final String name = ((firstElement instanceof EClass) ? ((EClass) firstElement).getName() :
+ String displayDialogStyle = (Activator.getDefault().getPreferenceStore()
+ .getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY));
+
+ if (displayDialogStyle != null
+ && displayDialogStyle.equals(MetaModelViewerPreferenceConstants.V_ON_TOP)) {
+ parentShell = new Shell(SWT.ON_TOP);
+ } else {
+ parentShell = new Shell();
+ }
+
+ // final String name = ((firstElement instanceof EClass) ? ((EClass)
+ // firstElement).getName() :
// "");
//
- // parentShell.setText("Details of : " + ((EClass) firstElement).eClass().getName() + " " +
+ // parentShell.setText("Details of : " + ((EClass)
+ // firstElement).eClass().getName() + " " +
// name);
//
//
@@ -153,7 +154,6 @@
// taskItem.setOverlayText(name);
// taskItem.setText(name);
-
new SelectedElementContentDialog(parentShell, getIWorkbenchPartSite(), (EObject) firstElement)
.open();
@@ -186,14 +186,12 @@
return new Point(450, 300);
}
-
@Override
protected void setShellStyle(final int newShellStyle) {
super.setShellStyle(SWT.CLOSE | SWT.MODELESS | SWT.BORDER | SWT.TITLE | SWT.RESIZE);
setBlockOnOpen(false);
}
-
public IWorkbenchPartSite getIWorkbenchPartSite() {
return this.iWorkbenchPartSite;
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
similarity index 86%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
index 7a9cfcf..33bf14b 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferenceConstants.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.preferences;
+
+package org.eclipse.app4mc.emf.metamodelviewer.preferences;
/**
* Constant definitions for plug-in preferences
@@ -22,8 +23,7 @@
public static final String P_DIALOG_DISPLAY = "P_DIALOG_DISPLAY";
public static final String V_ON_TOP = "On Top";
-
- public static final String V_DEFAUT = "Default";
+ public static final String V_DEFAUT = "Default";
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/MetaModelViewerPreferencePage.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
similarity index 66%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
index ae3c590..4fdf827 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/MetaModelViewerPreferencePage.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,24 +12,21 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.preferences;
-import org.eclipse.app4mc.emfutils.metamodelviewer.base.Activator;
+package org.eclipse.app4mc.emf.metamodelviewer.preferences;
+
+import org.eclipse.app4mc.emf.metamodelviewer.base.Activator;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
-
-
-public class MetaModelViewerPreferencePage extends FieldEditorPreferencePage
- implements IWorkbenchPreferencePage {
+public class MetaModelViewerPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
public MetaModelViewerPreferencePage() {
super(GRID);
setPreferenceStore(Activator.getDefault().getPreferenceStore());
- setDescription(
- "Preference page to specify the properties/behaviour of MetaModel viewer");
+ setDescription("Preference page to specify the properties/behaviour of MetaModel viewer");
}
/**
@@ -39,17 +36,12 @@
@Override
public void createFieldEditors() {
-
+ final String[][] options = {
+ { MetaModelViewerPreferenceConstants.V_DEFAUT, MetaModelViewerPreferenceConstants.V_DEFAUT },
+ { MetaModelViewerPreferenceConstants.V_ON_TOP, MetaModelViewerPreferenceConstants.V_ON_TOP } };
- final String[][] options = { { MetaModelViewerPreferenceConstants.V_DEFAUT,
- MetaModelViewerPreferenceConstants.V_DEFAUT} ,{ MetaModelViewerPreferenceConstants.V_ON_TOP, MetaModelViewerPreferenceConstants.V_ON_TOP }
- };
-
-
- addField(new ComboFieldEditor(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY, "&Configure the way child dialogs should be displayed", options,
- getFieldEditorParent()));
-
-
+ addField(new ComboFieldEditor(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY,
+ "&Configure the way child dialogs should be displayed", options, getFieldEditorParent()));
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/PreferenceInitializer.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/PreferenceInitializer.java
similarity index 75%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/PreferenceInitializer.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/PreferenceInitializer.java
index 08cdcee..2efdec9 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/preferences/PreferenceInitializer.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/preferences/PreferenceInitializer.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,9 +12,10 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.preferences;
-import org.eclipse.app4mc.emfutils.metamodelviewer.base.Activator;
+package org.eclipse.app4mc.emf.metamodelviewer.preferences;
+
+import org.eclipse.app4mc.emf.metamodelviewer.base.Activator;
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
import org.eclipse.jface.preference.IPreferenceStore;
@@ -31,7 +32,9 @@
@Override
public void initializeDefaultPreferences() {
final IPreferenceStore store = Activator.getDefault().getPreferenceStore();
- store.setDefault(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY, store.getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY) != null
- ? store.getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY) : "");
+ store.setDefault(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY,
+ store.getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY) != null
+ ? store.getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY)
+ : "");
}
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/ElementSearchPatternFilter.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/ElementSearchPatternFilter.java
similarity index 82%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/ElementSearchPatternFilter.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/ElementSearchPatternFilter.java
index 9fd047a..d11f69b 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/ElementSearchPatternFilter.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/ElementSearchPatternFilter.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.utils;
+
+package org.eclipse.app4mc.emf.metamodelviewer.utils;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -21,7 +22,6 @@
public class ElementSearchPatternFilter extends PatternFilter {
-
private boolean filterForEClassifiersBoolean;
private boolean filterForAttributesBoolean;
@@ -38,11 +38,9 @@
if (element instanceof SuperClassesListBuilder) {
return false;
- }
- else if (element instanceof SubClassesListBuilder) {
+ } else if (element instanceof SubClassesListBuilder) {
return false;
- }
- else if (element instanceof EStructuralFeature) {
+ } else if (element instanceof EStructuralFeature) {
return false;
}
@@ -62,21 +60,17 @@
}
return super.isLeafMatch(viewer, element);
- }
- else if ((element instanceof EStructuralFeature)) {
+ } else if ((element instanceof EStructuralFeature)) {
if (!isFilterForAttributesBoolean()) {
return false;
}
return super.isLeafMatch(viewer, element);
- }
- else if (element instanceof SuperClassesListBuilder) {
+ } else if (element instanceof SuperClassesListBuilder) {
return false;
- }
- else if (element instanceof org.eclipse.app4mc.emfutils.metamodelviewer.utils.SubClassesListBuilder) {
+ } else if (element instanceof org.eclipse.app4mc.emf.metamodelviewer.utils.SubClassesListBuilder) {
return false;
- }
- else if (element instanceof TypeElement) {
+ } else if (element instanceof TypeElement) {
return false;
}
return super.isLeafMatch(viewer, element);
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/PluginUtils.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/PluginUtils.java
similarity index 82%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/PluginUtils.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/PluginUtils.java
index de67922..6d84865 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/PluginUtils.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/PluginUtils.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,12 +12,13 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.utils;
+
+package org.eclipse.app4mc.emf.metamodelviewer.utils;
import java.io.IOException;
import java.net.URL;
-import org.eclipse.app4mc.emfutils.metamodelviewer.base.Activator;
+import org.eclipse.app4mc.emf.metamodelviewer.base.Activator;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.jface.resource.ImageDescriptor;
@@ -34,11 +35,9 @@
fileURL = FileLocator.toFileURL(entry);
if (fileURL != null) {
-
return ImageDescriptor.createFromURL(fileURL);
}
- }
- catch (final IOException e) {
+ } catch (final IOException e) {
e.printStackTrace();
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/RegisterECOREfilesAction.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
similarity index 82%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/RegisterECOREfilesAction.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
index 814999c..e57bad8 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/RegisterECOREfilesAction.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -13,7 +13,7 @@
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.utils;
+package org.eclipse.app4mc.emf.metamodelviewer.utils;
import java.io.File;
import java.io.IOException;
@@ -26,8 +26,8 @@
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.EPackage.Registry;
+import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
@@ -39,48 +39,47 @@
@SuppressWarnings({ "unused", "rawtypes", "unchecked" })
public static ResourceSet loadECOREs(List<String> ecoreFiles, ComboViewer combo_ecore) throws IOException {
-
+
final Registry master_ePackageRegistry = EPackage.Registry.INSTANCE;
-
+
System.out.println(master_ePackageRegistry.size());
-
+
ResourceSet metaDataResourceSet = new ResourceSetImpl();
- if(metaDataResourceSet instanceof ResourceSetImpl){
+ if (metaDataResourceSet instanceof ResourceSetImpl) {
((ResourceSetImpl) metaDataResourceSet).setURIResourceMap(new HashMap<>());
}
- Map<String, Object> extensionToFactoryMap = metaDataResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap();
+ Map<String, Object> extensionToFactoryMap = metaDataResourceSet.getResourceFactoryRegistry()
+ .getExtensionToFactoryMap();
extensionToFactoryMap.put("ecore", new EcoreResourceFactoryImpl());
// extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl());
-
+
// resourceSet.getURIConverter().getURIMap().putAll(EcorePlugin.computePlatformURIMap(true));
EcorePackage ecorePackage = EcorePackage.eINSTANCE;
// register Ecore model in resourceSet registry
Map packageRegistry = metaDataResourceSet.getPackageRegistry();
-
- packageRegistry.put("http://www.eclipse.org/emf/2002/Ecore",
- EcorePackage.eINSTANCE);
-
+
+ packageRegistry.put("http://www.eclipse.org/emf/2002/Ecore", EcorePackage.eINSTANCE);
for (String ecorePath : ecoreFiles) {
EPackage loadEPackage = loadEPackage(ecorePath, metaDataResourceSet);
- if(packageRegistry.containsKey(loadEPackage.getNsURI())){
+ if (packageRegistry.containsKey(loadEPackage.getNsURI())) {
Object object = packageRegistry.get(loadEPackage.getNsURI());
-
- if(object instanceof EPackage){
- ((EPackage)object).getESubpackages().add(loadEPackage);
+
+ if (object instanceof EPackage) {
+ ((EPackage) object).getESubpackages().add(loadEPackage);
}
- }else{
+ } else {
packageRegistry.put(loadEPackage.getNsURI(), loadEPackage);
-
+
}
-
+
// master_ePackageRegistry.put(loadEPackage.getNsURI(), loadEPackage);
}
@@ -88,27 +87,24 @@
EcoreUtil.resolveAll(metaDataResourceSet);
/*-for sorting */
-
+
ArrayList arrayList = new ArrayList(master_ePackageRegistry.keySet());
Collections.sort(arrayList);
-
+
arrayList.addAll(0, metaDataResourceSet.getPackageRegistry().keySet());
-
+
master_ePackageRegistry.putAll(metaDataResourceSet.getPackageRegistry());
-
-
+
combo_ecore.setInput(arrayList.toArray());
-
-
+
return metaDataResourceSet;
}
-
- private static EPackage loadEPackage(String path, ResourceSet metaResourceSet) throws IOException {
+ private static EPackage loadEPackage(String path, ResourceSet metaResourceSet) throws IOException {
// path = path.contains("file:////") ? path : "file:////" + getCanonicalPathFullPath(path);
- path = getCanonicalPathFullPath(path);
+ path = getCanonicalPathFullPath(path);
// Resource metaResource = metaResourceSet.getResource(URI.createURI(path), true);
Resource metaResource = metaResourceSet.getResource(URI.createFileURI(path), true);
@@ -118,9 +114,9 @@
EObject eObject = metaResource.getContents().get(0);
return (EPackage) eObject;
-
+
}
-
+
private static String getCanonicalPathFullPath(String path) throws IOException {
File file = new File(path);
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/SubClassesListBuilder.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java
similarity index 88%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/SubClassesListBuilder.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java
index 040bb44..d0a6fbc 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/SubClassesListBuilder.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SubClassesListBuilder.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.utils;
+
+package org.eclipse.app4mc.emf.metamodelviewer.utils;
import java.util.ArrayList;
import java.util.HashSet;
@@ -51,12 +52,10 @@
this.allSubClasses.addAll(classList.getAllSubClasses());
-
}
}
-
return this.allSubClasses;
}
@@ -82,30 +81,29 @@
// final EObject eObject = contents.get(0);
for (EObject eObj : contents) {
-
+
if (eObj instanceof EPackage) {
allSubClasses.addAll(getSubClasses(selectedObjClass, (EPackage) eObj));
}
-
+
}
}
}
- }
- else {
+ } else {
final EPackage ePackage = selectedObjClass.getEPackage();
-
- if(ePackage !=null){
- EObject rootEPackage=org.eclipse.emf.ecore.util.EcoreUtil.getRootContainer(selectedObjClass);
-
- if(rootEPackage instanceof EPackage){
+
+ if (ePackage != null) {
+ EObject rootEPackage = org.eclipse.emf.ecore.util.EcoreUtil.getRootContainer(selectedObjClass);
+
+ if (rootEPackage instanceof EPackage) {
return getSubClasses(selectedObjClass, (EPackage) rootEPackage);
- }
- }
-
- return getSubClasses(selectedObjClass, ePackage);
-
+ }
+ }
+
+ return getSubClasses(selectedObjClass, ePackage);
+
}
return allSubClasses;
@@ -113,17 +111,15 @@
}
private List<EClass> getSubClasses(final EClass selectedObjClass, final EPackage ePackage) {
-
-
-
+
final List<EClass> allSubClasses = new ArrayList<EClass>();
EList<EPackage> eSubpackages = ePackage.getESubpackages();
-
+
for (EPackage eSubPackage : eSubpackages) {
allSubClasses.addAll(getSubClasses(selectedObjClass, eSubPackage));
}
-
+
final EList<EClassifier> eClassifiers = ePackage.getEClassifiers();
for (final EClassifier eClassifier : eClassifiers) {
@@ -134,7 +130,6 @@
allSubClasses.add((EClass) eClassifier);
}
-
}
}
return allSubClasses;
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/SuperClassesListBuilder.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java
similarity index 91%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/SuperClassesListBuilder.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java
index 9f7991f..8d38bf2 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/SuperClassesListBuilder.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/SuperClassesListBuilder.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.utils;
+
+package org.eclipse.app4mc.emf.metamodelviewer.utils;
import java.util.HashSet;
import java.util.Set;
@@ -46,7 +47,6 @@
this.allSuperClasses.addAll(classList.getAllSuperClasses());
-
}
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/TypeElement.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/TypeElement.java
similarity index 87%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/TypeElement.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/TypeElement.java
index 886f3f9..543e82e 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/utils/TypeElement.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/TypeElement.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.utils;
+
+package org.eclipse.app4mc.emf.metamodelviewer.utils;
import org.eclipse.emf.ecore.EClassifier;
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
new file mode 100644
index 0000000..dea0599
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
@@ -0,0 +1,448 @@
+/**
+ ********************************************************************************
+ * Copyright (c) 2017-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.emf.metamodelviewer.views;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.app4mc.emf.metamodelviewer.base.Activator;
+import org.eclipse.app4mc.emf.metamodelviewer.dialogs.SelectedElementContentDialog;
+import org.eclipse.app4mc.emf.metamodelviewer.preferences.MetaModelViewerPreferenceConstants;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.ElementSearchPatternFilter;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.PluginUtils;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.RegisterECOREfilesAction;
+import org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewContentProvider;
+import org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewLabelProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EPackage.Registry;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.sphinx.emf.metamodel.IMetaModelDescriptor;
+import org.eclipse.sphinx.emf.metamodel.MetaModelDescriptorRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.part.ViewPart;
+
+public class MetaModelExplorerView extends ViewPart {
+ /**
+ * The ID of the view as specified by the extension.
+ */
+ public static final String ID = "org.eclipse.app4mc.emf.metamodelviewer.views.MetaModelExplorerView";
+ private static int id_Counter = 1;
+ private TreeViewer viewer;
+ private Action filterClassesAction;
+ private Action registerEcoreFilesAction;
+ private Action filterAttributesAction;
+ private Action cloneViewAction;
+ private boolean filterForEClassifiersBoolean = true;
+ private boolean filterForAttributesBoolean;
+ private ElementSearchPatternFilter patternFilter;
+ private ComboViewer combo_ecore;
+
+ /**
+ * The constructor.
+ */
+ public MetaModelExplorerView() {
+ }
+
+ /**
+ * This is a callback that will allow us to create the viewer and initialize it.
+ */
+ @Override
+ public void createPartControl(final Composite parent) {
+ parent.setLayout(new GridLayout(2, false));
+
+ final Label label = new Label(parent, 0);
+
+ label.setText("SPHINX Registry");
+
+ label.setLayoutData(new GridData());
+
+ final Combo combo = new Combo(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
+
+ final Label label_ecore = new Label(parent, 0);
+
+ label_ecore.setText("ECORE Registry");
+
+ label_ecore.setLayoutData(new GridData());
+
+ combo_ecore = new ComboViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
+
+ final Registry ePackageRegistry = EPackage.Registry.INSTANCE;
+
+ final Set<String> keySet = ePackageRegistry.keySet();
+ // for (final String string : new TreeSet<String>(keySet)) {
+ //
+ // combo_ecore.add(string);
+ // }
+ combo_ecore.setContentProvider(ArrayContentProvider.getInstance());
+ combo_ecore.setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return super.getText(element);
+ }
+ });
+
+ ArrayList<String> arrayList = new ArrayList<String>(keySet);
+
+ Collections.sort(arrayList);
+
+ combo_ecore.setInput(arrayList.toArray());
+
+ combo_ecore.getCombo().addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ combo.deselectAll();
+
+ final String text = combo_ecore.getCombo().getText();
+
+ final EPackage ePackage = ePackageRegistry.getEPackage(text);
+
+ getViewer().setInput(ePackage);
+ }
+ });
+
+ final List<IMetaModelDescriptor> descriptors = MetaModelDescriptorRegistry.INSTANCE
+ .getDescriptors(MetaModelDescriptorRegistry.ANY_MM);
+
+ for (final IMetaModelDescriptor iMetaModelDescriptor : descriptors) {
+ final String identifier = iMetaModelDescriptor.getIdentifier();
+ combo.add(identifier);
+ }
+
+ combo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ combo_ecore.getCombo().deselectAll();
+
+ final String text = combo.getText();
+
+ final IMetaModelDescriptor descriptor = MetaModelDescriptorRegistry.INSTANCE.getDescriptor(text);
+
+ getViewer().setInput(descriptor);
+ }
+ });
+
+ this.patternFilter = new ElementSearchPatternFilter(this.filterForEClassifiersBoolean,
+ this.filterForAttributesBoolean);
+
+ final FilteredTree filteredTree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER,
+ this.patternFilter, true);
+
+ filteredTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 0));
+
+ this.viewer = filteredTree.getViewer();
+
+ final GridData gridLayoutData = new GridData();
+ gridLayoutData.horizontalSpan = 2;
+ gridLayoutData.grabExcessHorizontalSpace = true;
+ gridLayoutData.grabExcessVerticalSpace = true;
+ gridLayoutData.horizontalAlignment = GridData.FILL;
+ gridLayoutData.verticalAlignment = GridData.FILL;
+
+ this.viewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 0));
+
+ this.viewer.setContentProvider(new ViewContentProvider());
+
+ this.viewer.setInput(getViewSite());
+
+ this.viewer.setLabelProvider(new ViewLabelProvider());
+
+ getSite().setSelectionProvider(this.viewer);
+
+ makeActions();
+
+ hookContextMenu();
+
+ hookDoubleClickAction();
+
+ contributeToActionBars();
+ }
+
+ public TreeViewer getViewer() {
+ return this.viewer;
+ }
+
+ private void hookContextMenu() {
+ final MenuManager menuMgr = new MenuManager("#PopupMenu") {
+ @Override
+ public IContributionItem[] getItems() {
+ IContributionItem[] menuItems = super.getItems();
+
+ final List<IContributionItem> filteredContributionItems = new LinkedList<IContributionItem>();
+
+ for (final IContributionItem contributionItem : menuItems) {
+ if ((contributionItem != null) && ((contributionItem.getId() != null) && (!(contributionItem.getId()
+ .startsWith("org.eclipse.emf.ecore.editor.CreateDynamicInstance"))))) {
+ filteredContributionItems.add(contributionItem);
+ }
+ }
+
+ menuItems = new IContributionItem[filteredContributionItems.size()];
+
+ return filteredContributionItems.toArray(menuItems);
+ }
+ };
+
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ @Override
+ public void menuAboutToShow(final IMenuManager manager) {
+ MetaModelExplorerView.this.fillContextMenu(manager);
+ }
+ });
+
+ final Menu menu = menuMgr.createContextMenu(this.viewer.getControl());
+ this.viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuMgr, this.viewer);
+ }
+
+ private void contributeToActionBars() {
+ final IActionBars bars = getViewSite().getActionBars();
+ fillLocalPullDown(bars.getMenuManager());
+ fillLocalToolBar(bars.getToolBarManager());
+ }
+
+ private void fillLocalPullDown(final IMenuManager manager) {
+ manager.add(this.filterClassesAction);
+ manager.add(new Separator());
+ manager.add(this.filterAttributesAction);
+ manager.add(new Separator());
+ manager.add(this.cloneViewAction);
+ }
+
+ void fillContextMenu(final IMenuManager manager) {
+ // manager.add(this.filterClassesAction);
+ // manager.add(this.filterAttributesAction);
+ // manager.add(new Separator());
+ // this.drillDownAdapter.addNavigationActions(manager);
+ // Other plug-ins can contribute there actions here
+ // manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ private void fillLocalToolBar(final IToolBarManager manager) {
+ manager.add(this.filterClassesAction);
+ manager.add(this.filterAttributesAction);
+ manager.add(new Separator());
+
+ manager.add(this.registerEcoreFilesAction);
+ }
+
+ private void makeActions() {
+ this.filterClassesAction = new Action("Filter for EClassifers", IAction.AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ if (isChecked()) {
+ setFilterForEClassifiersBoolean(true);
+ } else {
+ setFilterForEClassifiersBoolean(false);
+ }
+ }
+ };
+
+ this.filterClassesAction.setEnabled(true);
+
+ this.filterClassesAction.setToolTipText("Filter for EClassifiers");
+ this.filterClassesAction.setImageDescriptor(PluginUtils.getImageDescriptor("icons/class_obj.png"));
+
+ this.filterAttributesAction = new Action("Filter for Attributes", IAction.AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ if (isChecked()) {
+ setFilterForAttributesBoolean(true);
+ } else {
+ setFilterForAttributesBoolean(false);
+ }
+ }
+ };
+ this.filterAttributesAction.setToolTipText("Filter for Attributes");
+ this.filterAttributesAction.setImageDescriptor(PluginUtils.getImageDescriptor("icons/prop_ps.gif"));
+
+ this.cloneViewAction = new Action("Clone View", IAction.AS_CHECK_BOX) {
+ @Override
+ public void run() {
+ try {
+ getViewSite().getPage().showView(ID, id_Counter++ + "", IWorkbenchPage.VIEW_VISIBLE);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+ }
+ };
+ this.cloneViewAction.setToolTipText("Clone View");
+ this.cloneViewAction.setImageDescriptor(PluginUtils.getImageDescriptor("icons/prop_ps.gif"));
+
+ this.registerEcoreFilesAction = new Action("Register ECORE files") {
+ @Override
+ public void run() {
+ // TODO: add implementation for CSV report generation
+ Object input = viewer.getInput();
+
+ FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.OPEN | SWT.MULTI);
+
+ dialog.setFilterExtensions(new String[] { "*.ecore" });
+
+ dialog.open();
+
+ if ((dialog.getFileName() == null) || (dialog.getFileNames() == null)) {
+ return;
+ }
+
+ List<String> files = new ArrayList<String>();
+
+ for (String fileName : dialog.getFileNames()) {
+ String filePath = dialog.getFilterPath() + File.separator + fileName;
+
+ files.add(filePath);
+ }
+
+ try {
+ RegisterECOREfilesAction.loadECOREs(files, combo_ecore);
+ } catch (Exception e) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", e.getMessage());
+ }
+ });
+ }
+ }
+ };
+ this.registerEcoreFilesAction.setToolTipText("Register ECORE files");
+ this.registerEcoreFilesAction.setImageDescriptor(PluginUtils.getImageDescriptor("icons/register_ecores.png"));
+ }
+
+ private void hookDoubleClickAction() {
+ this.viewer.addDoubleClickListener(new IDoubleClickListener() {
+ @Override
+ public void doubleClick(final DoubleClickEvent event) {
+ final ISelection selection = event.getSelection();
+
+ if (selection instanceof TreeSelection) {
+ final Object firstElement = ((TreeSelection) selection).getFirstElement();
+
+ if (firstElement instanceof EObject) {
+ Shell parentShell = null;
+
+ String displayDialogStyle = (Activator.getDefault().getPreferenceStore()
+ .getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY));
+
+ if ((displayDialogStyle != null)
+ && displayDialogStyle.equals(MetaModelViewerPreferenceConstants.V_ON_TOP)) {
+ parentShell = new Shell(SWT.ON_TOP);
+ } else {
+ parentShell = new Shell();
+ }
+
+ // final String name = ((firstElement instanceof EClass) ? ((EClass)
+ // firstElement).getName() :
+ // "");
+ //
+ // parentShell.setText("Details of : " + ((EClass)
+ // firstElement).eClass().getName() + " " +
+ // name);
+ //
+ //
+ // final TaskBar systemTaskBar = parentShell.getDisplay().getSystemTaskBar();
+ // final TaskItem taskItem = systemTaskBar.getItem(parentShell);
+ //
+ // taskItem.setData(parentShell);
+ // taskItem.setOverlayText(name);
+ // taskItem.setText(name);
+ new SelectedElementContentDialog(parentShell, getSite(), (EObject) firstElement).open();
+ }
+ }
+ }
+ });
+ }
+
+ /**
+ * Passing the focus request to the viewer's control.
+ */
+ @Override
+ public void setFocus() {
+ this.viewer.getControl().setFocus();
+ }
+
+ public Action getFilterClassesAction() {
+ return this.filterClassesAction;
+ }
+
+ public Action getFilterAttributesAction() {
+ return this.filterAttributesAction;
+ }
+
+ public boolean isFilterForEClassifiersBoolean() {
+ return this.filterForEClassifiersBoolean;
+ }
+
+ public boolean isFilterForAttributesBoolean() {
+ return this.filterForAttributesBoolean;
+ }
+
+ public void setFilterClassesAction(final Action filterClassesAction) {
+ this.filterClassesAction = filterClassesAction;
+ }
+
+ public void setFilterAttributesAction(final Action filterAttributesAction) {
+ this.filterAttributesAction = filterAttributesAction;
+ }
+
+ public void setFilterForEClassifiersBoolean(final boolean filterForEClassifiersBoolean) {
+ this.filterForEClassifiersBoolean = filterForEClassifiersBoolean;
+
+ this.patternFilter.setFilterForEClassifiersBoolean(filterForEClassifiersBoolean);
+ }
+
+ public void setFilterForAttributesBoolean(final boolean filterForAttributesBoolean) {
+ this.filterForAttributesBoolean = filterForAttributesBoolean;
+
+ this.patternFilter.setFilterForAttributesBoolean(filterForAttributesBoolean);
+ }
+}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/views/providers/ViewContentProvider.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java
similarity index 85%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/views/providers/ViewContentProvider.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java
index 22e154f..aa2519d 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/views/providers/ViewContentProvider.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewContentProvider.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.views.providers;
+
+package org.eclipse.app4mc.emf.metamodelviewer.views.providers;
import java.util.ArrayList;
import java.util.Collection;
@@ -22,9 +23,9 @@
import java.util.Map.Entry;
import java.util.Set;
-import org.eclipse.app4mc.emfutils.metamodelviewer.utils.SubClassesListBuilder;
-import org.eclipse.app4mc.emfutils.metamodelviewer.utils.SuperClassesListBuilder;
-import org.eclipse.app4mc.emfutils.metamodelviewer.utils.TypeElement;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.SubClassesListBuilder;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.SuperClassesListBuilder;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.TypeElement;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
@@ -48,8 +49,7 @@
final Collection<EPackage> ePackages = ((IMetaModelDescriptor) parent).getEPackages();
return ePackages.toArray();
- }
- else if (parent instanceof EPackage) {
+ } else if (parent instanceof EPackage) {
final EList<EPackage> eSubpackages = ((EPackage) parent).getESubpackages();
final EList<EClassifier> eClassifiers = ((EPackage) parent).getEClassifiers();
@@ -58,7 +58,6 @@
arrayList1.addAll(eSubpackages);
-
Collections.sort(arrayList1, this.comparator);
final ArrayList<EClassifier> arrayList2 = new ArrayList<EClassifier>();
@@ -74,8 +73,7 @@
return combinedList.toArray();
- }
- else if (parent instanceof Entry) {
+ } else if (parent instanceof Entry) {
return new Object[] { ((Entry<?, ?>) parent).getValue() };
}
@@ -87,11 +85,9 @@
if (child instanceof EPackage) {
return ((EPackage) child).eContainer();
- }
- else if (child instanceof EClass) {
+ } else if (child instanceof EClass) {
return ((EClass) child).eContainer();
- }
- else if (child instanceof EStructuralFeature) {
+ } else if (child instanceof EStructuralFeature) {
return ((EStructuralFeature) child).eContainer();
}
@@ -110,7 +106,6 @@
arrayList1.addAll(eSubpackages);
-
Collections.sort(arrayList1, this.comparator);
final ArrayList<EClassifier> arrayList2 = new ArrayList<EClassifier>();
@@ -126,8 +121,7 @@
return combinedList.toArray();
- }
- else if (parent instanceof EClass) {
+ } else if (parent instanceof EClass) {
final EList<EStructuralFeature> eAllStructuralFeatures = ((EClass) parent).getEAllStructuralFeatures();
@@ -135,7 +129,6 @@
list.addAll(eAllStructuralFeatures);
-
Collections.sort(list, this.comparator);
int index = 0;
@@ -154,8 +147,7 @@
}
return list.toArray();
- }
- else if (parent instanceof EDataType) {
+ } else if (parent instanceof EDataType) {
if (parent instanceof EEnum) {
@@ -179,8 +171,7 @@
Collections.sort(list, this.comparator);
return list.toArray();
- }
- else if (parent instanceof EEnum) {
+ } else if (parent instanceof EEnum) {
final EList<EEnumLiteral> eLiterals = ((EEnum) parent).getELiterals();
@@ -191,24 +182,20 @@
Collections.sort(list, this.comparator);
return list.toArray();
- }
- else if (parent instanceof SuperClassesListBuilder) {
+ } else if (parent instanceof SuperClassesListBuilder) {
final Set<EClass> allSuperClasses = ((SuperClassesListBuilder) parent).getAllSuperClasses();
final ArrayList<ENamedElement> arrayList = new ArrayList<ENamedElement>(allSuperClasses);
Collections.sort(arrayList, this.comparator);
return arrayList.toArray();
- }
- else if (parent instanceof SubClassesListBuilder) {
+ } else if (parent instanceof SubClassesListBuilder) {
final Set<EClass> allSubClasses = ((SubClassesListBuilder) parent).getAllSubClasses();
final ArrayList<ENamedElement> arrayList = new ArrayList<ENamedElement>(allSubClasses);
Collections.sort(arrayList, this.comparator);
return arrayList.toArray();
- }
- else if (parent instanceof EStructuralFeature) {
+ } else if (parent instanceof EStructuralFeature) {
final EClassifier eType = ((EStructuralFeature) parent).getEType();
return new Object[] { new TypeElement(eType) };
- }
- else if (parent instanceof TypeElement) {
+ } else if (parent instanceof TypeElement) {
final EClassifier eType = ((TypeElement) parent).getClassifier();
return new Object[] { eType };
}
@@ -219,18 +206,15 @@
public boolean hasChildren(final Object parent) {
if (parent instanceof EPackage) {
return true;
- }
- else if (parent instanceof EClass) {
+ } else if (parent instanceof EClass) {
return true;
- }
- else if (parent instanceof EDataType) {
+ } else if (parent instanceof EDataType) {
if (parent instanceof EEnum) {
return ((EEnum) parent).getELiterals().size() > 0;
}
return ((EDataType) parent).getETypeParameters().size() > 0;
- }
- else if (parent instanceof EEnum) {
+ } else if (parent instanceof EEnum) {
return ((EEnum) parent).getELiterals().size() > 0;
}
@@ -240,14 +224,11 @@
else if (parent instanceof SuperClassesListBuilder) {
return ((SuperClassesListBuilder) parent).getAllSuperClasses().size() > 0;
- }
- else if (parent instanceof SubClassesListBuilder) {
+ } else if (parent instanceof SubClassesListBuilder) {
return ((SubClassesListBuilder) parent).getAllSubClasses().size() > 0;
- }
- else if (parent instanceof EEnumLiteral) {
+ } else if (parent instanceof EEnumLiteral) {
return false;
- }
- else if (parent instanceof TypeElement) {
+ } else if (parent instanceof TypeElement) {
return true;
}
return true;
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/views/providers/ViewLabelProvider.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewLabelProvider.java
similarity index 74%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/views/providers/ViewLabelProvider.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewLabelProvider.java
index 2ce42f0..907a5cd 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/src/org/eclipse/app4mc/emfutils/metamodelviewer/views/providers/ViewLabelProvider.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/providers/ViewLabelProvider.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,15 +12,16 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.metamodelviewer.views.providers;
+
+package org.eclipse.app4mc.emf.metamodelviewer.views.providers;
import java.io.IOException;
import java.net.URL;
-import org.eclipse.app4mc.emfutils.metamodelviewer.base.Activator;
-import org.eclipse.app4mc.emfutils.metamodelviewer.utils.SubClassesListBuilder;
-import org.eclipse.app4mc.emfutils.metamodelviewer.utils.SuperClassesListBuilder;
-import org.eclipse.app4mc.emfutils.metamodelviewer.utils.TypeElement;
+import org.eclipse.app4mc.emf.metamodelviewer.base.Activator;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.SubClassesListBuilder;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.SuperClassesListBuilder;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.TypeElement;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
@@ -39,12 +40,11 @@
public class ViewLabelProvider extends LabelProvider {
-
private final Image classImage;
private final Image enumImage;
private final Image containmentImage;
private final Image superClassListImage;
- private final Image SubClassesListBuilderImage;
+ private final Image subClassListImage;
private final Image attributeImage;
private final Image attribute_referenceImage;
private final Image abstractClassImage;
@@ -57,7 +57,7 @@
this.enumImage = getImage("icons/enum_obj.png");
this.containmentImage = getImage("icons/attribute_containment.png");
this.superClassListImage = getImage("icons/super_co.gif");
- this.SubClassesListBuilderImage = getImage("icons/downward_co.gif");
+ this.subClassListImage = getImage("icons/downward_co.gif");
this.attributeImage = getImage("icons/attribute.png");
this.attribute_referenceImage = getImage("icons/attribute_reference.png");
this.abstractClassImage = getImage("icons/abstract_class_obj.png");
@@ -65,7 +65,6 @@
this.eTypeImage = getImage("icons/type_obj.gif");
}
-
private Image getImage(final String location) {
final URL entry = Activator.getDefault().getBundle().getEntry(location);
@@ -78,8 +77,7 @@
if (fileURL != null) {
return new Image(Display.getDefault(), new ImageData(fileURL.getFile()));
}
- }
- catch (final IOException e) {
+ } catch (final IOException e) {
e.printStackTrace();
}
@@ -87,26 +85,20 @@
return null;
}
-
@Override
public String getText(final Object child) {
if (child instanceof EPackage) {
return ((EPackage) child).getName();
- }
- else if (child instanceof EClass) {
+ } else if (child instanceof EClass) {
return ((EClass) child).getName();
- }
- else if (child instanceof EDataType) {
+ } else if (child instanceof EDataType) {
return ((EDataType) child).getName();
- }
- else if (child instanceof EEnum) {
+ } else if (child instanceof EEnum) {
return "Enum : " + ((EEnum) child).getName();
- }
- else if (child instanceof EEnumLiteral) {
+ } else if (child instanceof EEnumLiteral) {
return ((EEnumLiteral) child).getName();
- }
- else if (child instanceof EStructuralFeature) {
+ } else if (child instanceof EStructuralFeature) {
final EStructuralFeature eStFeature = (EStructuralFeature) child;
final int lowerBound = eStFeature.getLowerBound();
@@ -119,14 +111,11 @@
final String multiplicity = "[" + lowerBoundString + " " + upperBoundString + "]";
return eStFeature.getName() + " " + multiplicity + " " + eStFeature.getEType().getName();
- }
- else if (child instanceof SuperClassesListBuilder) {
- return "Super Classes";
- }
- else if (child instanceof SubClassesListBuilder) {
- return "All-Sub Classes";
- }
- else if (child instanceof TypeElement) {
+ } else if (child instanceof SuperClassesListBuilder) {
+ return "All Super Classes (flat)";
+ } else if (child instanceof SubClassesListBuilder) {
+ return "All Sub Classes (flat)";
+ } else if (child instanceof TypeElement) {
return "<--EType-->";
}
return child.toString();
@@ -137,28 +126,24 @@
String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
if (obj instanceof EPackage) {
imageKey = ISharedImages.IMG_OBJ_FOLDER;
- }
- else if (obj instanceof EStructuralFeature && obj instanceof EReference) {
+ } else if (obj instanceof EStructuralFeature && obj instanceof EReference) {
if (((EReference) obj).isContainment()) {
return this.containmentImage;
}
return this.attribute_referenceImage;
- }
- else if (obj instanceof EAttribute) {
+ } else if (obj instanceof EAttribute) {
return this.attributeImage;
- }
- else if (obj instanceof EDataType) {
+ } else if (obj instanceof EDataType) {
imageKey = ISharedImages.IMG_OBJ_ELEMENT;
if (obj instanceof EEnum) {
return this.enumImage;
}
- }
- else if (obj instanceof EClass) {
+ } else if (obj instanceof EClass) {
if (((EClass) obj).isAbstract() && ((EClass) obj).isInterface()) {
return this.interfaceImage;
}
@@ -167,18 +152,14 @@
}
return this.classImage;
- }
- else if (obj instanceof EEnum) {
+ } else if (obj instanceof EEnum) {
return this.enumImage;
- }
- else if (obj instanceof SuperClassesListBuilder) {
+ } else if (obj instanceof SuperClassesListBuilder) {
return this.superClassListImage;
- }
- else if (obj instanceof SubClassesListBuilder) {
+ } else if (obj instanceof SubClassesListBuilder) {
- return this.SubClassesListBuilderImage;
- }
- else if (obj instanceof TypeElement) {
+ return this.subClassListImage;
+ } else if (obj instanceof TypeElement) {
return this.eTypeImage;
}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.classpath b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.classpath
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.classpath
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.classpath
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/.gitignore b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.gitignore
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/.gitignore
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.gitignore
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/.project b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.project
similarity index 92%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/.project
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.project
index 5f0bcdd..c38f4fa 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/.project
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>org.eclipse.app4mc.emfutils.content.extractor</name>
+ <name>org.eclipse.app4mc.emf.viewer.plantuml</name>
<comment></comment>
<projects>
</projects>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.settings/org.eclipse.jdt.core.prefs b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.settings/org.eclipse.jdt.core.prefs
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/.settings/org.eclipse.jdt.core.prefs
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/.settings/org.eclipse.jdt.core.prefs
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/META-INF/MANIFEST.MF b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..63a221b
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/META-INF/MANIFEST.MF
@@ -0,0 +1,37 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: APP4MC EMF Viewer (PlantUML)
+Bundle-SymbolicName: org.eclipse.app4mc.emf.viewer.plantuml;singleton:=true
+Bundle-Version: 0.9.8.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.app4mc.emf.viewer.plantuml.Activator
+Bundle-Vendor: Eclipse APP4MC
+Require-Bundle: com.google.guava,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.xtext.xbase.lib,
+ org.eclipse.xtend.lib,
+ org.eclipse.xtend.lib.macro,
+ org.eclipse.ui,
+ org.eclipse.ui.browser,
+ org.eclipse.sphinx.emf,
+ org.eclipse.sphinx.emf.editors,
+ org.eclipse.sphinx.emf.editors.forms,
+ org.eclipse.e4.ui.model.workbench,
+ org.eclipse.e4.core.di,
+ org.eclipse.e4.core.contexts,
+ org.eclipse.e4.core.di.extensions,
+ org.eclipse.e4.ui.di,
+ org.eclipse.e4.ui.services,
+ org.eclipse.e4.ui.workbench,
+ org.eclipse.e4.core.services
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Import-Package: javax.annotation;version="1.2.0",
+ javax.inject;version="1.0.0",
+ net.sourceforge.plantuml;version="1.2019.0",
+ net.sourceforge.plantuml.core;version="1.2019.0",
+ net.sourceforge.plantuml.eclipse.utils,
+ org.slf4j;version="1.7.2"
+Automatic-Module-Name: org.eclipse.app4mc.emf.viewer.plantuml
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/about.html b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/about.html
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/about.html
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/about.html
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/build.properties b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/build.properties
new file mode 100644
index 0000000..4f03bd5
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/build.properties
@@ -0,0 +1,11 @@
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ icons/,\
+ epl-2.0.html,\
+ about.html,\
+ fragment.e4xmi
+src.includes = about.html,\
+ epl-2.0.html
+source.. = src/
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/epl-2.0.html b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/epl-2.0.html
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/epl-2.0.html
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/epl-2.0.html
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/fragment.e4xmi b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/fragment.e4xmi
new file mode 100644
index 0000000..eb733e8
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/fragment.e4xmi
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="ASCII"?>
+<fragment:ModelFragments xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/descriptor/basic" xmlns:commands="http://www.eclipse.org/ui/2010/UIModel/application/commands" xmlns:fragment="http://www.eclipse.org/ui/2010/UIModel/fragment" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmlns:ui="http://www.eclipse.org/ui/2010/UIModel/application/ui" xmi:id="_24JxkGmpEeqly_jY3FLnyw">
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_4M1skGmpEeqly_jY3FLnyw" featurename="descriptors" parentElementId="xpath:/">
+ <elements xsi:type="basic:PartDescriptor" xmi:id="_7EwU4GmpEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.views.DiagramView" label="Diagram View" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/sample.gif" category="APP4MC" closeable="true" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.views.DiagramView">
+ <toolbar xmi:id="_DIC14GmqEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.toolbar.0">
+ <children xsi:type="menu:DirectToolItem" xmi:id="_jgBp0GmqEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.directtoolitem.select" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/synced.png" tooltip="Link the selection in the editor with the current diagram type" type="Check" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.LinkWithEditorHandler"/>
+ </toolbar>
+ </elements>
+ </fragments>
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_gMvh4GmvEeqly_jY3FLnyw" featurename="commands" parentElementId="xpath:/">
+ <elements xsi:type="commands:Command" xmi:id="_hnm9YGmvEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.extracteclasshierarchy" commandName="Extract EClass Hierarchy" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Command" xmi:id="_1iuA8GmvEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.extracteobjectreferences" commandName="Extract EObject References" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Command" xmi:id="_P8RuoGmwEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.extracteclassallreferences" commandName="Extract EClass All References" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Command" xmi:id="_SVoLoGmwEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.extracteclasshierarchyandtheircontents" commandName="Extract EClass Hierarchy And Their Contents" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Command" xmi:id="_W4xmsGmwEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.extracteclassumlcontents" commandName="Extract EClass UML Contents" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Command" xmi:id="_Zw9UwGmwEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.fromreference-extracteclassumlcontents" commandName="From reference -> Extract EClass UML Contents" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Command" xmi:id="_dIkJwGmwEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.command.copycontentsandgeneratecsv" commandName="Copy Contents and Generate CSV" category="_qKzGcGmvEeqly_jY3FLnyw"/>
+ </fragments>
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_nfvOYGmvEeqly_jY3FLnyw" featurename="categories" parentElementId="xpath:/">
+ <elements xsi:type="commands:Category" xmi:id="_qKzGcGmvEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.category" name="Extract Eclass References"/>
+ </fragments>
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_bQFvwGmxEeqly_jY3FLnyw" featurename="handlers" parentElementId="xpath:/">
+ <elements xsi:type="commands:Handler" xmi:id="_ceh40GmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.0" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.EClassHierarchyHandler" command="_hnm9YGmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Handler" xmi:id="_kV_kUGmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.1" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.EObjectRefsHandler" command="_1iuA8GmvEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Handler" xmi:id="_qg0H0GmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.2" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.EClassAllReferencesHandler" command="_P8RuoGmwEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Handler" xmi:id="_uBWPUGmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.3" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.EClassContentsAndHierarchyHandler" command="_SVoLoGmwEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Handler" xmi:id="_ylP4UGmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.4" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.EClassContentsHandler" command="_W4xmsGmwEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Handler" xmi:id="_17314GmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.5" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.EClassContentsFromReferenceHandler" command="_Zw9UwGmwEeqly_jY3FLnyw"/>
+ <elements xsi:type="commands:Handler" xmi:id="_43st0GmxEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handler.6" contributionURI="bundleclass://org.eclipse.app4mc.emf.viewer.plantuml/org.eclipse.app4mc.emf.viewer.plantuml.handlers.CopyContentsHandler" command="_dIkJwGmwEeqly_jY3FLnyw"/>
+ </fragments>
+ <fragments xsi:type="fragment:StringModelFragment" xmi:id="_U-pKYGmyEeqly_jY3FLnyw" featurename="menuContributions" parentElementId="xpath:/">
+ <elements xsi:type="menu:MenuContribution" xmi:id="_WQga4GmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.menucontribution.0" positionInParent="after=additions" parentId="popup">
+ <children xsi:type="menu:Menu" xmi:id="_ddrMMGmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.menu" label="APP4MC EMF Utils" mnemonics="">
+ <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_n6-cEGmzEeqly_jY3FLnyw" coreExpressionId="org.eclipse.app4mc.emf.viewer.plantuml.definition.ecore"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_hJ60cGmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.eclasshierarchy" label="EClass Hierarchy" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/keygroups_obj.gif" mnemonics="" command="_hnm9YGmvEeqly_jY3FLnyw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_n74QcGmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.eobjectrefs" label="EObject Refs" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/sample.gif" command="_1iuA8GmvEeqly_jY3FLnyw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_tYaKkGmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.eclassallreferences" label="EClass All References" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/tag_blue_add.png" command="_P8RuoGmwEeqly_jY3FLnyw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_0rNCwGmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.eclasscontentshierarchy" label="EClass Contents + Hierarchy" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/elements_obj.gif" command="_SVoLoGmwEeqly_jY3FLnyw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_8Xoi8GmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.eclasscontents" label="EClass Contents" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/prop_ps.gif" command="_W4xmsGmwEeqly_jY3FLnyw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="__g6BAGmyEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.eclasscontentsfromreference" label="EClass Contents from Reference" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/drive_go.png" command="_Zw9UwGmwEeqly_jY3FLnyw"/>
+ <children xsi:type="menu:HandledMenuItem" xmi:id="_HvDuMGmzEeqly_jY3FLnyw" elementId="org.eclipse.app4mc.emf.viewer.plantuml.handledmenuitem.copycontentscommand" label="Copy Contents Command" iconURI="platform:/plugin/org.eclipse.app4mc.emf.viewer.plantuml/icons/keygroups_obj.gif" command="_dIkJwGmwEeqly_jY3FLnyw"/>
+ </children>
+ </elements>
+ </fragments>
+</fragment:ModelFragments>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/drive_go.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/drive_go.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/drive_go.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/drive_go.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/elements_obj.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/elements_obj.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/elements_obj.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/elements_obj.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/filenav_nav.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/filenav_nav.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/filenav_nav.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/filenav_nav.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/keygroups_obj.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/keygroups_obj.gif
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/keygroups_obj.gif
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/keygroups_obj.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/prop_ps.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/prop_ps.gif
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/prop_ps.gif
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/prop_ps.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/sample.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/sample.gif
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/sample.gif
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/sample.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/super_co.gif b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/super_co.gif
similarity index 100%
copy from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.metamodelviewer/icons/super_co.gif
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/super_co.gif
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/synced.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/synced.png
new file mode 100644
index 0000000..3e630fc
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/synced.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/tag_blue_add.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/tag_blue_add.png
similarity index 100%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/icons/tag_blue_add.png
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/tag_blue_add.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/targetinternal_obj.png b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/targetinternal_obj.png
new file mode 100644
index 0000000..9c483c1
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/icons/targetinternal_obj.png
Binary files differ
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/plugin.xml b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/plugin.xml
new file mode 100644
index 0000000..4c28402
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/plugin.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin>
+
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ class="org.eclipse.app4mc.emf.viewer.plantuml.preferences.AmaltheaGraphicalRepresentationPreferencePage"
+ id="org.eclipse.app4mc.emf.viewer.plantuml.preferences.AmaltheaPreferencePage"
+ name="AMALTHEA Graphical Representation">
+ </page>
+ </extension>
+ <extension
+ point="org.eclipse.core.runtime.preferences">
+ <initializer
+ class="org.eclipse.app4mc.emf.viewer.plantuml.preferences.PreferenceInitializer">
+ </initializer>
+ </extension>
+ <extension
+ point="org.eclipse.ui.perspectiveExtensions">
+ <perspectiveExtension
+ targetID="org.eclipse.jdt.ui.JavaPerspective">
+ <view
+ id="org.eclipse.app4mc.emf.viewer.plantuml.views.DiagramView"
+ ratio="0.5"
+ relationship="right"
+ relative="org.eclipse.ui.views.ProblemView">
+ </view>
+ </perspectiveExtension>
+ </extension>
+ <extension
+ id="org.eclipse.app4mc.emf.viewer.plantuml.fragment"
+ point="org.eclipse.e4.workbench.model">
+ <fragment
+ uri="fragment.e4xmi"
+ apply="always">
+ </fragment>
+ </extension>
+ <extension
+ point="org.eclipse.core.expressions.definitions">
+ <definition
+ id="org.eclipse.app4mc.emf.viewer.plantuml.definition.ecore">
+ <with
+ variable="activeMenuSelection">
+ <iterate>
+ <instanceof
+ value="org.eclipse.emf.ecore.EObject">
+ </instanceof>
+ </iterate>
+ </with>
+ </definition>
+ </extension>
+
+</plugin>
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/src/org/eclipse/app4mc/emfutils/content/extractor/Activator.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/Activator.java
similarity index 86%
copy from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/src/org/eclipse/app4mc/emfutils/content/extractor/Activator.java
copy to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/Activator.java
index c86b924..54ff0f8 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emfutils.content.extractor/src/org/eclipse/app4mc/emfutils/content/extractor/Activator.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/Activator.java
@@ -1,6 +1,6 @@
- /**
+/**
********************************************************************************
- * Copyright (c) 2017 - 2018 Robert Bosch GmbH.
+ * Copyright (c) 2017-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -12,7 +12,8 @@
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
-package org.eclipse.app4mc.emfutils.content.extractor;
+
+package org.eclipse.app4mc.emf.viewer.plantuml;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -23,7 +24,7 @@
public class Activator extends AbstractUIPlugin {
// The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.app4mc.emfutils.content.extractor"; //$NON-NLS-1$
+ public static final String PLUGIN_ID = "org.eclipse.app4mc.emf.viewer.plantuml"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/AbstractPlantUMLBuilder.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/AbstractPlantUMLBuilder.java
new file mode 100644
index 0000000..4ed3691
--- /dev/null
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.viewer.plantuml/src/org/eclipse/app4mc/emf/viewer/plantuml/builders/AbstractPlantUMLBuilder.java
@@ -0,0 +1,317 @@
+/**
+ ********************************************************************************
+ * 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.emf.viewer.plantuml.builders;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;