Added EGL/Emfatic/Flexmi example
diff --git a/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/EglFlexmiEmfaticStandaloneExample.java b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/EglFlexmiEmfaticStandaloneExample.java
new file mode 100644
index 0000000..2a5cb7f
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/EglFlexmiEmfaticStandaloneExample.java
@@ -0,0 +1,36 @@
+package org.eclipse.epsilon.examples.standalone.egl.flexmiemfatic;
+
+import java.nio.file.Paths;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.emfatic.core.EmfaticResourceFactory;
+import org.eclipse.epsilon.egl.EglTemplateFactoryModuleAdapter;
+import org.eclipse.epsilon.emc.emf.EmfModel;
+import org.eclipse.epsilon.flexmi.FlexmiResourceFactory;
+
+public class EglFlexmiEmfaticStandaloneExample {
+
+ public static void main(String[] args) throws Exception {
+
+ // Make Flexmi and Emfatic known to EMF as we will use them
+ // to express the input model and metamodel of the transformation
+ Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("flexmi", new FlexmiResourceFactory());
+ Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("emf", new EmfaticResourceFactory());
+
+ // Parse the EGL template
+ EglTemplateFactoryModuleAdapter module = new EglTemplateFactoryModuleAdapter();
+ module.parse(EglFlexmiEmfaticStandaloneExample.class.getResource("project2html.egl"));
+
+ // Configure its source model
+ EmfModel model = new EmfModel();
+ model.setModelFile(Paths.get(EglFlexmiEmfaticStandaloneExample.class.getResource("psl.flexmi").toURI()).toFile().getAbsolutePath());
+ model.setMetamodelFile(Paths.get(EglFlexmiEmfaticStandaloneExample.class.getResource("psl.emf").toURI()).toFile().getAbsolutePath());
+ model.setName("M");
+ model.load();
+ module.getContext().getModelRepository().addModel(model);
+
+ // Execute the EGL template and print its output
+ System.out.println(module.execute());
+ }
+
+}
diff --git a/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/project2html.egl b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/project2html.egl
new file mode 100644
index 0000000..80b3560
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/project2html.egl
@@ -0,0 +1,24 @@
+<html>
+<head>
+[*Bootstrap CSS*]
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">
+</head>
+
+<table class="table table-striped">
+[*Generate a header row with the names of all persons*]
+<tr>
+ <th></th>
+ [%for (p in Person.all){%]
+ <th>[%=p.name%]</th>
+ [%}%]
+</tr>
+[*Generate one row per task with the participants' effort*]
+[%for (t in Task.all){%]
+<tr>
+ <th>[%=t.title%]</th>
+ [%for (p in Person.all){%]
+ <td>[%=t.effort.selectOne(e|e.person = p)?.percentage ?: 0%]%</td>
+ [%}%]
+</tr>
+[%}%]
+</table>
\ No newline at end of file
diff --git a/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/psl.emf b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/psl.emf
new file mode 100644
index 0000000..5c9f4c7
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/psl.emf
@@ -0,0 +1,28 @@
+@namespace(uri="psl", prefix="")
+package psl;
+
+class Project {
+ attr String title;
+ attr String description;
+ val Task[*] tasks;
+ @diagram(direction="right")
+ val Person[*] people;
+}
+
+class Task {
+ attr String title;
+ attr int start;
+ attr int duration;
+ @diagram(direction="right")
+ val Effort[*] effort;
+}
+
+class Person {
+ attr String name;
+}
+
+class Effort {
+ @diagram(direction="up")
+ ref Person person;
+ attr int percentage = 100;
+}
\ No newline at end of file
diff --git a/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/psl.flexmi b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/psl.flexmi
new file mode 100644
index 0000000..bd5e81e
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.standalone/src/org/eclipse/epsilon/examples/standalone/egl/flexmiemfatic/psl.flexmi
@@ -0,0 +1,15 @@
+<?nsuri psl?>
+<project title="ACME">
+ <person name="Alice"/>
+ <person name="Bob"/>
+ <task title="Analysis" start="1" dur="3">
+ <effort person="Alice"/>
+ </task>
+ <task title="Design" start="4" dur="6">
+ <effort person="Bob"/>
+ </task>
+ <task title="Implementation" start="7" dur="3">
+ <effort person="Bob" perc="50"/>
+ <effort person="Alice" perc="50"/>
+ </task>
+</project>
\ No newline at end of file