Closed MERCEmentre closed 9 years ago
There are three elements involved: Papyrus, Acceleo, and the Plug-in as well.
Two-step approach:
Note from Matthieu: Aceceleo and Papyrus for Luna will eventually not be developed much further.
Status point for step 1: I activated my contact at Obeo (company behind Acceleo) that redirected me to another person at Obeo. I sent an email and waiting for the answer.
@MERCEmentre - for what it's worth, Faiez Zalila (LAAS) also has some Acceleo experience.
An answer from Obeo was proposed (after contacting them directly): https://www.eclipse.org/forums/index.php?t=msg&th=1060450&goto=1693765&#msg_1693765
From them answer, it should work (and I trust them for that). I haven't been able to reproduce it on my own machine.
Status update: according to Axel Richard (Obeo), to make our SysML2B plug-in work in Luna "we need to execute the generator as an Eclipse "runtime" (in French: "Depuis Luna, pour que le code généré soit correct il faut juste exécuter le générateur depuis un eclipse "runtime"".). If anybody knows what it means, I would be pleased to have an explanation.
@iweigelt was able to run the plug-in in LUNA version of openETCS toolchain through an Eclipse Application.
About the need of launching the plug-in into an external run-time, from Stéphane Bégaudeau (Obeo): """ Between Eclipse Kepler and Luna, the Equinox project, the OSGi core of Eclipse, has been heavily modified. In Eclipse Kepler and before, we could deploy the generator in the current instance of Eclipse and then modify its classpath to run properly before uninstalling it after the end of the generation. Now we cannot modify the classpath of a plugin while it is running since Eclipse Luna. The classpath can only be modified when we are starting a new Eclipse runtime.
We need to modify the classpath because the Java code in your Accede generator is located in an output folder (bin most of the time) but when you are using the content of your workspace, you have the following issue: The full name of your class is com.company.mypackage.MyClass yet, it is located in bin/com/company/mypackage/MyClass
If the classpath is not modified the JVM cannot find the class named com.company.mypackage.MyClass because it is not in com/company/mypackage/MyClass but we could not use the class with the name bin.com.company.mypackage.MyClass because even if it exists at the proper location, it does not have a name which matches this location (and on top of this, you would have to rename your class and the location where it is imported while building your jars).
The Eclipse Java Development Tool keeps a list of the output folders of your Java projects to modify the classpath of those projects once deployed as a plugin in another runtime when this other runtime is starting. Since the Eclipse platform does not offer anymore the ability to modify the classpath of a plugin currently installed, we cannot support this behavior anymore.
Thus you can use your generator in stand alone with the Java application launch without having to launch a new runtime, or you have to launch a new runtime. If you want to use the Java application launch, you may have to make some additional work in order to properly configure EMF before the launch of your generation in the method registerPackage and registerResourceFactory of your Java launcher. """
@iweigelt instructions to run the tool using latest version of openETCS toolchain on a trial project: """ You can download the new binaries from: https://openetcs.ci.cloudbees.com/job/openETCS-tycho-LUNA/lastSuccessfulBuild/artifact/tool/bundles/org.openetcs.releng.products/target/ I also attached an updated Generator Plug-In. (Only removed an unneeded dependency)
There are still a few things i am trying to simplify, but for now you can use the following workflow to generate the B files:
Here is the code (provided by @iweigelt) needed to execute the plug-in as Eclipse Application:
package test_simplecoffeemachinemodelgenerator;
import java.io.File;
import java.util.ArrayList;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import org.openetcs.sysml2b.transformation.common.main.M_MainSysMLTransform;
/**
* This class controls all aspects of the application's execution
*/
public class Application implements IApplication {
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
*/
public Object start(IApplicationContext context) throws Exception {
String targetDirectory = "/tmp/TARGET_DIRECTORY";
String inputModel = "FULL_PATH_TO_MODEL.uml";
URI modelURI = URI.createFileURI(inputModel);
File folder = new File(targetDirectory);
M_MainSysMLTransform generator = new M_MainSysMLTransform(modelURI, folder, new ArrayList<String>());
generator.doGenerate(new BasicMonitor());
return IApplication.EXIT_OK;
}
/* (non-Javadoc)
* @see org.eclipse.equinox.app.IApplication#stop()
*/
public void stop() {
// nothing to do
}
}
We now have a way to demonstrate code generation, we can close this issue.
SysML2B translator does not work in Luna. The machines are generated but input/output operations and associated scheduling operations are missing (thank you @MariellePetitDoche for finding it).
We currently tracked it down to an impossibility to access the FlowPort stereotype of the model. In fact, we don't have access to all stereotypes.
This is an Acceleo issue, but we don't know how to solve it.
We asked about this issue in Eclipse M2T forum, without any help so far: https://www.eclipse.org/forums/index.php/t/1060450/