diff options
author | alfonsodelavega | 2021-01-22 11:01:38 +0000 |
---|---|---|
committer | alfonsodelavega | 2021-01-22 11:01:38 +0000 |
commit | c58d49a9920a50070d917fd852fdab9572e73f10 (patch) | |
tree | efaef0f3edbc85b565518644be9ea3e2fc2c91c6 | |
parent | 094fb74ddce525267480b5796ea2aa6d8c2be996 (diff) | |
download | org.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
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; } |