How do I create an EAttribute whose data type is n

2020-06-03 09:11发布

问题:

Using EMF, I'd like to define an attribute whose data type (EType) is external to my EMF model. That is, the type I want is a normal hand-coded Java class that is not part of my EMF model. Using AnySimpleType is a last resort. I want more type-safety (and less type casting) than using a generic Object provides.

Eclipse's Properties editor restricts EType to a predefined set of values. I can neither enter my own class name nor find a way to add the class I want to the list of options.

回答1:

You can add a data type to eCore models by manually adding an eClassifiers entry to the *.ecore file. (I was unable to find a mechanism to do this through the Eclipse UI.)

For example:

<eClassifiers xsi:type="ecore:EDataType"
 name="MyClass" instanceClassName="my.package.MyClass"/>

This will make the class available as an option for the EType in the Properties editor for EAttributes. It does not appear to make it available for EReferences.



回答2:

Assuming you're using Xcore as your modelling language, then use

import java.util.Date
...
type Date wraps Date

Now Date can be used as a data type for attributes in line with String and int.

You do the same with Ecore, except that you don't have to explicitly import the type first - e.g.

<eClassifiers xsi:type="ecore:EDataType" name="Date"
   instanceClassName="java.util.Date" serializable="false"/>


回答3:

I am using Eclipse Kepler with EMF 2.9.1.

Adding to Michael's answer, in the Ecore Model Editor you can just right click and choose

New Child -> EData Type

and then fill in your values in the Properties view (Name, Instance Type Name). So you don't have to do add it manually anymore.