Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » TMF (Xtext) » [MWE2] Accessing Models within a model
[MWE2] Accessing Models within a model [message #675724] Wed, 01 June 2011 10:01 Go to next message
Sundeep Ramesh is currently offline Sundeep RameshFriend
Messages: 8
Registered: May 2011
Location: Bangalore, India
Junior Member
Hi, I am a newbie in MWE and XPand. I have 3 ecore files, one service.ecore containing a Service DSL, one requiredinterface.ecore for Required Interface and one Mapping ecore to map the attributes from the service DSL to the Required interface dsl. (Please find the files as attachements)

I have 3 models modeled from the respective metamodels (Please find attached the model files CIFS_GetDetailForCifs_1.corba and customer.requiredinterface) and the third mapping model


<?xml version="1.0" encoding="UTF-8"?>
<bom2servicesmapping:BOM2ServicesMapping 
	.........
<requiredInterface href="platform:/resource/com.csg.crs.carat.customer/model/customer.requiredinterface#/"/>
  <services href="platform:/resource/com.csg.cifs.getdetailforcifs.service/model/CIFS_GetDetailForCifs_1.corba#/0"/>
  <attributeMapping identifier="bom2servicemapping.customerBomServiceMapper.cifNumber" localIdentifier="cifNumber" name="Cif Number">
    <interfaceAttribute href="platform:/resource/com.csg.crs.carat.customer/model/customer.requiredinterface#//@attributes.1"/>
    <serviceAttribute href="platform:/resource/com.csg.cifs.getdetailforcifs.service/model/CIFS_GetDetailForCifs_1.corba#/0/@output/@structureReferences.0/@structure/@subStructureReferences.0/@structure/@subStructureReferences.0/@structure/@attributes.0"/>
  </attributeMapping>
</bom2servicesmapping:BOM2ServicesMapping>


The template file
«IMPORT bom2servicesmapping»

«DEFINE main FOR bom2servicesmapping::BOM2ServicesMapping»
	«FILE "com/csg/crs/carat/customer/mapping/" + localIdentifier.toFirstUpper() + ".java"»
	package com.csg.crs.carat.customer.mapping;
	public class «name.toFirstUpper()» {
		«FOREACH this.attributeMapping AS e»
			private String «e.localIdentifier»;
		«ENDFOREACH»
	}
	«ENDFILE»
«ENDDEFINE»


and the workflow file

module template.CustomerGenerator

Workflow {
	
	bean = org.eclipse.emf.mwe.utils.StandaloneSetup {
		platformUri =".."
		scanClassPath = true
	}
	
	component = org.eclipse.emf.mwe.utils.DirectoryCleaner {
		directory = "src-gen"
	}
	
	component = org.eclipse.emf.mwe.utils.Reader{
		uri = "platform:/resource/com.csg.crs.carat.customerbomservicemapper/model/CustomerBomServiceMapper.bom2servicesmapping"
		modelSlot = "model"
	}
	
	component = org.eclipse.xpand2.Generator {
		metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel{
			metaModelFile = "platform:/resource/com.csg.crs.carat.requiredinterface.mapping/src/metamodel/BOM2ServicesMapping.ecore"
		}
		expand = "template::CustomerMappingTemplate::main FOR model"
		outlet = {
			path = "src-gen"
			postprocessor =org.eclipse.xpand2.output.JavaBeautifier{
				configFile = "eclipse-formatter.xml"
				} 
		}
	}
}


The mapping model has references to two other models. The issue is that in the template I get access to their metamodels but when I try to generate code using MWE2 the reference models return null i.e. no data, I do not get any exception so I am not clear on what I need to do.

Any help here would be greatly appreciated.

Thanking you in advance.

[Updated on: Wed, 01 June 2011 10:03]

Report message to a moderator

Re: [MWE2] Accessing Models within a model [message #675882 is a reply to message #675724] Wed, 01 June 2011 19:43 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Hi,

what about adding a
metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel{
     metaModelFile = "platform:/resource/com.csg.crs.carat.requiredinterface.mapping/src/metamodel/BOM2ServicesMapping.ecore"
}

foreach metamodel?

~Christian



Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: [MWE2] Accessing Models within a model [message #676193 is a reply to message #675882] Fri, 03 June 2011 06:58 Go to previous messageGo to next message
Sundeep Ramesh is currently offline Sundeep RameshFriend
Messages: 8
Registered: May 2011
Location: Bangalore, India
Junior Member
Hi Christian,
Thank you for the help. It worked by declaring the other meta models required. But I am getting an exception now


224310 ERROR AbstractExpressionsUsingWorkflowComponent - The value of type 'class org.eclipse.emf.ecore.impl.DynamicEObjectImpl' must be of type 'org.eclipse.emf.ecore.impl.EClassImpl@785526 (name: Attribute) (instanceClassName: null) (abstract: false, interface: false)'
java.lang.ClassCastException: The value of type 'class org.eclipse.emf.ecore.impl.DynamicEObjectImpl' must be of type 'org.eclipse.emf.ecore.impl.EClassImpl@785526 (name: Attribute) (instanceClassName: null) (abstract: false, interface: false)'
	at org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateSingleEObject.dynamicGet(EStructuralFeatureImpl.java:2345)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1037)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1021)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1013)
	at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eGet(BasicEObjectImpl.java:1008)
	at org.eclipse.xtend.typesystem.emf.EClassType$1.get(EClassType.java:71)
	at org.eclipse.internal.xtend.expression.ast.FeatureCall.evaluateInternal(FeatureCall.java:121)
	at org.eclipse.internal.xtend.expression.ast.Expression.evaluate(Expression.java:50)
	at org.eclipse.internal.xtend.expression.ast.FeatureCall.evaluateInternal(FeatureCall.java:106)
	at org.eclipse.internal.xtend.expression.ast.Expression.evaluate(Expression.java:50)
	at org.eclipse.internal.xpand2.ast.ExpressionStatement.evaluateInternal(ExpressionStatement.java:45)
	at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
	at org.eclipse.internal.xpand2.ast.ForEachStatement.evaluateInternal(ForEachStatement.java:121)
	at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
	at org.eclipse.internal.xpand2.ast.FileStatement.evaluateInternal(FileStatement.java:86)
	at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
	at org.eclipse.internal.xpand2.ast.AbstractDefinition.evaluate(AbstractDefinition.java:180)
	at org.eclipse.internal.xpand2.ast.ExpandStatement.invokeDefinition(ExpandStatement.java:246)
	at org.eclipse.internal.xpand2.ast.ExpandStatement.evaluateInternal(ExpandStatement.java:226)
	at org.eclipse.internal.xpand2.ast.Statement.evaluate(Statement.java:41)
	at org.eclipse.xpand2.Generator.invokeInternal2(Generator.java:333)
	at org.eclipse.xtend.expression.AbstractExpressionsUsingWorkflowComponent.invokeInternal(AbstractExpressionsUsingWorkflowComponent.java:239)
	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:35)
	at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:97)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:73)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:64)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:55)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:74)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:35)
224310 ERROR AbstractExpressionsUsingWorkflowComponent - Error in Component  of type org.eclipse.xpand2.Generator: 
	EvaluationException : The value of type 'class org.eclipse.emf.ecore.impl.DynamicEObjectImpl' must be of type 'org.eclipse.emf.ecore.impl.EClassImpl@785526 (name: Attribute) (instanceClassName: null) (abstract: false, interface: false)'
	template::CustomerMappingTemplate.xpt[328,18] on line 8 'e.interfaceAttribute'
	[23,56] on line 1 'EXPAND template::CustomerMappingTemplate::main FOR model' 


I looked for a solution for the same and I found 'SlotCopier' but am not sure how to use the same with MWE2

~Sundeep Ramesh
Re: [MWE2] Accessing Models within a model [message #676200 is a reply to message #676193] Fri, 03 June 2011 07:37 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Hi,

can you plz post your current workflow?

~Christian


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
(no subject) [message #676204 is a reply to message #676193] Fri, 03 June 2011 07:37 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
Hi,

Update: I guess you need a workflow like

Workflow {
	
	bean = org.eclipse.emf.mwe.utils.StandaloneSetup {
		platformUri = ".."
		registerEcoreFile="platform:/resource/com.csg.dsl.fw.base/model/base.ecore"
		registerEcoreFile="platform:/resource/com.csg.dsl.corba/model/corba.ecore"
		registerEcoreFile="platform:/resource/com.csg.crs.carat.dsl.requiredinterface/model/requiredinterface.ecore"
		registerEcoreFile="platform:/resource/com.csg.crs.carat.requiredinterface.mapping/model/BOM2ServicesMapping.ecore"	
	}
	
	component = org.eclipse.emf.mwe.utils.Reader {
		uri = "platform:/resource/com.csg.crs.carat.requiredinterface.mapping/model/CustomerBomServiceMapper.bom2servicesmapping"
		modelSlot = "model"
	}
	
	component = org.eclipse.xpand2.Generator {
		metaModel = org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel {}
		expand = "templates::template::Main FOR model"
		outlet = {
			path = "src-gen"
		}
	}
}


~Christian


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de

[Updated on: Fri, 03 June 2011 08:36]

Report message to a moderator

Re: (no subject) [message #676230 is a reply to message #676204] Fri, 03 June 2011 10:00 Go to previous messageGo to next message
Sundeep Ramesh is currently offline Sundeep RameshFriend
Messages: 8
Registered: May 2011
Location: Bangalore, India
Junior Member
Hi Christian,

Changed the code as per your suggestion
Workflow {
	bean = org.eclipse.emf.mwe.utils.StandaloneSetup {
		platformUri = ".."
		registerEcoreFile="platform:/resource/com.csg.dsl.fw.base/model/base.ecore"
		registerEcoreFile="platform:/resource/com.csg.dsl.corba/model/corba.ecore"
		registerEcoreFile="platform:/resource/com.csg.crs.carat.dsl.requiredinterface/model/requiredinterface.ecore"
		registerEcoreFile="platform:/resource/com.csg.crs.carat.requiredinterface.mapping/model/BOM2ServicesMapping.ecore"
		scanClassPath=true
	}
	component = org.eclipse.emf.mwe.utils.DirectoryCleaner {
		directory = "src-gen"
	}
	component = org.eclipse.emf.mwe.utils.Reader {
		uri =
		"platform:/resource/com.csg.crs.carat.customerbomservicemapper/model/CustomerBomServiceMapper.bom2servicesmapping"
		modelSlot = "model"
	}
	component = org.eclipse.xpand2.Generator {
//		metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel {
//			metaModelFile = "platform:/resource/com.csg.dsl.corba/model/corba.ecore"
//		}
//		metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel {
//			metaModelFile = "platform:/resource/com.csg.crs.carat.dsl.requiredinterface/model/requiredinterface.ecore"
//		}
//		metaModel = org.eclipse.xtend.typesystem.emf.EmfMetaModel {
//			metaModelFile =
//			"platform:/resource/com.csg.crs.carat.requiredinterface.mapping/src/metamodel/BOM2ServicesMapping.ecore"
//		}
		expand = "template::CustomerMappingTemplate::main FOR model"
		outlet = {
			path = "src-gen"
		}
	}
}


After the change I get the following error

2252 ERROR AbstractExpressionsUsingWorkflowComponent - Error in Component  of type org.eclipse.xpand2.Generator: 
	EvaluationException : No Definition 'template::CustomerMappingTemplate::main for org::eclipse::emf::ecore::impl::DynamicEObjectImpl' found!
	[23,56] on line 1 'EXPAND template::CustomerMappingTemplate::main FOR model'

2267 ERROR Mwe2Launcher       - Problems running workflow template.CustomerGenerator: No Definition 'template::CustomerMappingTemplate::main for org::eclipse::emf::ecore::impl::DynamicEObjectImpl' found!
java.lang.RuntimeException: Problems running workflow template.CustomerGenerator: No Definition 'template::CustomerMappingTemplate::main for org::eclipse::emf::ecore::impl::DynamicEObjectImpl' found!
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:99)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:73)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:64)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:55)
	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: org.eclipse.emf.mwe.core.WorkflowInterruptedException: No Definition 'template::CustomerMappingTemplate::main for org::eclipse::emf::ecore::impl::DynamicEObjectImpl' found!
	at org.eclipse.xtend.expression.AbstractExpressionsUsingWorkflowComponent.invokeInternal(AbstractExpressionsUsingWorkflowComponent.java:247)
	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:35)
	at org.eclipse.emf.mwe2.runtime.workflow.Workflow.run(Workflow.java:19)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:97)
	... 5 more
Re: (no subject) [message #676252 is a reply to message #676230] Fri, 03 June 2011 12:08 Go to previous messageGo to next message
Christian Dietrich is currently offline Christian DietrichFriend
Messages: 14665
Registered: July 2009
Senior Member
hi,

your workflow is missing
		metaModel = org.eclipse.xtend.typesystem.emf.EmfRegistryMetaModel {}


~Christian


Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
Re: (no subject) [message #676262 is a reply to message #676252] Fri, 03 June 2011 12:50 Go to previous message
Sundeep Ramesh is currently offline Sundeep RameshFriend
Messages: 8
Registered: May 2011
Location: Bangalore, India
Junior Member
Hi Christian,
Thank you for all your help. Now I am able to access the data from one of the dependent models but not able from another model. I am looking into it now.

~Sundeep Ramesh
Previous Topic:generate wrong meta-model
Next Topic:How to check on source name?
Goto Forum:
  


Current Time: Thu Apr 25 19:35:26 GMT 2024

Powered by FUDForum. Page generated in 0.03117 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top