2012-02-21 12 views

答えて

16

あなたのメタモデルによって生成されたコードがある場合:

// register globally the Ecore Resource Factory to the ".ecore" extension 
// weird that we need to do this, but well... 
Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
    "ecore", new EcoreResourceFactoryImpl()); 

ResourceSet rs = new ResourceSetImpl(); 
// enable extended metadata 
final ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(rs.getPackageRegistry()); 
rs.getLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, 
    extendedMetaData); 

Resource r = rs.getResource(uriOfYourModel, true); 
EObject eObject = r.getContents().get(0); 
if (eObject instanceof EPackage) { 
    EPackage p = (EPackage)eObject; 
    rs.getPackageRegistry().put(p.getNsURI(), p); 
} 
:あなただけ .ecoreファイルがある場合

resourceSet.getPackageRegistry() 
    .put(org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE.getNsURI() 
    , org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE); 

(ここでは "genmodel" メタモデル用)

registerEcorePackages()、uという名前のこのコードの詳細はhereですワークスペース(ワークスペースのフルパスを含む)に.ecoreファイルをカスタムパッケージレジストリに登録してください。 EMFグローバルパッケージレジストリにメタモデルを登録する場合は、resourceSet.getPackageRegistry()EPackage.Registry.INSTANCEに置き換えてください。

+1

あなたの答えは本当にありがとうStephane :) – capint

+0

SUPERB ANSWER !!!!!!ありがとうStephane!十分に感謝することはできません..... "ecoreファイル"テクニックは、私が探しているものです! –

+0

こんにちは、ありがとうございました!コードを修正する必要がありました。詳細は私の答えを見てください。 – Andrei

1

私はそれを動作させるためのビット@sbegaudeauからコードを変更する必要がありました:

また

EPackage.Registry.INSTANCE.put(p.getNsURI(), p);

rs.getPackageRegistry().put(p.getNsURI(), p);

を交換し、何とか私は登録できません。 .ecoreタイプ。 "*"を使用していた:

関連する問題