Bug 566684 - [Robotics] Integrate a dashboard facilitating the use of a design flow (ITP contribution)
- Initial addition of dashboard plugin
- Add to pom.xml
- Add to feature
Change-Id: I30415b67cad66211258756074f60c7a178b958e9
Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.classpath b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.classpath
new file mode 100644
index 0000000..eca7bdb
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.gitignore b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.project b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.project
new file mode 100644
index 0000000..8dcea2d
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.robotics.dashboard.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/META-INF/MANIFEST.MF b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..dcea221
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.robotics.dashboard.ui;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-Activator: org.eclipse.papyrus.robotics.dashboard.ui.activator.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.ui.forms,
+ org.eclipse.ui.workbench,
+ org.eclipse.core.resources,
+ org.eclipse.papyrus.robotics.wizards,
+ org.eclipse.papyrus.uml.diagram.wizards,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.navigator.resources,
+ org.eclipse.papyrus.robotics.ros2.reverse
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: org.eclipse.papyrus.robotics.dashboard.ui
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.papyrus.robotics.dashboard.ui.extrasections,
+ org.eclipse.papyrus.robotics.dashboard.ui.pages
+Import-Package: org.eclipse.core.expressions,
+ org.eclipse.papyrus.robotics.core.utils,
+ org.eclipse.papyrus.robotics.wizards,
+ org.eclipse.ui.internal.wizards.datatransfer,
+ org.eclipse.ui.wizards.datatransfer
+Bundle-Vendor: %providerName
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/build.properties b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/build.properties
new file mode 100644
index 0000000..b5f960f
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ icons/,\
+ plugin.properties,\
+ schema/
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/Code.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/Code.png
new file mode 100644
index 0000000..c2a96ea
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/Code.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/behabiour.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/behabiour.png
new file mode 100644
index 0000000..be3cb83
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/behabiour.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/fault.gif b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/fault.gif
new file mode 100644
index 0000000..2de6718
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/fault.gif
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/hazard.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/hazard.png
new file mode 100644
index 0000000..452b9a3
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/hazard.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_VV.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_VV.png
new file mode 100644
index 0000000..777b52b
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_VV.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_component.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_component.png
new file mode 100644
index 0000000..046284f
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_component.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_mision.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_mision.png
new file mode 100644
index 0000000..9d912b4
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_mision.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_mision.svg b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_mision.svg
new file mode 100644
index 0000000..547de03
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_mision.svg
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+ sodipodi:docname="robotics_mision.svg"
+ viewBox="0 0 320 280.53333"
+ height="280.53333"
+ width="320"
+ id="svg2"
+ version="1.1">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <sodipodi:namedview
+ inkscape:current-layer="g10"
+ inkscape:window-maximized="1"
+ inkscape:window-y="-8"
+ inkscape:window-x="-8"
+ inkscape:cy="50.547557"
+ inkscape:cx="-150.95533"
+ inkscape:zoom="0.70910507"
+ showgrid="false"
+ id="namedview4"
+ inkscape:window-height="1017"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff" />
+ <g
+ id="g10"
+ inkscape:label="Image"
+ inkscape:groupmode="layer">
+ <image
+ id="image12"
+ xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAWgBaAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/
+2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwM
+BwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
+DAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAEHASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
+AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
+FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk
+ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ
+ytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
+BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz
+UvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3
+eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna
+4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAoooo
+AKKKKACiiigAooooAKKKKACiiuf8Q+PrPRCYl/0m4XqiH5V+prKtWhSjzTdkB0FUb/xBZ6Wf39xF
+GfQtz+Vee6t461DVmZTN5MbfwR8VktIzV4lfPIp2pRv5v/IzdTseg3XxM0+I7YxcTe4XaP8Ax6qE
+3xYY/wCrsl+rS/8A1q4zcaSvOnm+Jls0vRE87Oqk+Kl6PuwWw+uT/WkX4qXy/ehtD/uhv/iq5ak3
+Csv7RxN787DmZ2dt8WGz++tPl9Y3roNG8Y2OukLDNtkb/lm42tXlm4UnmY+796uijnFeD9/3kPnZ
+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
+AUUUUAFFFFABRRRQAUUUUAf/2Q==
+"
+ preserveAspectRatio="none"
+ height="280.53333"
+ width="320" />
+ </g>
+</svg>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_system.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_system.png
new file mode 100644
index 0000000..6c19191
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/robotics_system.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/skills.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/skills.png
new file mode 100644
index 0000000..b0d86a0
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/skills.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/tree-16.png b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/tree-16.png
new file mode 100644
index 0000000..409abe8
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/icons/tree-16.png
Binary files differ
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/plugin.properties b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/plugin.properties
new file mode 100644
index 0000000..70cda35
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/plugin.properties
@@ -0,0 +1,13 @@
+#################################################################################
+# Copyright (c) 2020 TECNALIA
+# 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/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+##################################################################################
+
+pluginName = Dashboard UI (Incubation)
+providerName = Eclipse Modeling Project
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/plugin.xml b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/plugin.xml
new file mode 100644
index 0000000..9d1e77d
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/plugin.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension-point id="org.eclipse.papyrus.robotics.dashboard.ui.sections" name="Dashboard Sections" schema="schema/org.eclipse.papyrus.robotics.dashboard.ui.sections.exsd"/>
+ <extension
+ point="org.eclipse.ui.editors">
+ <editor
+ class="org.eclipse.papyrus.robotics.dashboard.ui.DashboardEditor"
+ default="false"
+ icon="platform:/plugin/org.eclipse.papyrus.robotics.diagrams/icons/robotics-16x16.png"
+ id="org.eclipse.papyrus.robotics.dashboard.ui.editor"
+ name="Dashboard">
+ </editor>
+ </extension>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ id="org.eclipse.papyrus.robotics.dashboard.ui.openDashboard"
+ name="Open Dashboard">
+ </command>
+ </extension>
+ <extension
+ point="org.eclipse.ui.handlers">
+ <handler
+ class="org.eclipse.papyrus.robotics.dashboard.ui.OpenHandler"
+ commandId="org.eclipse.papyrus.robotics.dashboard.ui.openDashboard">
+ </handler>
+ </extension>
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+ <toolbar
+ id="org.eclipse.papyrus.robotics.dashboard.ui.opendashboard">
+ <command
+ commandId="org.eclipse.papyrus.robotics.dashboard.ui.openDashboard"
+ icon="platform:/plugin/org.eclipse.papyrus.robotics.diagrams/icons/robotics-16x16.png"
+ id="org.eclipse.papyrus.robotics.dashboard.ui.toolbar.openDashboard"
+ label="Open Dashboard"
+ style="push">
+ </command>
+ </toolbar>
+ </menuContribution>
+ </extension>
+
+</plugin>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/pom.xml b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/pom.xml
new file mode 100644
index 0000000..0273b4b
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/pom.xml
@@ -0,0 +1,13 @@
+<?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>
+ <artifactId>org.eclipse.papyrus.robotics.customization</artifactId>
+ <groupId>org.eclipse.papyrus.robotics</groupId>
+ <version>0.7.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.robotics.dashboard.ui</artifactId>
+ <packaging>eclipse-plugin</packaging>
+ <description>This module contains the dashboard customizations</description>
+</project>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/schema/org.eclipse.papyrus.robotics.dashboard.ui.sections.exsd b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/schema/org.eclipse.papyrus.robotics.dashboard.ui.sections.exsd
new file mode 100644
index 0000000..132f595
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/schema/org.eclipse.papyrus.robotics.dashboard.ui.sections.exsd
@@ -0,0 +1,109 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrus.robotics.dashboard.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.papyrus.robotics.dashboard.ui" id="org.eclipse.papyrus.robotics.dashboard.ui.sections" name="Dashboard Sections"/>
+ </appinfo>
+ <documentation>
+ A way to add sections to existing dashboard pages
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="section" minOccurs="1" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="section">
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ This name is used for the title of the section
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.robotics.dashboard.ui.extrasections.IDashboardSection"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/DashboardEditor.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/DashboardEditor.java
new file mode 100644
index 0000000..2f25cf3
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/DashboardEditor.java
@@ -0,0 +1,246 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.papyrus.robotics.dashboard.ui.activator.Activator;
+import org.eclipse.papyrus.robotics.dashboard.ui.extrasections.ExtraSectionsHelper;
+import org.eclipse.papyrus.robotics.dashboard.ui.extrasections.IDashboardSection;
+import org.eclipse.papyrus.robotics.dashboard.ui.pages.CompIntegrationVVPage;
+import org.eclipse.papyrus.robotics.dashboard.ui.pages.ComponentDesignPage;
+import org.eclipse.papyrus.robotics.dashboard.ui.pages.MissionDefinitionPage;
+import org.eclipse.papyrus.robotics.dashboard.ui.pages.SystemIntegrationPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.editor.SharedHeaderFormEditor;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.osgi.framework.Bundle;
+
+/**
+ * Dashboard editor
+ */
+@SuppressWarnings("nls")
+public class DashboardEditor extends SharedHeaderFormEditor {
+
+ public static final String ID = "org.eclipse.papyrus.robotics.dashboard.ui.editor"; //$NON-NLS-1$
+
+ Map<String, Integer> pageIdToPageIndexMap = new HashMap<String, Integer>();
+
+ @Override
+ protected void addPages() {
+ createGlobalPage();
+ createPage1();
+ createPage2();
+ createPage3();
+ createPage4();
+
+ List<IDashboardSection> extraSections = ExtraSectionsHelper.getAllExtraDashboardSections();
+ for (IDashboardSection extraSection : extraSections) {
+ String pageID = extraSection.getExtendedPageID();
+ Integer index = pageIdToPageIndexMap.get(pageID);
+ if (index == null) {
+ System.err.println(String.format("Extra section for P4R Dashboard: %s not found", pageID));
+ continue;
+ }
+ ScrolledForm composite = (ScrolledForm) pages.get(index);
+ FormToolkit toolkit = new FormToolkit(composite.getDisplay());
+
+ Section section = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
+ td.colspan = 2;
+ section.setLayoutData(td);
+ section.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section.setText(extraSection.getName());
+ section.setDescription(extraSection.getDescription());
+ Composite sectionClient = toolkit.createComposite(section);
+ sectionClient.setLayout(new GridLayout());
+ extraSection.createComposite(sectionClient);
+ section.setClient(sectionClient);
+ }
+ }
+
+ private void createPage1() {
+ MissionDefinitionPage page = new MissionDefinitionPage();
+ int index = addPage(page.getPageBody(getContainer()));
+ setPageText(index, MissionDefinitionPage.ID);
+ pageIdToPageIndexMap.put(MissionDefinitionPage.ID, index);
+ }
+
+ private void createPage2() {
+ ComponentDesignPage page = new ComponentDesignPage();
+ int index = addPage(page.getPageBody(getContainer()));
+ setPageText(index, ComponentDesignPage.ID);
+ pageIdToPageIndexMap.put(ComponentDesignPage.ID, index);
+ }
+
+ private void createPage3() {
+ SystemIntegrationPage page = new SystemIntegrationPage();
+ int index = addPage(page.getPageBody(getContainer()));
+ setPageText(index, SystemIntegrationPage.ID);
+ pageIdToPageIndexMap.put(SystemIntegrationPage.ID, index);
+ }
+
+ private void createPage4() {
+ CompIntegrationVVPage page = new CompIntegrationVVPage();
+ int index = addPage(page.getPageBody(getContainer()));
+ setPageText(index, CompIntegrationVVPage.ID);
+ pageIdToPageIndexMap.put(CompIntegrationVVPage.ID, index);
+ }
+
+ private void createGlobalPage() {
+ FormToolkit toolkit = new FormToolkit(getContainer().getDisplay());
+ ScrolledForm composite = toolkit.createScrolledForm(getContainer());
+ composite.setText("Papyrus for Robotics Compositional Development Process");
+
+ TableWrapLayout layout = new TableWrapLayout();
+ layout.numColumns = 2;
+ composite.getBody().setLayout(layout);
+
+ // space
+ toolkit.createLabel(composite.getBody(), "");
+ toolkit.createLabel(composite.getBody(), "");
+
+ ImageHyperlink goTo1 = toolkit.createImageHyperlink(composite.getBody(), SWT.CENTER);
+ String path = "icons/robotics_mision.png";
+ Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+ URL url = FileLocator.find(bundle, new Path(path), null);
+ ImageDescriptor imageDesc = ImageDescriptor.createFromURL(url);
+ Image goTo1Image = imageDesc.createImage();
+
+ goTo1.setImage(goTo1Image);
+ goTo1.setText("Robot Mission Definition");
+ goTo1.setUnderlined(false);
+ goTo1.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ DashboardEditor.this.setActivePage(1);
+ }
+ });
+
+ toolkit.createLabel(composite.getBody(),
+ "Define the services and skills the robot should perform to execute a mission", SWT.WRAP);
+
+ // space
+ toolkit.createLabel(composite.getBody(), "");
+ toolkit.createLabel(composite.getBody(), "");
+
+ ImageHyperlink goTo2 = toolkit.createImageHyperlink(composite.getBody(), SWT.WRAP);
+ String path2 = "icons/robotics_component.png";
+ URL url2 = FileLocator.find(bundle, new Path(path2), null);
+ ImageDescriptor imageDesc2 = ImageDescriptor.createFromURL(url2);
+ Image goTo2Image = imageDesc2.createImage();
+ goTo2.setImage(goTo2Image);
+ goTo2.setText("Component Design");
+ goTo2.setUnderlined(false);
+ goTo2.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ DashboardEditor.this.setActivePage(2);
+ }
+ });
+
+ toolkit.createLabel(composite.getBody(),
+ "A component supplier (Tier 3) creates software components as units of composition that provide or require services (service-level) and contain functions. He/she models the component by using service definitions and functions. Implement a skill that lifts the abstraction of a component from the service level to the task level",
+ SWT.WRAP);
+
+ // space
+ toolkit.createLabel(composite.getBody(), "");
+ toolkit.createLabel(composite.getBody(), "");
+
+ ImageHyperlink goTo3 = toolkit.createImageHyperlink(composite.getBody(), SWT.WRAP);
+ String path3 = "icons/robotics_system.png";
+ URL url3 = FileLocator.find(bundle, new Path(path3), null);
+ ImageDescriptor imageDesc3 = ImageDescriptor.createFromURL(url3);
+ Image goTo3Image = imageDesc3.createImage();
+ // Image goTo3Image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+ goTo3.setImage(goTo3Image);
+ goTo3.setText("System integration");
+ goTo3.setUnderlined(false);
+ goTo3.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ DashboardEditor.this.setActivePage(3);
+ }
+ });
+
+ toolkit.createLabel(composite.getBody(),
+ "Define the scope of the system, define the system Architecture, elicit system assertion", SWT.WRAP);
+
+ // space
+ toolkit.createLabel(composite.getBody(), "");
+ toolkit.createLabel(composite.getBody(), "");
+
+ ImageHyperlink goTo4 = toolkit.createImageHyperlink(composite.getBody(), SWT.WRAP);
+ String path4 = "icons/robotics_VV.png";
+ URL url4 = FileLocator.find(bundle, new Path(path4), null);
+ ImageDescriptor imageDesc4 = ImageDescriptor.createFromURL(url4);
+ Image goTo4Image = imageDesc4.createImage();
+ // Image goTo4Image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
+ goTo4.setImage(goTo4Image);
+ goTo4.setText("Component Integration and V&V");
+ goTo4.setUnderlined(false);
+ goTo4.addHyperlinkListener(new HyperlinkAdapter() {
+ public void linkActivated(HyperlinkEvent e) {
+ DashboardEditor.this.setActivePage(4);
+ }
+ });
+
+ toolkit.createLabel(composite.getBody(), "Validate component Contracts and execute Safety/Security Analyses",
+ SWT.WRAP);
+
+ int index = addPage(composite);
+ setPageText(index, "Global View");
+ setPageImage(index, PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ETOOL_HOME_NAV));
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+
+ }
+
+ @Override
+ public void doSaveAs() {
+
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return false;
+ }
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/OpenHandler.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/OpenHandler.java
new file mode 100644
index 0000000..97cf26c
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/OpenHandler.java
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Open Handler
+ *
+ * @author jabier.martinez
+ */
+public class OpenHandler extends AbstractHandler {
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IWorkbenchWindow ww = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ IStorage storage = new NullStorage();
+ IEditorInput input = new NullEditorInput(storage);
+ try {
+ ww.getActivePage().openEditor(input, DashboardEditor.ID);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * A fake storage and input editor to open the editor in read only
+ */
+ class NullStorage implements IStorage {
+
+ public InputStream getContents() throws CoreException {
+ return new ByteArrayInputStream("".getBytes()); //$NON-NLS-1$
+ }
+
+ public IPath getFullPath() {
+ return null;
+ }
+
+ public <T> T getAdapter(Class<T> adapter) {
+ return null;
+ }
+
+ public String getName() {
+ return null;
+ }
+
+ public boolean isReadOnly() {
+ return true;
+ }
+ }
+
+ class NullEditorInput implements IEditorInput {
+ private IStorage storage;
+
+ NullEditorInput(IStorage storage) {
+ this.storage = storage;
+ }
+
+ public boolean exists() {
+ return true;
+ }
+
+ public ImageDescriptor getImageDescriptor() {
+ return null;
+ }
+
+ public String getName() {
+ return storage.getName();
+ }
+
+ public IPersistableElement getPersistable() {
+ return null;
+ }
+
+ public IStorage getStorage() {
+ return storage;
+ }
+
+ public String getToolTipText() {
+ return null;
+ }
+
+ public <T> T getAdapter(Class<T> adapter) {
+ return null;
+ }
+
+ }
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/activator/Activator.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/activator/Activator.java
new file mode 100644
index 0000000..e467455
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/activator/Activator.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.activator;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.robotics.dashboard.ui"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/extrasections/ExtraSectionsHelper.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/extrasections/ExtraSectionsHelper.java
new file mode 100644
index 0000000..ad144e2
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/extrasections/ExtraSectionsHelper.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.extrasections;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+
+public class ExtraSectionsHelper {
+
+ public static final String SECTIONS_EXTENSIONPOINT = "org.eclipse.papyrus.robotics.dashboard.ui.sections"; //$NON-NLS-1$
+
+ public static List<IDashboardSection> getAllExtraDashboardSections() {
+ List<IDashboardSection> extraSections = new ArrayList<IDashboardSection>();
+ IConfigurationElement[] extensionPoints = Platform.getExtensionRegistry()
+ .getConfigurationElementsFor(SECTIONS_EXTENSIONPOINT);
+ for (IConfigurationElement extensionPoint : extensionPoints) {
+ try {
+ extraSections.add((IDashboardSection) extensionPoint.createExecutableExtension("class")); //$NON-NLS-1$
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+ return extraSections;
+ }
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/extrasections/IDashboardSection.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/extrasections/IDashboardSection.java
new file mode 100644
index 0000000..4e5ca39
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/extrasections/IDashboardSection.java
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.extrasections;
+
+import org.eclipse.swt.widgets.Composite;
+
+public interface IDashboardSection {
+
+ /**
+ * To be shown in the section title
+ *
+ * @return name
+ */
+ public String getName();
+
+ /**
+ * To be shown in the section description
+ *
+ * @return description
+ */
+ public String getDescription();
+
+ /**
+ * The ID of the page that we want to extend
+ *
+ * @return page id
+ */
+ public String getExtendedPageID();
+
+ /**
+ * This is to create the buttons or the widgets you may want to add. Example:
+ * FormToolkit toolkit = new FormToolkit(container.getDisplay()); ImageHyperlink
+ * i = toolkit.createImageHyperlink(container, SWT.WRAP);
+ * i.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD));
+ * i.setText("New action");
+ *
+ * @param container
+ */
+ public void createComposite(Composite container);
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/CompIntegrationVVPage.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/CompIntegrationVVPage.java
new file mode 100644
index 0000000..893f19b
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/CompIntegrationVVPage.java
@@ -0,0 +1,110 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation
+ * Alejandra Ruiz, Tecnalia - provide content and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.pages;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.papyrus.robotics.dashboard.ui.activator.Activator;
+import org.eclipse.papyrus.robotics.wizards.WizardConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.osgi.framework.Bundle;
+
+@SuppressWarnings("nls")
+public class CompIntegrationVVPage {
+
+ public static final String ID = "Component Integration and V&V";
+
+ public ScrolledForm getPageBody(Composite container) {
+ FormToolkit toolkit = new FormToolkit(container.getDisplay());
+ ScrolledForm composite = toolkit.createScrolledForm(container);
+ composite.setText("Papyrus4Robotics Compositional Development Process");
+
+ String path_vv = "icons/robotics_VV.png";
+ Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+ URL url_vv = FileLocator.find(bundle, new Path(path_vv), null);
+ ImageDescriptor imageDesc_vv = ImageDescriptor.createFromURL(url_vv);
+ Image vvImage = imageDesc_vv.createImage();
+ composite.setImage(vvImage);
+
+ TableWrapLayout layout = new TableWrapLayout();
+ layout.numColumns = 2;
+ composite.getBody().setLayout(layout);
+
+ toolkit.createLabel(composite.getBody(), ID);
+ toolkit.createLabel(composite.getBody(), "");
+
+//Section eITUS
+ Section section2 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td2 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td2.colspan = 2;
+ section2.setLayoutData(td2);
+ section2.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section2.setText("Component�s nominal and faulty behaviour definition");
+ section2.setDescription("The safety engineer performs a safety assessment");
+ Composite sectionClient2 = toolkit.createComposite(section2);
+ sectionClient2.setLayout(new GridLayout());
+
+ URL urlHARA = FileLocator.find(bundle, new Path("icons/hazard.png"), null);
+ ImageDescriptor imageDescHARA = ImageDescriptor.createFromURL(urlHARA);
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient2, "Create a new Task-Based HARA project",
+ imageDescHARA.createImage(), WizardConstants.TASKBASED_HARA_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient2, "Create a new Task-Based HARA model",
+ imageDescHARA.createImage(), WizardConstants.TASKBASED_HARA_VIEWPOINT, false);
+
+ ImageHyperlink is2_2 = toolkit.createImageHyperlink(sectionClient2, SWT.WRAP);
+ URL urlFault = FileLocator.find(bundle, new Path("icons/fault.gif"), null);
+ ImageDescriptor imageDescFault = ImageDescriptor.createFromURL(urlFault);
+ is2_2.setImage(imageDescFault.createImage());
+ is2_2.setText("Fault Injection experiments definition (eITUS)");
+ is2_2.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ public void linkActivated(final HyperlinkEvent e) {
+ MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Fault Injection",
+ "You can create fault injection experiments using the model explorer or the diagrams doing a right-click in the model elements. You will see a Fault Injection menu with the available actions.");
+ }
+ });
+
+ section2.setClient(sectionClient2);
+
+ return composite;
+ }
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/ComponentDesignPage.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/ComponentDesignPage.java
new file mode 100644
index 0000000..4931c44
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/ComponentDesignPage.java
@@ -0,0 +1,218 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Angel Lopez, Tecnalia - Initial creation
+ * Jabier Martinez, Tecnalia - Initial creation
+ * Alejandra Ruiz, Tecnalia - provide content and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.pages;
+
+import java.net.URL;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.papyrus.robotics.dashboard.ui.activator.Activator;
+import org.eclipse.papyrus.robotics.ros2.reverse.fromfile.ReverseNodeFromSource;
+import org.eclipse.papyrus.robotics.wizards.WizardConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.eclipse.ui.model.BaseWorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+import org.osgi.framework.Bundle;
+
+@SuppressWarnings("nls")
+public class ComponentDesignPage {
+
+ public static final String ID = "Component Design";
+
+ public ScrolledForm getPageBody(Composite container) {
+ FormToolkit toolkit = new FormToolkit(container.getDisplay());
+ ScrolledForm composite = toolkit.createScrolledForm(container);
+ composite.setText("Papyrus4Robotics Compositional Development Process");
+
+ String path_mision = "icons/robotics_component.png";
+ Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+ URL url_comp = FileLocator.find(bundle, new Path(path_mision), null);
+ ImageDescriptor imageDescComp = ImageDescriptor.createFromURL(url_comp);
+ Image compImage = imageDescComp.createImage();
+ composite.setImage(compImage);
+
+ TableWrapLayout layout = new TableWrapLayout();
+ layout.numColumns = 2;
+ composite.getBody().setLayout(layout);
+
+ toolkit.createLabel(composite.getBody(), ID);
+ toolkit.createLabel(composite.getBody(), "");
+
+ // Section component creation
+ Section section1 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
+ td.colspan = 2;
+ section1.setLayoutData(td);
+ section1.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section1.setText("Component Creation");
+ section1.setDescription(
+ "A component supplier creates software components to offer them as units of composition that provide or require services (service-level) and contain functions.");
+ Composite sectionClient = toolkit.createComposite(section1);
+ sectionClient.setLayout(new GridLayout());
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient, "Create a new component definition project",
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD),
+ WizardConstants.COMPONENT_DEVELOPMENT_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient, "Create a new component definition model",
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD),
+ WizardConstants.COMPONENT_DEVELOPMENT_VIEWPOINT, false);
+
+ ImageHyperlink i3 = toolkit.createImageHyperlink(sectionClient, SWT.WRAP);
+ URL urlCode = FileLocator.find(bundle, new Path("icons/Code.png"), null);
+ ImageDescriptor imageDescCode = ImageDescriptor.createFromURL(urlCode);
+ i3.setImage(imageDescCode.createImage());
+ i3.setText("Reverse engineering a component from a C code");
+
+ i3.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ public void linkActivated(final HyperlinkEvent e) {
+
+ ElementTreeSelectionDialog dialogOpenComponent = new ElementTreeSelectionDialog(
+ Display.getCurrent().getActiveShell(), new WorkbenchLabelProvider(),
+ new BaseWorkbenchContentProvider());
+ dialogOpenComponent.addFilter(new ModelExtensionFilter("cpp"));
+ dialogOpenComponent.setTitle("Code origin selection");
+ dialogOpenComponent.setMessage("Select the C++ file from the tree:");
+ dialogOpenComponent.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ if (dialogOpenComponent.open() == Window.OK) {
+ IFile file = (IFile) dialogOpenComponent.getFirstResult();
+ Job job = new Job("Reverse node from file") { //$NON-NLS-1$
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ ReverseNodeFromSource reverseFromSource =
+ new ReverseNodeFromSource(file);
+ reverseFromSource.reverseNode(monitor);
+ return Status.OK_STATUS;
+ }
+ };
+ job.schedule();
+ }
+ }
+ });
+
+ ImageHyperlink i4 = toolkit.createImageHyperlink(sectionClient, SWT.WRAP);
+ i4.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ADD));
+ i4.setText("Import a component project");
+
+ i4.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ public void linkActivated(final HyperlinkEvent e) {
+ String id = "org.eclipse.ui.wizards.import.ExternalProject";
+ IWizardDescriptor descriptor = PlatformUI.getWorkbench().getImportWizardRegistry().findWizard(id);
+ IWizard wizard;
+ try {
+ wizard = descriptor.createWizard();
+ WizardDialog wd = new WizardDialog(Display.getCurrent().getActiveShell(), wizard);
+ wd.setTitle(wizard.getWindowTitle());
+ wd.open();
+ } catch (CoreException e1) {
+ e1.printStackTrace();
+ }
+ }
+ });
+ section1.setClient(sectionClient);
+
+////Section Specify a component
+ Section section2 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td2 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td2.colspan = 2;
+ section2.setLayoutData(td2);
+ section2.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section2.setText("Specify a Component");
+ section2.setDescription(
+ "The component supplier models the component by using existing service definitions and functions. He/she therefore uses models from the roles service designer and function developer using the component development view.");
+ Composite section2Client = toolkit.createComposite(section2);
+ section2Client.setLayout(new GridLayout());
+
+ Image editCompImage = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD);
+ P4RProjectModelHyperlink.open(toolkit, section2Client, "Edit an existing Component model", editCompImage,
+ "compdef.di");
+
+ P4RProjectModelHyperlink.open(toolkit, section2Client, "Show available services (Show a service list)", editCompImage,
+ "servicedef");
+ section2.setClient(section2Client);
+
+// Section Component Usage
+ Section section3 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td3 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td3.colspan = 2;
+ section3.setLayoutData(td3);
+ section3.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section3.setText("Services modeling");
+ section3.setDescription(
+ "The service designer specified a service which consists of service-properties and a communication-pattern-usage. The communication-pattern-usage selects a certain Communication Pattern with a pattern-specific selection of according number of communicated data-structures");
+ Composite section3Client = toolkit.createComposite(section3);
+ section3Client.setLayout(new GridLayout());
+
+ String path3 = "icons/tree-16.png";
+ URL url3 = FileLocator.find(bundle, new Path(path3), null);
+ ImageDescriptor imageDesc3 = ImageDescriptor.createFromURL(url3);
+ Image image3 = imageDesc3.createImage();
+ P4RProjectModelHyperlink.create(toolkit, section3Client, "Service definition project creation", image3,
+ WizardConstants.COMPONENT_DEVELOPMENT_VIEWPOINT, true);
+
+ section3.setClient(section3Client);
+
+ return composite;
+ }
+
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/MissionDefinitionPage.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/MissionDefinitionPage.java
new file mode 100644
index 0000000..dae02af
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/MissionDefinitionPage.java
@@ -0,0 +1,180 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation
+ * Alejandra Ruiz, Tecnalia - provide content and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.pages;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.papyrus.robotics.dashboard.ui.activator.Activator;
+import org.eclipse.papyrus.robotics.wizards.WizardConstants;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.osgi.framework.Bundle;
+
+@SuppressWarnings("nls")
+public class MissionDefinitionPage {
+
+ public static final String ID = "Robot Mission Definition";
+
+ public ScrolledForm getPageBody(Composite container) {
+ FormToolkit toolkit = new FormToolkit(container.getDisplay());
+ ScrolledForm composite = toolkit.createScrolledForm(container);
+ composite.setText("Papyrus4Robotics Compositional Development Process");
+
+ String path_mision = "icons/robotics_mision.png";
+ Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+ URL url_mision = FileLocator.find(bundle, new Path(path_mision), null);
+ ImageDescriptor imageDescMision = ImageDescriptor.createFromURL(url_mision);
+ Image misionImage = imageDescMision.createImage();
+ composite.setImage(misionImage);
+
+ TableWrapLayout layout = new TableWrapLayout();
+ layout.numColumns = 2;
+ composite.getBody().setLayout(layout);
+
+ toolkit.createLabel(composite.getBody(), ID);
+ toolkit.createLabel(composite.getBody(), "");
+
+ Section section1 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
+ td.colspan = 2;
+ section1.setLayoutData(td);
+ section1.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section1.setText("Skill Definition");
+ section1.setDescription(
+ "The Skill designer (a domain expert) is able to define skill definitions modelling the interface of skills on tier 2, not yet deciding how a skill is realized. As a result, the skill definition is any component that realizes it.");
+ Composite sectionClient = toolkit.createComposite(section1);
+ sectionClient.setLayout(new GridLayout());
+
+ ImageDescriptor imageDescSkill = ImageDescriptor
+ .createFromURL(FileLocator.find(bundle, new Path("icons/skills.png"), null));
+ Image skillImage = imageDescSkill.createImage();
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient, "Create a new skills definition project", skillImage,
+ WizardConstants.BEHAVIOR_DESIGN_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient, "Create a new skills definition model", skillImage,
+ WizardConstants.BEHAVIOR_DESIGN_VIEWPOINT, false);
+
+ section1.setClient(sectionClient);
+
+ Section section2 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td2 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td2.colspan = 2;
+ section2.setLayoutData(td2);
+ section2.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section2.setText("Behaviour Definition");
+ section2.setDescription(
+ "A behaviour tree is capable of modelling task-plots of a robot. Task-plots define sequences of tasks required to achieve certain goals at run-time.");
+ Composite section2Client = toolkit.createComposite(section2);
+ section2Client.setLayout(new GridLayout());
+
+ ImageDescriptor imageDescBehaviour = ImageDescriptor
+ .createFromURL(FileLocator.find(bundle, new Path("icons/tree-16.png"), null));
+ Image behaviourImage = imageDescBehaviour.createImage();
+
+ P4RProjectModelHyperlink.create(toolkit, section2Client, "Create a new behaviour tree project", behaviourImage,
+ WizardConstants.BEHAVIOR_TREE_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, section2Client, "Create a new behaviour tree model", behaviourImage,
+ WizardConstants.BEHAVIOR_TREE_VIEWPOINT, false);
+
+ section2.setClient(section2Client);
+
+ // Services modeling
+ Section section3 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td3 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td3.colspan = 2;
+ section3.setLayoutData(td3);
+ section3.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section3.setText("Services modeling");
+ section3.setDescription(
+ "The service designer defines a Service which consists of service-properties and a communication-pattern-usage. The communication-pattern-usage selects a certain Communication Pattern with a pattern-specific selection of according number of communicated data-structures");
+ Composite section3Client = toolkit.createComposite(section3);
+ section3Client.setLayout(new GridLayout());
+
+ String path3 = "icons/tree-16.png";
+ URL url3 = FileLocator.find(bundle, new Path(path3), null);
+ ImageDescriptor imageDesc3 = ImageDescriptor.createFromURL(url3);
+ Image image3 = imageDesc3.createImage();
+
+ P4RProjectModelHyperlink.create(toolkit, section3Client, "Create a new services definition project", image3,
+ WizardConstants.SERVICE_DESIGN_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, section3Client, "Create a new services definition model", image3,
+ WizardConstants.SERVICE_DESIGN_VIEWPOINT, false);
+
+ section3.setClient(section3Client);
+
+ // Risk Assessment
+ Section section4 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td4 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td4.colspan = 2;
+ section4.setLayoutData(td4);
+ section4.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section4.setText("Risk Assessment");
+ section4.setDescription("The safety engineer performs a risk assessment");
+ Composite section4Client = toolkit.createComposite(section4);
+ section4Client.setLayout(new GridLayout());
+
+ String path4 = "icons/hazard.png";
+ URL url4 = FileLocator.find(bundle, new Path(path4), null);
+ ImageDescriptor imageDesc4 = ImageDescriptor.createFromURL(url4);
+ Image image4 = imageDesc4.createImage();
+
+ P4RProjectModelHyperlink.create(toolkit, section4Client, "Create a new Task-Based HARA project", image4,
+ WizardConstants.TASKBASED_HARA_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, section4Client, "Create a new Task-Based HARA model", image4,
+ WizardConstants.TASKBASED_HARA_VIEWPOINT, false);
+
+ section4.setClient(section4Client);
+
+ return composite;
+ }
+
+}
+
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/ModelExtensionFilter.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/ModelExtensionFilter.java
new file mode 100644
index 0000000..8cdd333
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/ModelExtensionFilter.java
@@ -0,0 +1,72 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Alejandra Ruiz, Tecnalia - Initial implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+@SuppressWarnings("nls")
+public class ModelExtensionFilter extends ViewerFilter {
+
+ private List<String> fTargetExtension;
+
+ public ModelExtensionFilter(String targetExtension) {
+ fTargetExtension= new ArrayList<String>();
+ fTargetExtension.add(targetExtension);
+ }
+ public ModelExtensionFilter(List<String> targetExtension) {
+ fTargetExtension= new ArrayList<String>();
+ fTargetExtension.addAll(targetExtension);
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parent, Object element) {
+ if (element instanceof IFile) {
+// return ((IFile)element).getName().toLowerCase().endsWith("." + fTargetExtension);
+ for (String extension: fTargetExtension) {
+ if (((IFile)element).getName().toLowerCase().contains("."+ extension)){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ if (element instanceof IProject && !((IProject)element).isOpen())
+ return false;
+
+ if (element instanceof IContainer) { // i.e. IProject, IFolder
+ try {
+ IResource[] resources = ((IContainer)element).members();
+ for (IResource resource : resources) {
+ if (select(viewer, parent, resource))
+ return true;
+ }
+ } catch (CoreException e) {
+ // Ignore
+ }
+ }
+
+ return false;
+ }
+
+
+ }
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/P4RProjectModelHyperlink.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/P4RProjectModelHyperlink.java
new file mode 100644
index 0000000..8a974b9
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/P4RProjectModelHyperlink.java
@@ -0,0 +1,170 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation
+ * Alejandra Ruiz, Tecnalia - provide content and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.pages;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.IWizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.papyrus.robotics.wizards.wizards.NewRoboticsModelWizard;
+import org.eclipse.papyrus.robotics.wizards.wizards.NewRoboticsProjectWizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.model.BaseWorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+
+@SuppressWarnings("nls")
+public class P4RProjectModelHyperlink {
+
+ /**
+ * Create hyperlink for the creation of P4R projects or models
+ *
+ * @param toolkit
+ * @param sectionClient
+ * @param wizardConstant
+ * @param isProject
+ * true for project creation, false for model creation
+ */
+ public static void create(FormToolkit toolkit, Composite sectionClient, String text, Image image,
+ String wizardConstant, boolean isProject) {
+ ImageHyperlink i = toolkit.createImageHyperlink(sectionClient, SWT.WRAP);
+ i.setImage(image);
+ i.setText(text);
+ i.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ public void linkActivated(final HyperlinkEvent e) {
+ String id = null;
+ if (isProject) {
+ id = NewRoboticsProjectWizard.WIZARD_ID;
+ } else {
+ id = NewRoboticsModelWizard.WIZARD_ID;
+ }
+ IWizardDescriptor descriptor = PlatformUI.getWorkbench().getNewWizardRegistry().findWizard(id);
+ IWizard wizard;
+ try {
+ wizard = descriptor.createWizard();
+ NewRoboticsModelWizard wi = ((NewRoboticsModelWizard) wizard);
+ IWorkbench vWorkbench = PlatformUI.getWorkbench();
+ wi.init(vWorkbench, StructuredSelection.EMPTY);
+ WizardDialog wd = new WizardDialog(Display.getCurrent().getActiveShell(), wizard);
+ wd.setTitle(wizard.getWindowTitle());
+ wd.create();
+ wi.getSelectViewPointPage().setSelectedID(wizardConstant);
+ wd.showPage(wd.getCurrentPage().getNextPage());
+ wd.open();
+ } catch (CoreException e1) {
+ e1.printStackTrace();
+ }
+ }
+ });
+
+ }
+
+ /**
+ * Create hyperlink for opening specific P4R projects or models
+ *
+ * @param toolkit
+ * @param sectionClient
+ */
+ public static void open(FormToolkit toolkit, Composite sectionClient, String text, Image image,
+ String fileExtensionConstant) {
+ ImageHyperlink i = toolkit.createImageHyperlink(sectionClient, SWT.WRAP);
+ i.setImage(image);
+ i.setText(text);
+ i.addHyperlinkListener(new HyperlinkAdapter() {
+ @Override
+ public void linkActivated(final HyperlinkEvent e) {
+
+ ElementTreeSelectionDialog dialogOpenComponent = new ElementTreeSelectionDialog(
+ Display.getCurrent().getActiveShell(), new WorkbenchLabelProvider(),
+ new BaseWorkbenchContentProvider());
+ dialogOpenComponent.addFilter(new ModelExtensionFilter(fileExtensionConstant));
+ dialogOpenComponent.setTitle("Model Selection");
+ dialogOpenComponent.setMessage("Select the element from the tree:");
+ dialogOpenComponent.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ if (dialogOpenComponent.open() == Window.OK) {
+ IFile file = (IFile) dialogOpenComponent.getFirstResult();
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry()
+ .getDefaultEditor(file.getName());
+ try {
+ page.openEditor(new FileEditorInput(file), desc.getId());
+ } catch (PartInitException e1) {
+ e1.printStackTrace();
+ }
+
+ }
+ }
+ });
+ }
+
+ /**
+ * Create hyperlink for opening specific P4R projects or models
+ *
+ * @param toolkit
+ * @param sectionClient
+ */
+ public static void openAndShowMessage(FormToolkit toolkit, Composite sectionClient, String text, Image image,
+ String FileExtensionConstant, String msg_text) {
+ ImageHyperlink i = toolkit.createImageHyperlink(sectionClient, SWT.WRAP);
+ i.setImage(image);
+ i.setText(text);
+ i.addHyperlinkListener(new HyperlinkAdapter() {
+
+ @Override
+ public void linkActivated(final HyperlinkEvent e) {
+
+ ElementTreeSelectionDialog dialogOpenComponent = new ElementTreeSelectionDialog(
+ Display.getCurrent().getActiveShell(), new WorkbenchLabelProvider(),
+ new BaseWorkbenchContentProvider());
+ dialogOpenComponent.addFilter(new ModelExtensionFilter(FileExtensionConstant));
+ dialogOpenComponent.setTitle("Model Selection");
+ dialogOpenComponent.setMessage("Select the element from the tree:");
+ dialogOpenComponent.setInput(ResourcesPlugin.getWorkspace().getRoot());
+ if (dialogOpenComponent.open() == Window.OK) {
+ IFile file = (IFile) dialogOpenComponent.getFirstResult();
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry()
+ .getDefaultEditor(file.getName());
+ MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Info", msg_text);
+ try {
+ page.openEditor(new FileEditorInput(file), desc.getId());
+ } catch (PartInitException e1) {
+ e1.printStackTrace();
+ }
+
+ }
+ }
+ });
+ }
+}
diff --git a/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/SystemIntegrationPage.java b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/SystemIntegrationPage.java
new file mode 100644
index 0000000..2cc26aa
--- /dev/null
+++ b/plugins/customization/org.eclipse.papyrus.robotics.dashboard.ui/src/org/eclipse/papyrus/robotics/dashboard/ui/pages/SystemIntegrationPage.java
@@ -0,0 +1,152 @@
+/*****************************************************************************
+ * Copyright (c) 2020 TECNALIA.
+ *
+ * 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:
+ * Jabier Martinez, Tecnalia - Initial creation
+ * Alejandra Ruiz, Tecnalia - provide content and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.robotics.dashboard.ui.pages;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.papyrus.robotics.dashboard.ui.activator.Activator;
+import org.eclipse.papyrus.robotics.wizards.WizardConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+import org.eclipse.ui.forms.widgets.TableWrapData;
+import org.eclipse.ui.forms.widgets.TableWrapLayout;
+import org.osgi.framework.Bundle;
+
+@SuppressWarnings("nls")
+public class SystemIntegrationPage {
+
+ public static final String ID = "System Integration";
+
+ public ScrolledForm getPageBody(Composite container) {
+ FormToolkit toolkit = new FormToolkit(container.getDisplay());
+ ScrolledForm composite = toolkit.createScrolledForm(container);
+ composite.setText("Papyrus4Robotics Compositional Development Process");
+
+ String path = "icons/robotics_system.png";
+ Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+ URL url = FileLocator.find(bundle, new Path(path), null);
+ ImageDescriptor imageDesc = ImageDescriptor.createFromURL(url);
+ Image systemImage = imageDesc.createImage();
+ composite.setImage(systemImage);
+
+ TableWrapLayout layout = new TableWrapLayout();
+ layout.numColumns = 2;
+ composite.getBody().setLayout(layout);
+
+// toolkit.createLabel(composite.getBody(), "System Integration");
+ toolkit.createLabel(composite.getBody(), ID);
+ toolkit.createLabel(composite.getBody(), "");
+
+
+//Section System Creation
+ Section section1 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
+ td.colspan = 2;
+ section1.setLayoutData(td);
+ section1.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section1.setText("System Creation");
+ section1.setDescription(
+ "The system builder puts together systems from building blocks (i.e. software components).");
+ Composite sectionClient = toolkit.createComposite(section1);
+ sectionClient.setLayout(new GridLayout());
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient, "Create a new system definition project",
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD),
+ WizardConstants.SYSTEM_CONFIG_VIEWPOINT, true);
+
+ P4RProjectModelHyperlink.create(toolkit, sectionClient, "Create a new system definition model",
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD),
+ WizardConstants.SYSTEM_CONFIG_VIEWPOINT, false);
+
+
+ section1.setClient(sectionClient);
+// Section Specify system
+ Section section2 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td2 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td2.colspan = 2;
+ section2.setLayoutData(td2);
+ section2.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section2.setText("Specify System");
+ section2.setDescription(
+ "The system builder selects components (provided by component suppliers) from the ecosystem that performs the needed services. Matchmaking must be made on the basis of offered services and on other properties, e.g. the required accuracy.");
+ Composite sectionClient2 = toolkit.createComposite(section2);
+ sectionClient2.setLayout(new GridLayout());
+
+ P4RProjectModelHyperlink.open(toolkit, sectionClient2, "Show available components",
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD),
+ "compdef.di");
+
+ P4RProjectModelHyperlink.open(toolkit, sectionClient2, "Edit an existing system model",
+ PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD),
+ "system");
+
+ section2.setClient(sectionClient2);
+
+//Here it should go the assertions but we might use the extension point
+
+//Section System usage
+ Section section3 = toolkit.createSection(composite.getBody(),
+ Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
+ TableWrapData td3 = new TableWrapData(TableWrapData.FILL_GRAB);
+ td3.colspan = 2;
+ section3.setLayoutData(td3);
+ section3.addExpansionListener(new ExpansionAdapter() {
+ public void expansionStateChanged(ExpansionEvent e) {
+ composite.reflow(true);
+ }
+ });
+ section3.setText("System Usage");
+ section3.setDescription(
+ "The system builder selects to use the system.");
+ Composite sectionClient3 = toolkit.createComposite(section3);
+ sectionClient3.setLayout(new GridLayout());
+
+ ImageHyperlink is3_1 = toolkit.createImageHyperlink(sectionClient3, SWT.WRAP);
+ Image imageCode = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_NEW_WIZARD);
+ is3_1.setText("Code generation");
+
+ P4RProjectModelHyperlink.openAndShowMessage(toolkit, sectionClient3, "The programmer from the system integrator selects to use the system.",
+ imageCode, ".system", "Right click on the system you want to generade code from, select Robotics menu and then select Generate ROS2 code");
+
+
+ section3.setClient(sectionClient3);
+ return composite;
+ }
+
+}
diff --git a/plugins/customization/pom.xml b/plugins/customization/pom.xml
index 8a6b564..490f3e2 100644
--- a/plugins/customization/pom.xml
+++ b/plugins/customization/pom.xml
@@ -30,6 +30,7 @@
<module>org.eclipse.papyrus.robotics.parameters</module>
<module>org.eclipse.papyrus.robotics.perspective</module>
<module>org.eclipse.papyrus.robotics.wizards</module>
+ <module>org.eclipse.papyrus.robotics.dashboard.ui</module>
<module>textedit</module>
</modules>
diff --git a/releng/org.eclipse.papyrus.robotics.feature/feature.xml b/releng/org.eclipse.papyrus.robotics.feature/feature.xml
index 111ca56..e62a5e6 100644
--- a/releng/org.eclipse.papyrus.robotics.feature/feature.xml
+++ b/releng/org.eclipse.papyrus.robotics.feature/feature.xml
@@ -293,4 +293,11 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.papyrus.robotics.dashboard.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>