2016-08-31 11 views
1

私は既存のEMFプロジェクトにEcoreモデルを持ち、XTend経由ですべてのクラスの名前をテキストファイルに出力したいと考えています。どのようにこれを達成するのですか? XTendの例では、モデルを使用して情報を取得する方法は示されていません。XTend経由でMetamodelからコードを生成

+0

[XTendでのEMFモデルインスタンスのロード](http://stackoverflow.com/questions/12458852/load-emf-model-instance-in-xtend) –

+0

モデルのインスタンスは必要ありません。私はメタモデルのクラスが必要です。 – landunder

答えて

1

Meta-ModelのEClassesのみが必要な場合は、 YourEMFModelPackage.eINSTANCE.getEClassifiers()というモデルパッケージから取得し、EList<EClassifier>を返します。 EClassEClassifierなので、すべてのEClass実装はorg.eclipse.emf.ecore.impl.EClassImplです。 型安全性については、EDataTypesもすべてEClassifierであるため、おそらくこのリストにはEClassesのみが含まれているかどうかを確認してください。

だから、これべきトリックへ: EcoreUtil.getObjectsByType(YourEMFModelPackage.eINSTANCE.getEClassifiers(), EcorePackage.eINSTANCE.getEClass())

か:

List<EClass> allEClasses = YourEMFModelPackage.eINSTANCE.getEClassifiers().stream().filter(p -> EClass.class.isInstance(p)).map(m -> EClass.class.cast(m)).collect(Collectors.toList());

更新: あなたのモデルコードは、あなたがまだこれを行うことができるしている生成されていない場合リソースにEcoreをロードするだけで済みます:

ResourceSet resourceSet = new ResourceSetImpl(); 
    resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", 
      new EcoreResourceFactoryImpl()); 
    Resource resource = resourceSet.getResource(
      URI.createFileURI(
        "../path/to/your/Ecore.ecore"), 
      true); 
    EPackage model = (EPackage) resource.getContents().get(0); 

EPackageEClass上記のように

+0

モデルフォルダにEcoreモデルがあります。私はYourEMFModelPackageのようなJavaファイルのパッケージ名でそれを扱おうとしましたが、うまくいきません。私は間違って何をしていますか? – landunder

+0

モデルコードを生成しましたか? –

+0

この質問は、コードを生成せずにEcoreモデルで作業することは不可能であることを示しています。これは正しいですか? – landunder

関連する問題