Added example to show use of pictoSource extension point
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/.classpath b/examples/org.eclipse.epsilon.examples.picto.sirius/.classpath
new file mode 100644
index 0000000..e801ebf
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/.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-11"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/.project b/examples/org.eclipse.epsilon.examples.picto.sirius/.project
new file mode 100644
index 0000000..fd44ce6
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.epsilon.examples.picto.sirius</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/examples/org.eclipse.epsilon.examples.picto.sirius/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.epsilon.examples.picto.sirius/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c9545f0
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/META-INF/MANIFEST.MF b/examples/org.eclipse.epsilon.examples.picto.sirius/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2cff7ef
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Sirius
+Bundle-SymbolicName: org.eclipse.epsilon.examples.picto.sirius;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Automatic-Module-Name: org.eclipse.epsilon.examples.picto.sirius
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.epsilon.picto,
+ org.eclipse.sirius.diagram.ui
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/build.properties b/examples/org.eclipse.epsilon.examples.picto.sirius/build.properties
new file mode 100644
index 0000000..5bcac31
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ src/,\
+ resources/,\
+ plugin.xml
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/plugin.xml b/examples/org.eclipse.epsilon.examples.picto.sirius/plugin.xml
new file mode 100644
index 0000000..3edef31
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/plugin.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.epsilon.picto.pictoSource">
+ <pictoSource
+ class="org.eclipse.epsilon.examples.picto.sirius.BasicFamilyPictoSource">
+ </pictoSource>
+ </extension>
+
+</plugin>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx
new file mode 100644
index 0000000..acfdda3
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx
@@ -0,0 +1,17 @@
+rule Model2Bar transform family : Family {
+ parameters : Map {
+ "currentElement" = currentElement,
+ "format" = "html",
+ "path" = List{"Bar"}
+ }
+ template : "model2bar.egl"
+}
+
+rule Model2Pie transform family : Family {
+ parameters : Map {
+ "currentElement" = currentElement,
+ "format" = "html",
+ "path" = List{"Pie"}
+ }
+ template : "model2pie.egl"
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2bar.egl b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2bar.egl
new file mode 100644
index 0000000..25b25a2
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2bar.egl
@@ -0,0 +1,44 @@
+[% import "utils.eol";%]
+
+<html>
+
+<head>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.bundle.js" integrity="sha512-zO8oeHCxetPn1Hd9PdDleg5Tw1bAaP0YmNvPY8CwcRyUk7d7/+nyElmFrB6f7vg4f7Fv4sui1mcep8RIEShczg==" crossorigin="anonymous"></script>
+</head>
+
+<body>
+ <div id="canvas" style="width:60%">
+ <canvas id="chart"></canvas>
+ </div>
+
+ <script>
+ new Chart(document.getElementById("chart"), {
+ type: 'bar',
+ data: {
+ labels: ["Men", "Woman"],
+ datasets: [{
+ label: "Family",
+ backgroundColor: ["#add8e6","#e8c3b9"],
+ data: [[%= currentElement.getNumberOfMen() %] , [%= currentElement.getNumberOfWomen() %]]
+ }]
+ },
+ options: {
+ legend: false,
+ tooltips: false,
+ title: {
+ display: true,
+ text: '[%= currentElement.getTitle() %] '
+ },
+ scales: {
+ yAxes: [{
+ ticks: {
+ beginAtZero:true
+ }
+ }]
+ }
+ }
+ });
+ </script>
+</body>
+
+</html>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2pie.egl b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2pie.egl
new file mode 100644
index 0000000..25c2ac5
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/model2pie.egl
@@ -0,0 +1,34 @@
+[% import "utils.eol";%]
+<html>
+
+<head>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.bundle.js" integrity="sha512-zO8oeHCxetPn1Hd9PdDleg5Tw1bAaP0YmNvPY8CwcRyUk7d7/+nyElmFrB6f7vg4f7Fv4sui1mcep8RIEShczg==" crossorigin="anonymous"></script>
+</head>
+
+<body>
+ <div id="canvas" style="width:60%">
+ <canvas id="chart"></canvas>
+ </div>
+
+ <script>
+ new Chart(document.getElementById("chart"), {
+ type: 'pie',
+ data: {
+ labels: ["Men", "Woman"],
+ datasets: [{
+ label: "Family",
+ backgroundColor: ["#add8e6","#e8c3b9"],
+ data: [[%= currentElement.getNumberOfMen() %] , [%= currentElement.getNumberOfWomen() %]]
+ }]
+ },
+ options: {
+ title: {
+ display: true,
+ text: '[%= currentElement.getTitle() %] '
+ }
+ }
+ });
+ </script>
+</body>
+
+</html>
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/resources/utils.eol b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/utils.eol
new file mode 100644
index 0000000..80c29d9
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/resources/utils.eol
@@ -0,0 +1,25 @@
+operation Family getTitle() : String{
+ return "Family";
+}
+
+operation Person getTitle() : String{
+ return "Children of " + self.name;
+}
+
+
+operation Family getNumberOfMen() : String {
+ return self.getMembers().select(m|m.isTypeOf(Man)).size.toString();
+}
+
+operation Person getNumberOfMen() : String {
+ return self.getChildren().select(m|m.isTypeOf(Man)).size.toString();
+}
+
+operation Family getNumberOfWomen() : String {
+ return self.getMembers().select(m|m.isTypeOf(Woman)).size.toString();
+}
+
+operation Person getNumberOfWomen() : String {
+ return self.getChildren().select(m|m.isTypeOf(Woman)).size.toString();
+}
+
diff --git a/examples/org.eclipse.epsilon.examples.picto.sirius/src/org/eclipse/epsilon/examples/picto/sirius/BasicFamilyPictoSource.java b/examples/org.eclipse.epsilon.examples.picto.sirius/src/org/eclipse/epsilon/examples/picto/sirius/BasicFamilyPictoSource.java
new file mode 100644
index 0000000..61800cc
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.sirius/src/org/eclipse/epsilon/examples/picto/sirius/BasicFamilyPictoSource.java
@@ -0,0 +1,79 @@
+package org.eclipse.epsilon.examples.picto.sirius;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.epsilon.picto.dom.Picto;
+import org.eclipse.epsilon.picto.dom.PictoFactory;
+import org.eclipse.epsilon.picto.source.SimpleSource;
+import org.eclipse.sirius.diagram.impl.DSemanticDiagramImpl;
+import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor;
+import org.eclipse.ui.IEditorPart;
+
+public class BasicFamilyPictoSource extends SimpleSource {
+
+ private static final String EGX_SCRIPT = "platform:/plugin/org.eclipse.epsilon.examples.picto.sirius/resources/basicfamily.egx";
+
+ @Override
+ protected String getFormat() {
+ return "egx";
+ }
+
+ @Override
+ protected String getFileExtension() {
+ return "basicfamily";
+ }
+
+ @Override
+ protected Picto getRenderingMetadata(IEditorPart editorPart) {
+ Picto metadata = PictoFactory.eINSTANCE.createPicto();
+ metadata.setFormat(getFormat());
+ metadata.setTransformation(EGX_SCRIPT);
+ // pass the root element of the Sirius diagram to EGX via currentElement variable
+ metadata.getParameters().add(createParameter("currentElement", getRootOfDiagram(editorPart)));
+ return metadata;
+ }
+
+ @Override
+ public boolean supports(IEditorPart editorPart) {
+ return isSiriusEditor(editorPart);
+ }
+
+ @Override
+ protected boolean supportsEditorType(IEditorPart editorPart) {
+ return isSiriusEditor(editorPart);
+ }
+
+ @Override
+ protected IFile getFile(IEditorPart editorPart) {
+ if (isSiriusEditor(editorPart)) {
+ Resource r = getRootOfDiagram(editorPart).eResource();
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(r.getURI().toPlatformString(true)));
+ }
+ return null;
+ }
+
+ @Override
+ protected Resource getResource(IEditorPart editorPart) {
+ if (isSiriusEditor(editorPart)) {
+ return getRootOfDiagram(editorPart).eResource();
+ }
+ return null;
+ }
+
+ protected EObject getRootOfDiagram(IEditorPart editorPart) {
+ if (isSiriusEditor(editorPart)) {
+ DDiagramEditor editor = (DDiagramEditor) editorPart;
+ DSemanticDiagramImpl diagram = (DSemanticDiagramImpl) editor.getRepresentation();
+ return diagram.getTarget();
+ }
+ return null;
+ }
+
+ protected boolean isSiriusEditor(IEditorPart editorPart) {
+ return editorPart instanceof DDiagramEditor;
+ }
+
+}
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
index d427a51..03aef2c 100644
--- a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
@@ -92,6 +92,11 @@
IEolContext context = module.getContext();
context.getNativeTypeDelegates().add(new ExtensionPointToolNativeTypeDelegate());
+ FrameStack fs = context.getFrameStack();
+ for (Parameter customParameter : renderingMetadata.getParameters()) {
+ fs.put(new Variable(customParameter.getName(), getValue(customParameter), EolAnyType.Instance));
+ }
+
URI transformationUri = null;
if (renderingMetadata.getTransformation() != null) {
@@ -149,7 +154,7 @@
customView.getParameters().add(createParameter("activeLayers", customView.getLayers()));
}
- FrameStack fs = context.getFrameStack();
+
for (Parameter customViewParameter : customView.getParameters()) {
fs.put(new Variable(customViewParameter.getName(), getValue(customViewParameter), EolAnyType.Instance));
}