Home » Archived » M2M (model-to-model transformation) » inter-model references - java code
inter-model references - java code [message #62411] |
Tue, 25 September 2007 14:40  |
Eclipse User |
|
|
|
Originally posted by: heggly.gmx.net
Hi everyone,
Im using inter-model references in my metamodel. After enabling inter-model
references in the launch configuration
everything works fine. I only get problems when trying to invoke the
transformation with java:
Im trying to load a model conforming to ecore with the following java code:
AtlEMFModelHandler amh =
(AtlEMFModelHandler)AtlModelHandler.getDefault(AtlModelHandl er.AMH_EMF);
ASMModel model = amh.loadModel("IN", amh.getMof(), modelURI);
which gives me the exception:
org.eclipse.m2m.atl.drivers.emf4atl.ASMEMFModel addReferencedExtentsFor
WARNUNG: Resource for org.eclipse.emf.ecore.impl.EClassImpl@10bbf9e
(eProxyURI:
http://.../language/componentmodel.ecore#//AbstractFragmentT ype) is null;
cannot be referenced
Are inter-model references not supported at all or is there any way to do
this?
Best regards,
Felix F
|
|
| | |
Re: [ATL] inter-model references - java code [message #62543 is a reply to message #62411] |
Wed, 26 September 2007 04:35   |
Eclipse User |
|
|
|
Felix Förster schreef:
> Hi everyone,
>
Hi Felix,
> Im using inter-model references in my metamodel. After enabling inter-model
> references in the launch configuration
> everything works fine. I only get problems when trying to invoke the
> transformation with java:
>
> Im trying to load a model conforming to ecore with the following java code:
>
> AtlEMFModelHandler amh =
> (AtlEMFModelHandler)AtlModelHandler.getDefault(AtlModelHandl er.AMH_EMF);
> ASMModel model = amh.loadModel("IN", amh.getMof(), modelURI);
>
> which gives me the exception:
> org.eclipse.m2m.atl.drivers.emf4atl.ASMEMFModel addReferencedExtentsFor
> WARNUNG: Resource for org.eclipse.emf.ecore.impl.EClassImpl@10bbf9e
> (eProxyURI:
> http://.../language/componentmodel.ecore#//AbstractFragmentT ype) is null;
> cannot be referenced
>
> Are inter-model references not supported at all or is there any way to do
> this?
The error you get happens when the meta-model is not found/loaded. If
you're using an Ecore meta-model by URI, ATL waits for Eclipse to load
and register the meta-model. As soon as you load your model, its Ecore
meta-model should be available. Apparently, this did not happen in your
case.
Outside Eclipse, you must load and register Ecore meta-models yourself:
http://wiki.eclipse.org/index.php/EMF-FAQ#I_get_a_PackageNot FoundException:_e.g..2C_.22Package_with_uri_.27http:.2F.2Fco m.example.company.ecore.27_not_found..22_What_do_I_need_to_d o.3F
>
> Best regards,
> Felix Förster.
>
>
Hope this helps..
Dennis
|
|
| | |
Re: [ATL] inter-model references - java code [message #62737 is a reply to message #62691] |
Wed, 26 September 2007 16:24   |
Eclipse User |
|
|
|
Hi,
> I have got one problem left though:
>
> ATL looks like this:
>
> module Test;
> create OUT : Persons from IN1 : MOF, IN2 : MOF2;
>
> i.e. I want to use two input models with internal names "MOF" and "MOF2"
> conforming to the EMF metamodel. In the launch configuration I can
simply
> select the checkbox "is metamodel" (handler is EMF) for both MOF and
MOF2
> and then specify the input files IN1 and IN2. Works fine.
> With java code I try to use "handler.getMOF()" to get the metamodel.
This
> only works fine for the first input model since its default name "MOF"
> corresponds to the internal name used in the module.
> If I try that with the second model I get the error "message: cannot
find
> model MOF2". How can I solve this?
> I somehow need to change the name of the "handler.getMOF()" returned
object
> to "MOF2".
> Is that possible? How? If not, can I load a new model with name
"MOF2" which
> is the EMF metamodel? How would I do that?
The name of the metamodel in the ATL program (e.g., MOF, MOF2) should be
used as the key when you build the map of models.
For instance:
Map models = new HashMap();
models.put("MOF", handler.getMOF());
models.put("MOF2", handler.getMOF());
May I ask why you use two different names instead of just one?
> I hope this was comprehendible.
Hopefully, this message answers your question ;-).
Regards,
Frédéric Jouault
|
|
|
Re: [ATL] inter-model references - java code [message #62801 is a reply to message #62737] |
Thu, 27 September 2007 08:01   |
Eclipse User |
|
|
|
Originally posted by: heggly.gmx.net
Hey,
> Hi,
>
>
> The name of the metamodel in the ATL program (e.g., MOF, MOF2)
> should be used as the key when you build the map of models.
> For instance:
>
> Map models = new HashMap();
> models.put("MOF", handler.getMOF());
> models.put("MOF2", handler.getMOF());
>
OK. I thought the name of the metamodel (returned by
"model.getName()") should be the name of the metamodel in the ATL
program.
>
> May I ask why you use two different names instead of just one?
>
Well, I simply want to have to different matching rules for two
different input models.
e.g.
--matches Eclasses from inputModel IN
from
class: MOF!EClass
to ....
and
--matches EClasses from inputModel IN2
from
class : MOF2!EClass
to...
Am I doing something too complicated? But it works now!
2)
I use
handler.saveModel(model, uri);
to save back the ecore file.
The file is saved to the right place but I still get a
ResourceException whether the file exists or not. Does anyone know
where that comes from?
(see below)
Thanks, regards,
Felix.
Resource
'/Dokumente%20und%20Einstellungen/ich/workspace/ATLInvocatio n/models/test.ecore'
does not exist.
org.eclipse.core.internal.resources.ResourceException: Resource
'/Dokumente%20und%20Einstellungen/ich/workspace/ATLInvocatio n/models/test.ecore'
does not exist.
at
org.eclipse.core.internal.resources.Resource.checkExists(Res ource.java:310)
at
org.eclipse.core.internal.resources.Resource.checkAccessible (Resource.java:193)
at
org.eclipse.core.internal.resources.Resource.setDerived(Reso urce.java:1478)
at
org.eclipse.m2m.atl.engine.AtlEMFModelHandler.saveModel(AtlE MFModelHandler.java:145)
at
org.eclipse.m2m.atl.engine.AtlEMFModelHandler.saveModel(AtlE MFModelHandler.java:61)
at atlinvocation.main.ATLInvocation.saveModel(ATLInvocation.jav a:108)
at
atlinvocation.actions.SampleAction.testComogen(SampleAction. java:113)
at atlinvocation.actions.SampleAction.run(SampleAction.java:46)
at
org.eclipse.ui.internal.PluginAction.runWithEvent(PluginActi on.java:256)
at
org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPl uginAction.java:229)
at
org.eclipse.jface.action.ActionContributionItem.handleWidget Selection(ActionContributionItem.java:545)
at
org.eclipse.jface.action.ActionContributionItem.access$2(Act ionContributionItem.java:490)
at
org.eclipse.jface.action.ActionContributionItem$6.handleEven t(ActionContributionItem.java:443)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :3293)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:22 19)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at
org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:289)
at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:461)
at
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:149)
at
org.eclipse.ui.internal.ide.application.IDEApplication.start (IDEApplication.java:106)
at
org.eclipse.equinox.internal.app.EclipseAppHandle.run(Eclips eAppHandle.java:153)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:106)
at
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:76)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:363)
at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:176)
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: 504)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:443)
at org.eclipse.equinox.launcher.Main.run(Main.java:1169)
at org.eclipse.equinox.launcher.Main.main(Main.java:1144)
|
|
|
Re: [ATL] inter-model references - java code [message #62817 is a reply to message #62801] |
Thu, 27 September 2007 09:24   |
Eclipse User |
|
|
|
Hi,
>> The name of the metamodel in the ATL program (e.g., MOF, MOF2)
>> should be used as the key when you build the map of models.
>> For instance:
>>
>> Map models = new HashMap();
>> models.put("MOF", handler.getMOF());
>> models.put("MOF2", handler.getMOF());
>>
>
> OK. I thought the name of the metamodel (returned by
> "model.getName()") should be the name of the metamodel in the ATL
> program.
>
This was originally the case. However, ATL now supports complex
transformation chaining (e.g., using ant scripts), which makes this
inappropriate.
>> May I ask why you use two different names instead of just one?
>>
>
> Well, I simply want to have to different matching rules for two
> different input models.
> e.g.
> --matches Eclasses from inputModel IN
> from
> class: MOF!EClass
> to ....
>
> and
> --matches EClasses from inputModel IN2
> from
> class : MOF2!EClass
> to...
>
> Am I doing something too complicated? But it works now!
Well, if you are using ATL 2006, then you could do something like:
--matches Eclasses from inputModel IN
from
class: MOF!EClass in IN1
to ....
and
--matches EClasses from inputModel IN2
from
class : MOF!EClass in IN2
to...
> 2)
> I use
> handler.saveModel(model, uri);
> to save back the ecore file.
> The file is saved to the right place but I still get a
> ResourceException whether the file exists or not. Does anyone know
> where that comes from?
> (see below)
You may need to update to a more recent version (e.g., CVS HEAD).
Regards,
Frédéric Jouault
|
|
| |
Re: [ATL] inter-model references - java code [message #63142 is a reply to message #62874] |
Fri, 28 September 2007 15:11  |
Eclipse User |
|
|
|
Hi,
> Actually I have two helpers that traverse MOF and MOF2 respectively
> searching for EClasses with a certain name:
>
> let coll : Sequence(MOF!EClass) =
> MOF!EClass.allInstances()->asSequence()->select(...
> and
> let coll : Sequence(MOF2!EClass) =
> MOF2!EClass.allInstances()->asSequence()->select(...
>
> I tried (MOF!EClass in IN2).allInstances()->asSequence()->select(...
> that does not work.
>
> Can I still use just one name for the model and use the helpers?
I would suggest using allInstancesFrom:
let coll : Sequence(MOF!EClass) =
MOF!EClass.allInstancesFrom('IN1')->asSequence()->select(...
and
let coll : Sequence(MOF2!EClass) =
MOF2!EClass.allInstancesFrom('IN2')->asSequence()->select(...
Regards,
Frédéric Jouault
|
|
|
Goto Forum:
Current Time: Tue May 06 00:28:46 EDT 2025
Powered by FUDForum. Page generated in 0.06209 seconds
|