2013-03-01 6 views
0

두 개의 Eclipse 플러그인 프로젝트로 구성된 프로젝트를 진행 중입니다. 하나는 EMF 프로젝트이며 애플리케이션의 메타 모델을 포함합니다. 다른 하나는 메타 모델에서 작동하는 acctual 플러그인입니다.EMF 애플리케이션에서 사용 가능한 모델을 모두 나열하십시오

이제 메타 모델 프로젝트에서 사용할 수있는 모든 유형의 모델을 나열하는 방법을 찾고 있습니다. 기본적으로 모든 생성 된 클래스가 필요하기 때문에 메타 모델 패키지를 반복 할 때 반사를 사용할 수 있지만 더 쉬운 방법이 있으면 선호합니다.

모델은 이미이 같은 plugin.xml의 확장으로 나열됩니다

클래스 MyModelPackageEPackageorg.myproject.metamodel.MyModel를 확장 I 나열하는 데 필요한 모든 다른 생성 된 클래스가 포함
<plugin> 
    <extension point="org.eclipse.emf.ecore.generated_package"> 
     <package 
      uri="MyModel" 
      class="org.myproject.metamodel.MyModel.MyModelPackage" 
      genModel="model/MetaModel.genmodel"/> 
    </extension> 
</plugin> 

. 나는 그 정보를 사용할 수 있다고 생각하지만 아직도 어떻게해야할지 모른다.

업데이트는

내가 맡은 프로젝트 EMFStore을 기반으로합니다. 그것을 실행하면 EMFStore 퍼스펙티브가 제공됩니다. 프로젝트가있는 네비게이터보기가 있으면 해당 프로젝트를 마우스 오른쪽 단추로 클릭하고 New Model Element을 선택할 수 있습니다. 메타 모델의 모든 모델 요소가 나열 될 수 있도록 대화 상자가 열립니다. 그것은 EMFStore 어딘가 또는 그것의 의존성 중 하나에서 이루어져야합니다. 소스 코드를 살펴 보았지만 어디에서 소스 코드를 찾을 수없는 것 같습니다.

org.eclipse.emf.emfstore.perspective 프로젝트의 plugin.xml은 소스에서 찾을 수없는 클래스 org.eclipse.emf.emfstore.emfperspective.EMFStorePerspective을 말합니다. Eclipse Import Plug-Ins 및 Fragments 기능을 통해 프로젝트를 가져 왔으며 소스 폴더가 없습니다. EMFStore git 저장소에서 나는 그 프로젝트를 찾을 수조차 없다.

업데이트

지금 EPackage.Registry.INSTANCE를 사용하여 생성 된 패키지를 포함하는 레지스트리를 얻었다. 불행히도 메타 데이터 (org.myproject.metamodel)가 포함 된 프로젝트의 EPackages 이상을 포함합니다. 지금 나는 그것을 필터링하는 적절한 방법을 찾고있을 뿐이지 만 여전히 그걸 막을 수는 없다. 필터링으로

업데이트 내가 @SpaceTrucker으로 답을 받아 내 원래의 질문의 일부가 아닙니다. 내가 프로젝트에 대한 필터링하지만 다행히 모든 패키지가 같은 접두어로 시작하는 방법을 찾을 수 없습니다

Registry registry = EPackage.Registry.INSTANCE; 
for (String key : new HashSet<String>(registry.keySet())) { 
    EPackage ePackage = registry.getEPackage(key); 
    if (ePackage.getClass().getName().startsWith("org.myproject.metamodel")) { 
     //do stuf 
    } 
} 

: 호기심이 사람들을 위해, 이것은 내가 지금했던 방법이다.

답변

2

EPackages는 EPackage.Registry을 통해 등록 될 수 있습니다. ECorePlugin.getDefaultRegistryImplementation()을 통해 전 세계적으로 사용되는 인스턴스가있는 것으로 보입니다. 그러나 나는 100 % 확실하지 않습니다.

MoDisco에는 등록 된 EMF 모델을 선택할 수있는 EMF Model Browser가 제공됩니다. 그래서 당신은 또한 그 근원을 볼 수 있습니다.

+0

유망한 소리. 이 프로젝트는 이미 MoDisco에 의존하고 있습니다. 내가 다시 들여다 볼 수있을 때까지 며칠이 걸릴 것입니다. 그러나 미리 감사드립니다. –

+0

'ECorePlugin.getDefaultRegistryImplementation()'은'null'을 리턴하지만 당신의 답은 올바른 방향으로 나를 가리켰다.나는 한 걸음 더 나아가 내 질문을 편집 할 것이다. –