Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralfonsodelavega2021-01-22 11:01:38 +0000
committeralfonsodelavega2021-01-22 11:01:38 +0000
commitc58d49a9920a50070d917fd852fdab9572e73f10 (patch)
treeefaef0f3edbc85b565518644be9ea3e2fc2c91c6
parent094fb74ddce525267480b5796ea2aa6d8c2be996 (diff)
downloadorg.eclipse.epsilon-adelavega/pinset.tar.gz
org.eclipse.epsilon-adelavega/pinset.tar.xz
org.eclipse.epsilon-adelavega/pinset.zip
Support pinset templates in picto EGX visualisationsadelavega/pinset
-rw-r--r--examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/persons2table.pinset15
-rw-r--r--examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/socialnetwork.egx13
-rw-r--r--plugins/org.eclipse.epsilon.picto/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/LazyEgxModule.java44
-rw-r--r--plugins/org.eclipse.epsilon.pinset.engine/src/org/eclipse/epsilon/pinset/PinsetModule.java13
5 files changed, 85 insertions, 1 deletions
diff --git a/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/persons2table.pinset b/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/persons2table.pinset
new file mode 100644
index 000000000..5849c32d0
--- /dev/null
+++ b/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/persons2table.pinset
@@ -0,0 +1,15 @@
+dataset personStats over person : Person {
+ properties[name]
+
+ column liked_by : Person.all.select(p | p.likes.includes(person)).size()
+ column liking : person.likes.size()
+
+ column disliked_by : Person.all.select(p | p.dislikes.includes(person)).size()
+ column disliking : person.dislikes.size()
+
+ column like_meter : liked_by - disliked_by
+}
+
+dataset otherStats over p : Person {
+ properties[name]
+}
diff --git a/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/socialnetwork.egx b/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/socialnetwork.egx
index 3a23e4388..2c05d0ade 100644
--- a/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/socialnetwork.egx
+++ b/examples/org.eclipse.epsilon.examples.picto.socialnetwork/picto/socialnetwork.egx
@@ -38,6 +38,19 @@ rule Person2Graphviz
}
+rule Persons2Table {
+
+ template : "persons2table.pinset"
+
+ parameters : Map {
+ "path" = Sequence{"Stats"},
+ "icon" = "table",
+ "format" = "csv"
+
+ // ,"pinsetrule" = "otherStats"
+ }
+}
+
@lazy
rule Persons2Graphviz {
diff --git a/plugins/org.eclipse.epsilon.picto/META-INF/MANIFEST.MF b/plugins/org.eclipse.epsilon.picto/META-INF/MANIFEST.MF
index 3319350bd..88947018e 100644
--- a/plugins/org.eclipse.epsilon.picto/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epsilon.picto/META-INF/MANIFEST.MF
@@ -18,6 +18,7 @@ Require-Bundle: org.eclipse.epsilon.flexmi,
org.eclipse.emf.edit,
org.eclipse.epsilon.common.dt;visibility:=reexport,
org.eclipse.epsilon.egl.engine;visibility:=reexport,
+ org.eclipse.epsilon.pinset.engine,
org.eclipse.epsilon.emc.emf,
org.eclipse.ui.ide,
org.eclipse.emf.emfatic.ui;resolution:=optional,
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/LazyEgxModule.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/LazyEgxModule.java
index 8ea730a01..214b670b4 100644
--- a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/LazyEgxModule.java
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/LazyEgxModule.java
@@ -14,6 +14,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+
import org.eclipse.epsilon.common.module.ModuleElement;
import org.eclipse.epsilon.common.parse.AST;
import org.eclipse.epsilon.egl.EglTemplate;
@@ -29,6 +30,8 @@ import org.eclipse.epsilon.eol.execute.context.FrameType;
import org.eclipse.epsilon.eol.execute.context.IEolContext;
import org.eclipse.epsilon.eol.execute.context.Variable;
import org.eclipse.epsilon.eol.types.EolAnyType;
+import org.eclipse.epsilon.pinset.DatasetRule;
+import org.eclipse.epsilon.pinset.PinsetModule;
public class LazyEgxModule extends EgxModule {
@@ -153,7 +156,46 @@ public class LazyEgxModule extends EgxModule {
@Override
public String getContent() throws Exception {
if (templateUri == null) return "";
-
+
+ if (templateUri.toString().endsWith(".pinset")) {
+ PinsetModule module = new PinsetModule();
+ module.setContext(context);
+ module.persistDatasets(false);
+ module.parse(templateUri);
+
+ String ruleName = null;
+ for (Variable variable : variables) {
+ if (variable.getName().equalsIgnoreCase("pinsetrule")) {
+ ruleName = "" + variable.getValue();
+ break;
+ }
+ }
+
+ DatasetRule rule = null;
+ if (ruleName != null) {
+ rule = module.getDatasetRule(ruleName);
+ if (rule == null) {
+ throw new RuntimeException("Pinset rule \"" + ruleName + "\" not found");
+ }
+ }
+ else {
+ rule = module.getDatasetRules().get(0);
+ }
+
+ context.getFrameStack().enterLocal(FrameType.PROTECTED, module,
+ variables.toArray(new Variable[variables.size()]));
+
+ module.preExecution();
+ rule.execute(module.getContext());
+
+ context.getFrameStack().leaveLocal(module);
+
+ String content = rule.getDataset().toString(module.getSeparator());
+ rule.dispose();
+
+ return content;
+ }
+
EglTemplate template = null;
if (templateCache == null || (template = templateCache.get(templateUri)) == null) {
template = templateFactory.load(templateUri);
diff --git a/plugins/org.eclipse.epsilon.pinset.engine/src/org/eclipse/epsilon/pinset/PinsetModule.java b/plugins/org.eclipse.epsilon.pinset.engine/src/org/eclipse/epsilon/pinset/PinsetModule.java
index 21e54238b..06940aae8 100644
--- a/plugins/org.eclipse.epsilon.pinset.engine/src/org/eclipse/epsilon/pinset/PinsetModule.java
+++ b/plugins/org.eclipse.epsilon.pinset.engine/src/org/eclipse/epsilon/pinset/PinsetModule.java
@@ -119,10 +119,23 @@ public class PinsetModule extends ErlModule {
return null;
}
+ public void preExecution() throws EolRuntimeException {
+ execute(getPre(), getContext());
+ }
+
public List<DatasetRule> getDatasetRules() {
return datasetRules;
}
+ public DatasetRule getDatasetRule(String ruleName) {
+ for (DatasetRule rule : datasetRules) {
+ if (rule.getName().equalsIgnoreCase(ruleName)) {
+ return rule;
+ }
+ }
+ return null;
+ }
+
public void setOutputFolder(String attribute) {
outputFolder = attribute;
}

Back to the top