multiple packages problem [message #710118] |
Thu, 04 August 2011 14:14  |
Eclipse User |
|
|
|
Hello Friends,
I'm using ACCELEO for model-to-text transformation. But, I'm facing problem which is in fact due to selection of main package (I have an Ecore model which has multiple packages and is hierarchically organized as tree of packages and classes). Does ACCELEO support transformation of models with multiple hierarchical packages? I'm really stuck with this problem and would be very thankful for any hints, suggestions or comments.
Regards,
Atif/
|
|
|
|
|
Re: multiple packages problem [message #711498 is a reply to message #710601] |
Sat, 06 August 2011 04:00   |
Eclipse User |
|
|
|
Hey Laurent, Edward
Thanks you very much for reply. Actually, I have an EMF model, which is organized as a set of packages as tree. I'm using ECORE model for generating text; model looks similar like:

Each Epackage in model have NSURI which looks alike: http:///schemas/sampleuri/_PfAJsMe6Ed-7etIj5eTw0Q/19. Meta-model URI's (NSURI's of main-package as well as sub-packages is available at meta-model list after clicking Runtime Version checkbox during creation of new ACCELEO project). Moreover, I'm able to select corresponding classes from Type drop down list. ACCELEO template also did not provide any kind of error and I'm able to select attributes. Everything works fine until that point.
I have written following lines of code in registerpackages method for registration of meta-model (main package).
if (!isInWorkspace(it.unipd.chess.chessmlprofile.chessmlprofilePackage.class)) {
resourceSet.getPackageRegistry().put(epackageMyprofile.eINSTANCE.getNsURI(),epackageMyprofile.eINSTANCE);
}
Moreover, following line in written in register resource factories method:
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", epackageMyprofile.eINSTANCE);
But, problems occurred, when I select ACCELEO Model-to-text -> Generate option by right click at either .uml or .di (Papyrus) model. So, problem occurs upon running a simple template which is using my EMF model (generation of model-to-text fails and errors listed below are printed on my console).
...................................................... Console Errors + Transformation Failed .....................................................
!ENTRY org.eclipse.acceleo.module.sample.ui 4 0 2011-08-06 09:07:25.153
!MESSAGE
!STACK 0
java.lang.reflect.InvocationTargetException
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507)
at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:275)
at org.eclipse.ui.internal.progress.ProgressManager$5.run(ProgressManager.java:960)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:995)
at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:970)
at org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:1166)
at org.eclipse.acceleo.module.sample.ui.popupMenus.AcceleoGenerateSampleAction.run(AcceleoGenerateSampleAction.java:91)
at org.eclipse.ui.actions.ActionDelegate.runWithEvent(ActionDelegate.java:70)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:241)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Caused by: org.eclipse.acceleo.engine.AcceleoEvaluationException: The type of the first parameter of the main template named 'generateElement' is a proxy.
at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:507)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:175)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:154)
at org.eclipse.acceleo.module.sample.main.Generate.doGenerate(Generate.java:193)
at org.eclipse.acceleo.module.sample.ui.common.GenerateAll.doGenerate(GenerateAll.java:94)
at org.eclipse.acceleo.module.sample.ui.popupMenus.AcceleoGenerateSampleAction$1.run(AcceleoGenerateSampleAction.java:76)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Root exception:
org.eclipse.acceleo.engine.AcceleoEvaluationException: The type of the first parameter of the main template named 'generateElement' is a proxy.
at org.eclipse.acceleo.engine.service.AcceleoService.doGenerate(AcceleoService.java:507)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.generate(AbstractAcceleoGenerator.java:175)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.doGenerate(AbstractAcceleoGenerator.java:154)
at org.eclipse.acceleo.module.sample.main.Generate.doGenerate(Generate.java:193)
at org.eclipse.acceleo.module.sample.ui.common.GenerateAll.doGenerate(GenerateAll.java:94)
at org.eclipse.acceleo.module.sample.ui.popupMenus.AcceleoGenerateSampleAction$1.run(AcceleoGenerateSampleAction.java:76)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
..................................................................... End Console ......................................................................................
Some errors printed on console are probably due to root exception. Hierarchy of EMF model into multiple packages is important for us in our system (even though EMF doesn't recommend that). Is there any way to generate code from this kind of EMF model? (I am currently selecting main package URI as meta-model; I think now I briefly described my problem. Will wait for your answer or suggestions for removing errors.
Regards,
Atif/
|
|
|
|
Re: multiple packages problem [message #713170 is a reply to message #711665] |
Mon, 08 August 2011 03:16  |
Eclipse User |
|
|
|
Hi Atif,
You will have more than one "strange" problem with these registration. Your EPackage is properly registered, but the resource factory will prevent any ecore file to be loaded.
-----
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", epackageMyprofile.eINSTANCE);
-----
First things first, never change someone else's resource factory. "ecore" is not your extension (or if it is, you should change it), and changing its resource factory will make not only your tool fail, but a number of others along with it. Furthermore, what you should register here is not a package (epackageMyprofile.eINSTANCE), but rather a resource factory (new XYZResourceFactoryImpl()).
The line should look like
-----
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(myExtension, resourceFactory);
-----
However, if you do not have a custom Resource for your model (you haven't selected the "resource type" in the genmodel), you do not even need to add a single line to the "registerResourceFactories" method.
Laurent Goubet
Obeo
|
|
|
Powered by
FUDForum. Page generated in 0.06080 seconds