diff --git a/.gitignore b/.gitignore index ae9784d17..66e9c0268 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,7 @@ build.acceleo .DS_Store xtend-gen .polyglot.build.properties +.polyglot.* +.META-INF_MANIFEST.MF +feature.xml.takari_issue_192 diff --git a/commons/plugin.xml b/commons/plugin.xml deleted file mode 100644 index 5535690d3..000000000 --- a/commons/plugin.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/commons/plugins/org.eclipse.gemoc.commons.eclipse.messagingsystem.api/pomfirst/pom.xml b/commons/plugins/org.eclipse.gemoc.commons.eclipse.messagingsystem.api/pomfirst/pom.xml new file mode 100644 index 000000000..c04c57607 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.eclipse.messagingsystem.api/pomfirst/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse.messagingsystem.api + 3.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/commons/plugins/org.eclipse.gemoc.commons.eclipse.pde/pomfirst/pom.xml b/commons/plugins/org.eclipse.gemoc.commons.eclipse.pde/pomfirst/pom.xml new file mode 100644 index 000000000..dacbc96e5 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.eclipse.pde/pomfirst/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse.pde + 3.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.jdt + org.eclipse.jdt.core + [3.6.0,4.0.0) + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/commons/plugins/org.eclipse.gemoc.commons.eclipse/pomfirst/pom.xml b/commons/plugins/org.eclipse.gemoc.commons.eclipse/pomfirst/pom.xml new file mode 100644 index 000000000..64a77ba13 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.eclipse/pomfirst/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse + 3.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.emf + org.eclipse.emf.common + [2.16.0,3.0.0) + + + org.eclipse.platform + org.eclipse.core.resources + [3.6.0,4.0.0) + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/.classpath b/commons/plugins/org.eclipse.gemoc.commons.utils/.classpath new file mode 100644 index 000000000..eca7bdba8 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/.project b/commons/plugins/org.eclipse.gemoc.commons.utils/.project new file mode 100644 index 000000000..646222aaa --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/.project @@ -0,0 +1,28 @@ + + + org.eclipse.gemoc.commons.utils + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/.settings/org.eclipse.jdt.core.prefs b/commons/plugins/org.eclipse.gemoc.commons.utils/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..0c68a61dc --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/.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/commons/plugins/org.eclipse.gemoc.commons.utils/META-INF/MANIFEST.MF b/commons/plugins/org.eclipse.gemoc.commons.utils/META-INF/MANIFEST.MF new file mode 100644 index 000000000..73ec6afce --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/META-INF/MANIFEST.MF @@ -0,0 +1,8 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: GEMOC Commons Utils +Bundle-SymbolicName: org.eclipse.gemoc.commons.utils +Bundle-Version: 1.0.0.qualifier +Bundle-Vendor: Inria +Automatic-Module-Name: org.eclipse.gemoc.commons.utils +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/build.properties b/commons/plugins/org.eclipse.gemoc.commons.utils/build.properties new file mode 100644 index 000000000..34d2e4d2d --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/build.properties @@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/pomfirst/pom.xml b/commons/plugins/org.eclipse.gemoc.commons.utils/pomfirst/pom.xml new file mode 100644 index 000000000..0013552f8 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/pomfirst/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.utils + 1.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/src/org/eclipse/gemoc/commons/utils/ExtensibleInputStream.java b/commons/plugins/org.eclipse.gemoc.commons.utils/src/org/eclipse/gemoc/commons/utils/ExtensibleInputStream.java new file mode 100644 index 000000000..52839ccb2 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/src/org/eclipse/gemoc/commons/utils/ExtensibleInputStream.java @@ -0,0 +1,56 @@ +package org.eclipse.gemoc.commons.utils; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedList; +import java.util.concurrent.LinkedBlockingQueue; + +public class ExtensibleInputStream extends InputStream { + + LinkedBlockingQueue messages = new LinkedBlockingQueue<>(); + + @Override + public int read() throws IOException { + +// System.out.println("[DEBUG] Read InputStream"); + + waitForMessage(); + + InputStream current = messages.peek(); + int c = current.read(); + if(c != -1) { + return c; + } + else { +// System.out.println("[DEBUG] End InputStream 2"); + messages.poll(); + + waitForMessage(); + + current = messages.peek(); + return current.read(); + } + } + + public void addMessage(String message) { +// System.out.println("[DEBUG] Fill InputStream"); + messages.add(new ByteArrayInputStream(message.getBytes())); + synchronized (this) { + this.notify(); + } + } + + public void waitForMessage() { + if(messages.isEmpty()) { + try { + synchronized (this) { + this.wait(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } +// System.out.println("[DEBUG] Wait"); + } + } +} diff --git a/commons/plugins/org.eclipse.gemoc.commons.utils/src/org/eclipse/gemoc/commons/utils/ModelAwarePrintStream.java b/commons/plugins/org.eclipse.gemoc.commons.utils/src/org/eclipse/gemoc/commons/utils/ModelAwarePrintStream.java new file mode 100644 index 000000000..923d58d17 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.commons.utils/src/org/eclipse/gemoc/commons/utils/ModelAwarePrintStream.java @@ -0,0 +1,212 @@ +package org.eclipse.gemoc.commons.utils; + +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.Locale; + +public class ModelAwarePrintStream extends PrintStream { + + private PrintStream baseStream; + private Thread modelExecutionThread; + + public ModelAwarePrintStream(OutputStream out, PrintStream baseStream) { + super(out); + this.baseStream = baseStream; + } + + public void registerModelExecutionThread(Thread modelExecutionThread) { + this.modelExecutionThread = modelExecutionThread; + } + + @Override + public void print(boolean b) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(b); + } else { + this.baseStream.print(b); + } + } + + @Override + public void print(char c) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(c); + } else { + this.baseStream.print(c); + } + } + + @Override + public void print(int i) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(i); + } else { + this.baseStream.print(i); + } + } + + @Override + public void print(long l) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(l); + } else { + this.baseStream.print(l); + } + } + + @Override + public void print(float f) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(f); + } else { + this.baseStream.print(f); + } + } + + @Override + public void print(double d) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(d); + } else { + this.baseStream.print(d); + } + } + + @Override + public void print(char[] s) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(s); + } else { + this.baseStream.print(s); + } + } + + @Override + public void print(String s) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(s); + } else { + this.baseStream.print(s); + } + } + + @Override + public void print(Object obj) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.print(obj); + } else { + this.baseStream.print(obj); + } + } + + @Override + public void println() { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(); + } else { + this.baseStream.println(); + } + } + + @Override + public void println(boolean x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(char x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(int x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(long x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(float x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(double x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(char[] x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(String x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public void println(Object x) { + if (Thread.currentThread() == this.modelExecutionThread) { + super.println(x); + } else { + this.baseStream.println(x); + } + } + + @Override + public PrintStream printf(String format, Object... args) { + if (Thread.currentThread() == this.modelExecutionThread) { + return super.printf(format, args); + } else { + return this.baseStream.printf(format, args); + } + } + + @Override + public PrintStream printf(Locale l, String format, Object... args) { + if (Thread.currentThread() == this.modelExecutionThread) { + return super.printf(l, format, args); + } else { + return this.baseStream.printf(l, format, args); + } + } + + + +} diff --git a/commons/plugins/org.eclipse.gemoc.dsl.model/pomfirst/pom.xml b/commons/plugins/org.eclipse.gemoc.dsl.model/pomfirst/pom.xml new file mode 100644 index 000000000..94f0e9e56 --- /dev/null +++ b/commons/plugins/org.eclipse.gemoc.dsl.model/pomfirst/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.dsl.model + 3.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/commons/plugins/pom.xml b/commons/plugins/pom.xml new file mode 100644 index 000000000..66638e9e2 --- /dev/null +++ b/commons/plugins/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + org.eclipse.gemoc.commons + org.eclipse.gemoc.commons.plugins.root + pom + + org.eclipse.gemoc.commons + org.eclipse.gemoc.commons.root + 3.0.0-SNAPSHOT + .. + + + + org.eclipse.gemoc.commons.utils + + diff --git a/commons/pom.xml b/commons/pom.xml index 2c6fc19dd..6a8d4befb 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -34,6 +34,9 @@ plugins/org.jaxen plugins/org.jdom2 + + plugins + releng diff --git a/framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.debugger/pomfirst/pom.xml b/framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.debugger/pomfirst/pom.xml new file mode 100644 index 000000000..f29417c8d --- /dev/null +++ b/framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.debugger/pomfirst/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.executionframework.debugger + 4.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.modeldebugging.executionframework + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse + 3.0.0-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.trace.commons.model + 3.0.1-SNAPSHOT + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.engine/pomfirst/pom.xml b/framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.engine/pomfirst/pom.xml new file mode 100644 index 000000000..4c67b74c8 --- /dev/null +++ b/framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.engine/pomfirst/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.executionframework.engine + 4.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.modeldebugging.executionframework + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse + 3.0.0-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.trace.commons.model + 3.0.1-SNAPSHOT + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.classpath b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.classpath new file mode 100644 index 000000000..002ad570e --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.classpath @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.project b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.project new file mode 100644 index 000000000..c2f06ef95 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.project @@ -0,0 +1,29 @@ + + + org.eclipse.gemoc.executionframework.mep + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.xtext.ui.shared.xtextNature + + diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.core.resources.prefs b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..989609020 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.jdt.core.prefs b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..b8947ec6f --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.xtend.core.Xtend.prefs b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.xtend.core.Xtend.prefs new file mode 100644 index 000000000..9682a4c0a --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/.settings/org.eclipse.xtend.core.Xtend.prefs @@ -0,0 +1,7 @@ +//outlet.DEFAULT_OUTPUT.sourceFolder.src/main/java.directory=xtend-gen +//outlet.DEFAULT_OUTPUT.sourceFolder.src/test/java.directory=src/test/generated-sources/xtend +BuilderConfiguration.is_project_specific=true +eclipse.preferences.version=1 +outlet.DEFAULT_OUTPUT.hideLocalSyntheticVariables=true +outlet.DEFAULT_OUTPUT.installDslAsPrimarySource=false +outlet.DEFAULT_OUTPUT.userOutputPerSourceFolder=true diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/pom.xml b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/pom.xml new file mode 100644 index 000000000..28acf60e4 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/pom.xml @@ -0,0 +1,78 @@ + + 4.0.0 + org.eclipse.gemoc.executionframework + org.eclipse.gemoc.executionframework.mep + 1.0.0-SNAPSHOT + + + + org.eclipse.gemoc.executionframework + org.eclipse.gemoc.executionframework.pomfirst + 1.0.0-SNAPSHOT + + + + 1.8 + 1.8 + 2.22.0 + 0.21.1 + 2.18.0 + 0.8.0 + + + + + + + org.eclipse.xtext + org.eclipse.xtext + ${xtend.version} + + + + org.eclipse.lsp4j + org.eclipse.lsp4j.debug + ${lsp4j.version} + + + org.eclipse.lsp4j + org.eclipse.lsp4j.jsonrpc + ${lsp4j.version} + + + org.eclipse.emf + org.eclipse.emf.edit + 2.16.0 + + + org.eclipse.gemoc.commons + org.eclipse.gemoc.commons.eclipse.pde + 3.0.0-SNAPSHOT + + + org.eclipse.gemoc.commons + org.eclipse.gemoc.commons.eclipse.messagingsystem.api + 3.0.0-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.xdsmlframework.api + 4.0.0-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.xdsmlframework.commons + 4.0.0-SNAPSHOT + + + + + + + + + + + \ No newline at end of file diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/GemocMEPServerImpl.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/GemocMEPServerImpl.java new file mode 100644 index 000000000..20db8bcaf --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/GemocMEPServerImpl.java @@ -0,0 +1,510 @@ +package org.eclipse.gemoc.executionframework.mep.launch; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; + +import org.apache.log4j.Logger; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.gemoc.executionframework.mep.services.IModelExecutionProtocolClient; +import org.eclipse.gemoc.executionframework.mep.services.IModelExecutionProtocolServer; +import org.eclipse.gemoc.executionframework.mep.services.ModelExecutionClientAware; +import org.eclipse.lsp4j.debug.Breakpoint; +import org.eclipse.lsp4j.debug.Capabilities; +import org.eclipse.lsp4j.debug.ContinueArguments; +import org.eclipse.lsp4j.debug.ContinueResponse; +import org.eclipse.lsp4j.debug.InitializeRequestArguments; +import org.eclipse.lsp4j.debug.NextArguments; +import org.eclipse.lsp4j.debug.OutputEventArguments; +import org.eclipse.lsp4j.debug.RestartArguments; +import org.eclipse.lsp4j.debug.SetBreakpointsArguments; +import org.eclipse.lsp4j.debug.SetBreakpointsResponse; +import org.eclipse.lsp4j.debug.SourceArguments; +import org.eclipse.lsp4j.debug.SourceBreakpoint; +import org.eclipse.lsp4j.debug.SourceResponse; +import org.eclipse.lsp4j.debug.StackFrame; +import org.eclipse.lsp4j.debug.StackTraceArguments; +import org.eclipse.lsp4j.debug.StackTraceResponse; +import org.eclipse.lsp4j.debug.StepInArguments; +import org.eclipse.lsp4j.debug.StepOutArguments; +import org.eclipse.lsp4j.debug.TerminateArguments; +import org.eclipse.lsp4j.debug.Variable; +import org.eclipse.lsp4j.debug.VariablesArguments; +import org.eclipse.lsp4j.debug.VariablesResponse; +import org.eclipse.lsp4j.jsonrpc.Endpoint; +import org.eclipse.lsp4j.jsonrpc.ResponseErrorException; +import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethod; +import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider; +import org.eclipse.lsp4j.jsonrpc.messages.ResponseError; +import org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints; + +abstract public class GemocMEPServerImpl implements IModelExecutionProtocolServer, Endpoint, JsonRpcMethodProvider, ModelExecutionClientAware { + + private static final Logger LOG = Logger.getLogger(GemocMEPServerImpl.class); + + private Map supportedMethods; + + //private final Multimap extensionProviders = LinkedListMultimap.create(); + + protected IModelExecutionProtocolClient client; + + protected boolean initialized = false; + protected boolean simulationStarted = false; + protected MEPLauncherParameters launcherParameters = null; + protected Breakpoint[] breakpoints = new Breakpoint[0]; + + @Override + public Map supportedMethods() { + if (supportedMethods != null) { + return supportedMethods; + } + //synchronized (extensionProviders) { + Map supportedMethods = new LinkedHashMap<>(); + supportedMethods.putAll(ServiceEndpoints.getSupportedMethods(getClass())); + + for(JsonRpcMethod supportedMethod : supportedMethods.values()) { + LOG.info("supported method "+supportedMethod.getMethodName()+ " "+supportedMethod.getParameterTypes()); + } + /* + Map extensions = new LinkedHashMap<>(); + for (IResourceServiceProvider resourceServiceProvider : getAllLanguages()) { + ILanguageServerExtension ext = resourceServiceProvider.get(ILanguageServerExtension.class); + if (ext != null) { + ext.initialize(access); + Map supportedExtensions = ext instanceof JsonRpcMethodProvider + ? ((JsonRpcMethodProvider) ext).supportedMethods() + : ServiceEndpoints.getSupportedMethods(ext.getClass()); + for (Map.Entry entry : supportedExtensions.entrySet()) { + if (supportedMethods.containsKey(entry.getKey())) { + LOG.error("The json rpc method \'" + entry.getKey() + + "\' can not be an extension as it is already defined in the LSP standard."); + } else { + JsonRpcMethod existing = extensions.put(entry.getKey(), entry.getValue()); + if (existing != null && !Objects.equal(existing, entry.getValue())) { + LOG.error("An incompatible LSP extension \'" + entry.getKey() + + "\' has already been registered. Using 1 ignoring 2. \n1 : " + existing + + " \n2 : " + entry.getValue()); + extensions.put(entry.getKey(), existing); + } else { + Endpoint endpoint = ServiceEndpoints.toEndpoint(ext); + extensionProviders.put(entry.getKey(), endpoint); + supportedMethods.put(entry.getKey(), entry.getValue()); + } + } + } + } + } + */ + this.supportedMethods = supportedMethods; + return supportedMethods; + //} + } + + @Override + public void notify(String method, Object parameter) { + /* for (Endpoint endpoint : extensionProviders.get(method)) { + try { + endpoint.notify(method, parameter); + } catch (UnsupportedOperationException e) { + if (e != ILanguageServerExtension.NOT_HANDLED_EXCEPTION) { + throw e; + } + } + }*/ + LOG.info("notify "+method); + } + + @Override + public CompletableFuture request(String method, Object parameter) { + /* if (!extensionProviders.containsKey(method)) { + throw new UnsupportedOperationException("The json request \'" + method + "\' is unknown."); + } + for (Endpoint endpoint : extensionProviders.get(method)) { + try { + return endpoint.request(method, parameter); + } catch (UnsupportedOperationException e) { + if (e != ILanguageServerExtension.NOT_HANDLED_EXCEPTION) { + throw e; + } + } + }*/ + throw new UnsupportedOperationException("The json request \'" + method + "\' is unknown."); + //return null; + } + + @Override + public void connect(IModelExecutionProtocolClient client) { + this.client = client; + } + + + + // **************** + // * DAP protocol * + // **************** + @Override + public CompletableFuture initialize(InitializeRequestArguments args) { + LOG.info("CompletableFuture initialize(InitializeRequestArguments args)"); + CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { + @Override + public Capabilities get() { + if (initialized) { + ResponseError error = new ResponseError(); + error.setMessage("Server already initialized"); + throw new ResponseErrorException(error); + } + + Capabilities capabilities = new Capabilities(); + capabilities.setSupportsTerminateRequest(true); + // TODO declare here DAP capabilities + + client.initialized(); + initialized = true; + + return capabilities; + } + }); + return future; + } + + @Override + public CompletableFuture launch(Map args) { + CompletableFuture future = CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + if (!initialized) { + ResponseError error = new ResponseError(); + error.setMessage("Server not initialized"); + throw new ResponseErrorException(error); + } + if (simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Another simulation is running"); + throw new ResponseErrorException(error); + } + + // TODO launch the engine + // throw new Exception("failed to launch with args\'" + args + "\'."); + LOG.info("launch received with args "+args); + + Resource res = null; + if (args.containsKey(MEPLaunchParameterKey.noDebug.name())) { + //TODO: Normal launch if true + } + if (args.containsKey(MEPLaunchParameterKey.modelContent.name())) { + try { + ResourceSet rs = createResourceSet(); + InputStream in = new ByteArrayInputStream("type foo type bar".getBytes()); + res = rs.createResource(URI.createURI("dummy:/example.k3fsm")); + + res.load(in, rs.getLoadOptions()); + + //Model model = (Model) resource.getContents().get(0); + LOG.info("root element in model-content is "+res.getContents().get(0)); + + } catch (IOException e) { + LOG.error(e.getMessage(), e); + } + } + if(args.containsKey(MEPLaunchParameterKey.modelURI.name())) { + String modelURIString = (String) args.get(MEPLaunchParameterKey.modelURI.name()); + URI uri = URI.createURI(modelURIString); + ResourceSet rs = createResourceSet(); + res = rs.createResource(uri); + try { + res.load(rs.getLoadOptions()); + res.getContents().get(0); + LOG.info("root element in model uri is "+res.getContents().get(0)); + } catch (IOException e) { + LOG.error(e.getMessage(), e); + } + } + + String methodEntryPoint = ""; + if(args.containsKey(MEPLaunchParameterKey.methodEntryPoint.name())) { + methodEntryPoint = (String) args.get(MEPLaunchParameterKey.methodEntryPoint.name()); + } + String initializationMethod = ""; + if(args.containsKey(MEPLaunchParameterKey.initializationMethod.name())) { + initializationMethod = (String) args.get(MEPLaunchParameterKey.initializationMethod.name()); + } + + String modelEntryPoint = "/"; + if(args.containsKey(MEPLaunchParameterKey.modelEntryPoint.name())) { + modelEntryPoint = (String) args.get(MEPLaunchParameterKey.modelEntryPoint.name()); + } + String initializationArguments = "/"; + if(args.containsKey(MEPLaunchParameterKey.initializationArguments.name())) { + initializationArguments = (String) args.get(MEPLaunchParameterKey.initializationArguments.name()); + } + + launcherParameters = new MEPLauncherParameters(); + launcherParameters.resourceModel = res; + launcherParameters.modelEntryPoint = modelEntryPoint; + launcherParameters.methodEntryPoint = methodEntryPoint; + launcherParameters.initializationMethod = initializationMethod; + launcherParameters.initializationMethodArgs = initializationArguments; + launchGemocEngine(launcherParameters); + + simulationStarted = true; + } + }); + + return future; + } + + @Override + public CompletableFuture continue_(ContinueArguments args) { + CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { + @Override + public ContinueResponse get() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + + internalContinue(); + + ContinueResponse response = new ContinueResponse(); + return response; + } + }); + return future; + } + + @Override + public CompletableFuture next(NextArguments args) { + CompletableFuture future = CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + + internalNext(); + } + }); + return future; + } + + @Override + public CompletableFuture stepIn(StepInArguments args) { + CompletableFuture future = CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + + internalStepIn(); + } + }); + return future; + } + + @Override + public CompletableFuture stepOut(StepOutArguments args) { + CompletableFuture future = CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + + internalStepOut(); + } + }); + return future; + } + + @Override + public CompletableFuture setBreakpoints(SetBreakpointsArguments args) { + CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { + @Override + public SetBreakpointsResponse get() { + //TODO: Manage different sources for breakpoints + SetBreakpointsResponse response = new SetBreakpointsResponse(); + + internalClearBreakpoints(); + + List bps = new ArrayList<>(); + for (SourceBreakpoint sbp : args.getBreakpoints()) { + Breakpoint bp = new Breakpoint(); + bp.setVerified(true); + bp.setLine(sbp.getLine()); + internalToggleBreakpoint(sbp.getLine().intValue()); + bps.add(bp); + } + breakpoints = bps.toArray(new Breakpoint[0]); + response.setBreakpoints(breakpoints); + + return response; + } + }); + return future; + } + + @Override + public CompletableFuture restart(RestartArguments args) { + CompletableFuture future = CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + if (launcherParameters == null) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation was not started before"); + throw new ResponseErrorException(error); + } + if (simulationStarted) { + internalTerminate(); + simulationStarted = false; + } + launchGemocEngine(launcherParameters); + simulationStarted = true; + for (Breakpoint bp : breakpoints) { + internalToggleBreakpoint(bp.getLine().intValue()); + } + } + }); + return future; + } + + @Override + public CompletableFuture stackTrace(StackTraceArguments args) { + CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { + @Override + public StackTraceResponse get() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + StackTraceResponse response = new StackTraceResponse(); + response.setStackFrames(internalStackTrace()); + return response; + } + }); + return future; + } + + @Override + public CompletableFuture variables(VariablesArguments args) { + CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { + @Override + public VariablesResponse get() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + VariablesResponse response = new VariablesResponse(); + response.setVariables(internalVariables()); + return response; + } + }); + return future; + } + + @Override + public CompletableFuture source(SourceArguments args) { + CompletableFuture future = CompletableFuture.supplyAsync(new Supplier() { + @Override + public SourceResponse get() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + SourceResponse response = new SourceResponse(); + response.setContent(internalSource()); + return response; + } + }); + return future; + } + + protected abstract void internalNext(); + + protected abstract void internalStepIn(); + + protected abstract void internalStepOut(); + + @Override + public CompletableFuture terminate(TerminateArguments args) { + CompletableFuture future = CompletableFuture.runAsync(new Runnable() { + @Override + public void run() { + if (!simulationStarted) { + ResponseError error = new ResponseError(); + error.setMessage("Simulation not started"); + throw new ResponseErrorException(error); + } + internalTerminate(); + simulationStarted = false; + } + }); + return future; + } + + public void sendOutput(String output) { + OutputEventArguments args = new OutputEventArguments(); + args.setCategory("stdout"); + args.setOutput(output); + client.output(args); + } + + protected abstract void internalClearBreakpoints(); + + protected abstract void internalToggleBreakpoint(int line); + + protected abstract void internalTerminate(); + + protected abstract void internalContinue(); + + protected abstract Variable[] internalVariables(); + + protected abstract StackFrame[] internalStackTrace(); + + protected abstract String internalSource(); + + /** + * create a resource set + * by default it only allows to load xmi models + * @return + */ + public ResourceSet createResourceSet() { + //ResourceSetFactory.createFactory().createResourceSet(modelURI); + return new ResourceSetImpl(); + } + + public void launchGemocEngine(MEPLauncherParameters parameters) { + launchGemocEngine(parameters.resourceModel, parameters.modelEntryPoint, parameters.methodEntryPoint, + parameters.initializationMethod, parameters.initializationMethodArgs); + } + + /** + * + * @param resourceModel + * @param selectedLanguage + * @param modelEntryPoint + * @param methodEntryPoint + * @param initializationMethod + * @param initializationMethodArgs + */ + abstract public void launchGemocEngine(Resource resourceModel, String modelEntryPoint, + String methodEntryPoint, String initializationMethod, String initializationMethodArgs); +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLaunchParameterKey.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLaunchParameterKey.java new file mode 100644 index 000000000..74a308dfa --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLaunchParameterKey.java @@ -0,0 +1,15 @@ +package org.eclipse.gemoc.executionframework.mep.launch; + +public enum MEPLaunchParameterKey { + noDebug, + modelContent, + modelURI, + workspaceLocation, // location of the eclipse workspace on the server ie. for resolution of platform:/resource uri + language, + modelEntryPoint, + methodEntryPoint, + initializationMethod, + initializationArguments + + +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLauncher.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLauncher.java new file mode 100644 index 000000000..76677faf8 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLauncher.java @@ -0,0 +1,227 @@ +package org.eclipse.gemoc.executionframework.mep.launch; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.function.Consumer; +import java.util.function.Function; + +import org.eclipse.gemoc.executionframework.mep.services.IModelExecutionProtocolClient; +import org.eclipse.gemoc.executionframework.mep.services.IModelExecutionProtocolServer; +import org.eclipse.lsp4j.jsonrpc.Endpoint; +import org.eclipse.lsp4j.jsonrpc.Launcher; +import org.eclipse.lsp4j.jsonrpc.MessageConsumer; +import org.eclipse.lsp4j.jsonrpc.RemoteEndpoint; +import org.eclipse.lsp4j.jsonrpc.debug.DebugRemoteEndpoint; +import org.eclipse.lsp4j.jsonrpc.debug.json.DebugMessageJsonHandler; +import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethod; +import org.eclipse.lsp4j.jsonrpc.json.MessageJsonHandler; +import org.eclipse.lsp4j.jsonrpc.json.StreamMessageConsumer; +import org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints; +import org.eclipse.lsp4j.jsonrpc.validation.ReflectiveMessageValidator; + +import com.google.gson.GsonBuilder; + +/** + * Specialized launcher for the MEP Server Protocol. + */ +public class MEPLauncher { + + private MEPLauncher() {} + + + + /** + * Create a new Launcher for a given local service object, a given remote + * interface and an input and output stream. + * + * @param localService + * - an object on which classes RPC methods are looked up + * @param remoteInterface + * - an interface on which RPC methods are looked up + * @param in + * - inputstream to listen for incoming messages + * @param out + * - outputstream to send outgoing messages + */ + public static Launcher createLauncher(Object localService, Class remoteInterface, InputStream in, + OutputStream out) { + return new Builder() + .setLocalService(localService) + .setRemoteInterface(remoteInterface) + .setInput(in) + .setOutput(out) + .create(); + } + + /** + * Create a new Launcher for a given local service object, a given remote + * interface and an input and output stream, and set up message validation and + * tracing. + * + * @param localService + * - an object on which classes RPC methods are looked up + * @param remoteInterface + * - an interface on which RPC methods are looked up + * @param in + * - inputstream to listen for incoming messages + * @param out + * - outputstream to send outgoing messages + * @param validate + * - whether messages should be validated with the + * {@link ReflectiveMessageValidator} + * @param trace + * - a writer to which incoming and outgoing messages are traced, or + * {@code null} to disable tracing + */ + public static Launcher createLauncher(Object localService, Class remoteInterface, InputStream in, + OutputStream out, boolean validate, PrintWriter trace) { + return new Builder() + .setLocalService(localService) + .setRemoteInterface(remoteInterface) + .setInput(in) + .setOutput(out) + .validateMessages(validate) + .traceMessages(trace) + .create(); + } + + /** + * Create a new Launcher for a given local service object, a given remote + * interface and an input and output stream. Threads are started with the given + * executor service. The wrapper function is applied to the incoming and + * outgoing message streams so additional message handling such as validation + * and tracing can be included. + * + * @param localService + * - an object on which classes RPC methods are looked up + * @param remoteInterface + * - an interface on which RPC methods are looked up + * @param in + * - inputstream to listen for incoming messages + * @param out + * - outputstream to send outgoing messages + * @param executorService + * - the executor service used to start threads + * @param wrapper + * - a function for plugging in additional message consumers + */ + public static Launcher createLauncher(Object localService, Class remoteInterface, InputStream in, + OutputStream out, ExecutorService executorService, Function wrapper) { + return createIoLauncher(localService, remoteInterface, in, out, executorService, wrapper); + } + + /** + * Create a new Launcher for a given local service object, a given remote + * interface and an input and output stream. Threads are started with the given + * executor service. The wrapper function is applied to the incoming and + * outgoing message streams so additional message handling such as validation + * and tracing can be included. + * + * @param localService + * - an object on which classes RPC methods are looked up + * @param remoteInterface + * - an interface on which RPC methods are looked up + * @param in + * - inputstream to listen for incoming messages + * @param out + * - outputstream to send outgoing messages + * @param executorService + * - the executor service used to start threads + * @param wrapper + * - a function for plugging in additional message consumers + */ + public static Launcher createIoLauncher(Object localService, Class remoteInterface, InputStream in, + OutputStream out, ExecutorService executorService, Function wrapper) { + return new Builder() + .setLocalService(localService) + .setRemoteInterface(remoteInterface) + .setInput(in) + .setOutput(out) + .setExecutorService(executorService) + .wrapMessages(wrapper) + .create(); + } + + /** + * Create a new Launcher for a given local service object, a given remote + * interface and an input and output stream. Threads are started with the given + * executor service. The wrapper function is applied to the incoming and + * outgoing message streams so additional message handling such as validation + * and tracing can be included. The {@code configureGson} function can be used + * to register additional type adapters in the {@link GsonBuilder} in order to + * support protocol classes that cannot be handled by Gson's reflective + * capabilities. + * + * @param localService + * - an object on which classes RPC methods are looked up + * @param remoteInterface + * - an interface on which RPC methods are looked up + * @param in + * - inputstream to listen for incoming messages + * @param out + * - outputstream to send outgoing messages + * @param executorService + * - the executor service used to start threads + * @param wrapper + * - a function for plugging in additional message consumers + * @param configureGson + * - a function for Gson configuration + */ + public static Launcher createIoLauncher(Object localService, Class remoteInterface, InputStream in, + OutputStream out, ExecutorService executorService, Function wrapper, + Consumer configureGson) { + return new Builder() + .setLocalService(localService) + .setRemoteInterface(remoteInterface) + .setInput(in) + .setOutput(out) + .setExecutorService(executorService) + .wrapMessages(wrapper) + .configureGson(configureGson) + .create(); + } + + /** + * Launcher builder for the debug protocol. Adapts the JSON-RPC message classes to the JSON format used + * by the debug protocol. + */ + public static class Builder extends Launcher.Builder { + + @Override + protected MessageJsonHandler createJsonHandler() { + Map supportedMethods = getSupportedMethods(); + if (configureGson != null) + return new DebugMessageJsonHandler(supportedMethods, configureGson); + else + return new DebugMessageJsonHandler(supportedMethods); + } + + @Override + protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) { + try { + MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler); + outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream); + Endpoint localEndpoint = ServiceEndpoints.toEndpoint(localServices); + RemoteEndpoint remoteEndpoint; + + // !!!! nosuchfieldException that is trapped by quarkus + // check if this is a version issue ? + if (exceptionHandler == null) + remoteEndpoint = new MEPRemoteEndpoint(outgoingMessageStream, localEndpoint); + else + remoteEndpoint = new MEPRemoteEndpoint(outgoingMessageStream, localEndpoint, exceptionHandler); + jsonHandler.setMethodProvider(remoteEndpoint); + return remoteEndpoint; + } catch (Exception e) { + System.out.println(" issue in createRemoteEndpoint"+e); + e.printStackTrace(); + return null; + } + } + + } + +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLauncherParameters.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLauncherParameters.java new file mode 100644 index 000000000..4bffa82c3 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPLauncherParameters.java @@ -0,0 +1,13 @@ +package org.eclipse.gemoc.executionframework.mep.launch; + +import org.eclipse.emf.ecore.resource.Resource; + +public class MEPLauncherParameters { + + public Resource resourceModel = null; + public String modelEntryPoint = ""; + public String methodEntryPoint = ""; + public String initializationMethod = ""; + public String initializationMethodArgs = ""; + +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPRemoteEndpoint.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPRemoteEndpoint.java new file mode 100644 index 000000000..dd9d7a50f --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/MEPRemoteEndpoint.java @@ -0,0 +1,21 @@ +package org.eclipse.gemoc.executionframework.mep.launch; + +import java.util.function.Function; + +import org.eclipse.lsp4j.jsonrpc.Endpoint; +import org.eclipse.lsp4j.jsonrpc.MessageConsumer; +import org.eclipse.lsp4j.jsonrpc.debug.DebugRemoteEndpoint; +import org.eclipse.lsp4j.jsonrpc.messages.ResponseError; + +public class MEPRemoteEndpoint extends DebugRemoteEndpoint { + + public MEPRemoteEndpoint(MessageConsumer out, Endpoint localEndpoint) { + super(out, localEndpoint); + } + + public MEPRemoteEndpoint(MessageConsumer out, Endpoint localEndpoint, + Function exceptionHandler) { + super(out, localEndpoint, exceptionHandler); + } + +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/ModelLoadingMethod.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/ModelLoadingMethod.java new file mode 100644 index 000000000..abe2f12d2 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/launch/ModelLoadingMethod.java @@ -0,0 +1,6 @@ +package org.eclipse.gemoc.executionframework.mep.launch; + +public enum ModelLoadingMethod { + uri, + modelFileContent +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/IModelExecutionProtocolClient.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/IModelExecutionProtocolClient.java new file mode 100644 index 000000000..e84d234b7 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/IModelExecutionProtocolClient.java @@ -0,0 +1,12 @@ +package org.eclipse.gemoc.executionframework.mep.services; + +import org.eclipse.lsp4j.debug.services.IDebugProtocolClient; + +/** + * Declaration of client notifications for the + * Debug Adapter + * Protocol and its Model Execution Protocol extension + */ +public interface IModelExecutionProtocolClient extends IDebugProtocolClient { + +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/IModelExecutionProtocolServer.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/IModelExecutionProtocolServer.java new file mode 100644 index 000000000..ac3728cda --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/IModelExecutionProtocolServer.java @@ -0,0 +1,12 @@ +package org.eclipse.gemoc.executionframework.mep.services; + +import org.eclipse.lsp4j.debug.services.IDebugProtocolServer; + +/** + * Declaration of server requests for the + * Debug Adapter + * Protocol extended with Model Execution Protocol + */ +public interface IModelExecutionProtocolServer extends IDebugProtocolServer { + +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/ModelExecutionClientAware.java b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/ModelExecutionClientAware.java new file mode 100644 index 000000000..64bcc6107 --- /dev/null +++ b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/main/java/org/eclipse/gemoc/executionframework/mep/services/ModelExecutionClientAware.java @@ -0,0 +1,6 @@ +package org.eclipse.gemoc.executionframework.mep.services; + +public interface ModelExecutionClientAware { + + void connect(IModelExecutionProtocolClient client); +} diff --git a/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/test/resources/.gitkeep b/framework/execution_framework/pomfirst/org.eclipse.gemoc.executionframework.mep/src/test/resources/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/framework/execution_framework/pomfirst/pom.xml b/framework/execution_framework/pomfirst/pom.xml new file mode 100644 index 000000000..c14aae49e --- /dev/null +++ b/framework/execution_framework/pomfirst/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + org.eclipse.gemoc.executionframework + org.eclipse.gemoc.executionframework.pomfirst + 1.0.0-SNAPSHOT + + + org.eclipse.gemoc + org.eclipse.gemoc.modeldebugging.pomfirst + 1.0.0-SNAPSHOT + ../../../pomfirst/pom.xml + + + pom + + + org.eclipse.gemoc.executionframework.mep + + + + + + + org.eclipse.xtend + xtend-maven-plugin + ${xtend.version} + + + + compile + xtend-install-debug-info + testCompile + xtend-test-install-debug-info + + + xtend-gen + + + + + + + + + org.eclipse.jdt + org.eclipse.jdt.core + 3.13.102 + + + org.eclipse.jdt + org.eclipse.jdt.compiler.apt + 1.3.110 + + + org.eclipse.jdt + org.eclipse.jdt.compiler.tool + 1.2.101 + + + org.eclipse.emf + org.eclipse.emf.codegen + 2.11.0 + + + + + + + \ No newline at end of file diff --git a/framework/framework_commons/plugins/org.eclipse.gemoc.executionframework.reflectivetrace.model/pomfirst/pom.xml b/framework/framework_commons/plugins/org.eclipse.gemoc.executionframework.reflectivetrace.model/pomfirst/pom.xml new file mode 100644 index 000000000..a743145f7 --- /dev/null +++ b/framework/framework_commons/plugins/org.eclipse.gemoc.executionframework.reflectivetrace.model/pomfirst/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.executionframework.reflectivetrace.model + 4.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.modeldebugging.framework.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse + 3.0.0-SNAPSHOT + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.api/pomfirst/pom.xml b/framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.api/pomfirst/pom.xml new file mode 100644 index 000000000..3be986520 --- /dev/null +++ b/framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.api/pomfirst/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.xdsmlframework.api + 4.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.modeldebugging.framework.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse + 3.0.0-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.executionframework.reflectivetrace.model + 4.0.0-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.trace.commons.model + 3.0.1-SNAPSHOT + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.dsl.model + 3.0.0-SNAPSHOT + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.commons/pomfirst/pom.xml b/framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.commons/pomfirst/pom.xml new file mode 100644 index 000000000..2f6156c3c --- /dev/null +++ b/framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.commons/pomfirst/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.xdsmlframework.commons + 4.0.0-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.modeldebugging.framework.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.commons.eclipse + 3.0.0-SNAPSHOT + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/pomfirst/pom.xml b/pomfirst/pom.xml new file mode 100644 index 000000000..7a75577d0 --- /dev/null +++ b/pomfirst/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + + org.eclipse.gemoc + org.eclipse.gemoc.modeldebugging.pomfirst + 1.0.0-SNAPSHOT + + pom + + + 1.5.1 + 2.18.0 + UTF-8 + http://download.eclipse.org/releases/photon + https://download.eclipse.org/gemoc/updates/nightly + 1.8 + 1.8 + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + ../framework/execution_framework/pomfirst + ../commons/plugins/org.eclipse.gemoc.commons.eclipse/pomfirst + ../commons/plugins/org.eclipse.gemoc.commons.eclipse.messagingsystem.api/pomfirst + ../commons/plugins/org.eclipse.gemoc.commons.eclipse.pde/pomfirst + ../commons/plugins/org.eclipse.gemoc.commons.utils/pomfirst + ../commons/plugins/org.eclipse.gemoc.dsl.model/pomfirst + ../framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.debugger/pomfirst + ../framework/execution_framework/plugins/org.eclipse.gemoc.executionframework.engine/pomfirst + ../framework/framework_commons/plugins/org.eclipse.gemoc.executionframework.reflectivetrace.model/pomfirst + ../framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.api/pomfirst + ../framework/framework_commons/plugins/org.eclipse.gemoc.xdsmlframework.commons/pomfirst + ../simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug/pomfirst + ../simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.edit/pomfirst + ../simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.ide/pomfirst + ../trace/commons/plugins/org.eclipse.gemoc.trace.commons/pomfirst + ../trace/commons/plugins/org.eclipse.gemoc.trace.commons.model/pomfirst + ../trace/commons/plugins/org.eclipse.gemoc.trace.gemoc.api/pomfirst + + + + + + + org.eclipse.xtend + xtend-maven-plugin + ${xtend.version} + + + + compile + xtend-install-debug-info + testCompile + xtend-test-install-debug-info + + + xtend-gen + + + + + + + + + org.eclipse.jdt + org.eclipse.jdt.core + 3.13.102 + + + org.eclipse.jdt + org.eclipse.jdt.compiler.apt + 1.3.110 + + + org.eclipse.jdt + org.eclipse.jdt.compiler.tool + 1.2.101 + + + org.eclipse.emf + org.eclipse.emf.codegen + 2.11.0 + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + true + true + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.edit/pomfirst/pom.xml b/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.edit/pomfirst/pom.xml new file mode 100644 index 000000000..b6e72ee28 --- /dev/null +++ b/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.edit/pomfirst/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.dsl.debug.edit + 3.0.1-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + DSLDebugger + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.platform + org.eclipse.core.runtime + [3.6.0,4.0.0) + + + org.eclipse.emf + org.eclipse.emf.common + [2.16.0,3.0.0) + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.ide/pomfirst/pom.xml b/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.ide/pomfirst/pom.xml new file mode 100644 index 000000000..1b37737bd --- /dev/null +++ b/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug.ide/pomfirst/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.dsl.debug.ide + 3.0.1-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + DSLDebugger + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.platform + org.eclipse.core.runtime + [3.6.0,4.0.0) + + + org.eclipse.emf + org.eclipse.emf.common + [2.16.0,3.0.0) + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug/pomfirst/pom.xml b/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug/pomfirst/pom.xml new file mode 100644 index 000000000..81a595f91 --- /dev/null +++ b/simulationmodelanimation/plugins/org.eclipse.gemoc.dsl.debug/pomfirst/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.dsl.debug + 3.0.1-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + DSLDebugger + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + org.eclipse.platform + org.eclipse.core.runtime + [3.6.0,4.0.0) + + + org.eclipse.emf + org.eclipse.emf.common + [2.16.0,3.0.0) + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/trace/commons/plugins/org.eclipse.gemoc.trace.commons.model/pomfirst/pom.xml b/trace/commons/plugins/org.eclipse.gemoc.trace.commons.model/pomfirst/pom.xml new file mode 100644 index 000000000..25aec2b8a --- /dev/null +++ b/trace/commons/plugins/org.eclipse.gemoc.trace.commons.model/pomfirst/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.trace.commons.model + 3.0.1-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.trace.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/trace/commons/plugins/org.eclipse.gemoc.trace.commons/pomfirst/pom.xml b/trace/commons/plugins/org.eclipse.gemoc.trace.commons/pomfirst/pom.xml new file mode 100644 index 000000000..d79c8007c --- /dev/null +++ b/trace/commons/plugins/org.eclipse.gemoc.trace.commons/pomfirst/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.trace.commons + 3.0.1-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.trace.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file diff --git a/trace/commons/plugins/org.eclipse.gemoc.trace.gemoc.api/pomfirst/pom.xml b/trace/commons/plugins/org.eclipse.gemoc.trace.gemoc.api/pomfirst/pom.xml new file mode 100644 index 000000000..6607947ca --- /dev/null +++ b/trace/commons/plugins/org.eclipse.gemoc.trace.gemoc.api/pomfirst/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.eclipse.gemoc.pomfirst + org.eclipse.gemoc.trace.gemoc.api + 3.0.1-SNAPSHOT + + jar + + + scm:git:https://github.com/eclipse/gemoc-studio-modeldebugging.git + UTF-8 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + unpack + prepare-package + + unpack + + + + + org.eclipse.gemoc.trace.commons + ${project.artifactId} + ${project.version} + jar + true + ${project.build.directory}/classes + ** + + + + + + + + + + + + + + nexus-eclipse-gemoc + Nexus Eclipse GEMOC + + true + + + true + + https://repo.eclipse.org/content/groups/gemoc/ + + + \ No newline at end of file