|
|
Re: Cross-references to external EMF models [message #555897 is a reply to message #542733] |
Mon, 30 August 2010 06:53 |
Michael Frey Messages: 48 Registered: August 2010 |
Member |
|
|
Hi,
I've searched my xtext project for IResourceServiceProvider and I've only find a usage in src-gen/ in the class <Language>StandaloneSetupGenerated. So where exactely do I have to provide an implementation of IResourceServiceProvider for using an existing ecore model?
Thanks in advance!
Best regards,
Michael
Update: There is a posting by Christian Dietrich in another thread which might be helpful. I will have look at it.
[Updated on: Mon, 30 August 2010 09:10] Report message to a moderator
|
|
|
Re: Cross-references to external EMF models [message #555958 is a reply to message #542733] |
Mon, 30 August 2010 11:43 |
Michael Frey Messages: 48 Registered: August 2010 |
Member |
|
|
Hi,
I want to use an owl ecore model which resides in a directory "ressources/" in my project. Thus I've wrote in my xtext file:
import "platform:/ressources/owl.ecore" as myDSL
But the editor says "couldn't resolve reference to EPackage 'platform:/ressources/owl.ecore'".
I've followed the instructions in this posting. So far, I added to the UI Plugin.xml
<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
<resourceServiceProvider
class="de.hs_rm.cs.vs.dsm.ui.FlowExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
uriExtension="flow">
</resourceServiceProvider>
<!-- Not sure if that's working, text below is new -->
<resourceServiceProvider
class="de.hs_rm.cs.vs.dsm.ui.FlowExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
uriExtension="owl">
</resourceServiceProvider>
</extension>
and added in <Lang>StandAloneSetup.java
import com.google.inject.Injector;
/**
* Initialization support for running Xtext languages
* without equinox extension registry
*/
public class FlowStandaloneSetup extends FlowStandaloneSetupGenerated{
public static void doSetup() {
new FlowStandaloneSetup().createInjectorAndDoEMFRegistration();
}
@Override
public void register(Injector injector) {
super.register(injector);
org.eclipse.xtext.resource.IResourceServiceProvider serviceProvider = injector.getInstance(org.eclipse.xtext.resource.IResourceServiceProvider.class);
org.eclipse.xtext.resource.IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("owl", serviceProvider);
}
}
I've also created a ressource provider
import org.eclipse.emf.common.util.URI;
import org.eclipse.xtext.resource.impl.DefaultResourceServiceProvider;
public class FlowRessourceProvider extends DefaultResourceServiceProvider {
@Override
public boolean canHandle(URI uri) {
if (uri.toPlatformString(true).endsWith("owl")) {
return true;
}
return super.canHandle(uri);
}
}
and finally added that information to the runtime module
import org.eclipse.xtext.resource.IResourceServiceProvider;
/**
* Use this class to register components to be used at runtime / without the Equinox extension registry.
*/
public class FlowRuntimeModule extends de.hs_rm.cs.vs.dsm.AbstractFlowRuntimeModule {
public Class<? extends IResourceServiceProvider> bindIResourceServiceProvider() {
return FlowRessourceProvider.class;
}
}
I've also added to the *.mwe2 file
// Added
fragment = org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment {
genModels = "platform:/resource/owl.genmodel"
}
It's not working. So probably somebody has an idea?
Regards,
Michael
P.S.: I've created an genmodel from the ecore model and removed the import statement from the xtext file and I'm getting the following exception.
0 [main] INFO lipse.emf.mwe.utils.StandaloneSetup - Registering platform uri '/home/michael/Desktop/Projekte'
3100 [main] WARN erator.ecore.EcoreGeneratorFragment - The property 'genModels' is deprecated. Please use 'referencedGenModels' instead.
3122 [main] INFO ipse.emf.mwe.utils.DirectoryCleaner - Cleaning /home/michael/Desktop/Projekte/de.hs_rm.cs.vs.dsm.flow/../de.hs_rm.cs.vs.dsm.flow/src-gen
3150 [main] INFO ipse.emf.mwe.utils.DirectoryCleaner - Cleaning /home/michael/Desktop/Projekte/de.hs_rm.cs.vs.dsm.flow/../de.hs_rm.cs.vs.dsm.flow.ui/src-gen
3587 [main] INFO ipse.xtext.generator.LanguageConfig - generating infrastructure for de.hs_rm.cs.vs.dsm.Flow with fragments : ImplicitRuntimeFragment, ImplicitUiFragment, GrammarAccessFragment, EcoreGeneratorFragment, ParseTreeConstructorFragment, ResourceFactoryFragment, XtextAntlrGeneratorFragment, JavaValidatorFragment, ImportNamespacesScopingFragment, QualifiedNamesFragment, BuilderIntegrationFragment, FormatterFragment, LabelProviderFragment, TransformerFragment, OutlineNodeAdapterFactoryFragment, QuickOutlineFragment, QuickfixProviderFragment, JavaBasedContentAssistFragment, XtextAntlrUiGeneratorFragment, EcoreGeneratorFragment
48148 [main] INFO or.validation.JavaValidatorFragment - executing generate for org.eclipse.xtext.generator.validation.JavaValidatorFragment
59058 [main] ERROR erator.ecore.EcoreGeneratorFragment - Couldn't find genmodel for uri 'platform:/resource/owl.genmodel'
java.lang.RuntimeException: java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment.loadReferencedGenModels(EcoreGeneratorFragment.java:191)
at org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment.generate(EcoreGeneratorFragment.java:160)
at org.eclipse.xtext.generator.CompositeGeneratorFragment.generate(CompositeGeneratorFragment.java:81)
at org.eclipse.xtext.generator.LanguageConfig.generate(LanguageConfig.java:69)
at org.eclipse.xtext.generator.Generator.generate(Generator.java:296)
at org.eclipse.xtext.generator.Generator.invokeInternal(Generator.java:106)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:126)
at org.eclipse.emf.mwe.core.lib.Mwe2Bridge.invoke(Mwe2Bridge.java:34)
at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.invoke(AbstractWorkflowComponent.java:201)
at org.eclipse.emf.mwe2.runtime.workflow.AbstractCompositeWorkflowComponent.invoke(AbstractCompositeWorkflowComponent.java:31)
at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:80)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:52)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.substring(String.java:1937)
at org.eclipse.emf.ecore.plugin.EcorePlugin.resolvePlatformResourcePath(EcorePlugin.java:133)
at org.eclipse.emf.ecore.resource.impl.PlatformResourceURIHandlerImpl.createInputStream(PlatformResourceURIHandlerImpl.java:452)
at org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl.createInputStream(ExtensibleURIConverterImpl.java:301)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1254)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:255)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:270)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397)
at org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment$1.getResource(EcoreGeneratorFragment.java:432)
at org.eclipse.xtext.generator.ecore.EcoreGeneratorFragment.loadReferencedGenModels(EcoreGeneratorFragment.java:182)
... 14 more
59517 [main] INFO .emf.mwe2.runtime.workflow.Workflow - D
[Updated on: Mon, 30 August 2010 12:18] Report message to a moderator
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.03629 seconds