컨텍스트를 얻으려면 현재 ecore에서 java 모델로 변환하는 중입니다. 실제로, 일부 ecore 파일을 읽고 유효한 자바 인터페이스 소스 코드가되는 문자열을 생성합니다.ECore 반영 및 상호 참조
예를 들어, 여기 내 코드 생성 워크 플로가 있습니다.
projectA.ecore :
ECLASS는 'A'를 정의
package projectA : projectA = 'http://www.example.org/projectA'
{
class A;
}
projectB.ecore :
사용 'A'에서 상속 ECLASS 'B'를 정의 a.ecore에 대한 상호 참조로 액세스 할 수 있습니다. 그에서
import projectA : '../../projectA/model/projectA.ecore#/';
package projectB : projectB = 'http://www.example.org/projectB'
{
class B extends projectA::A;
}
는 내가 처음 projectA.ecore위한 인터페이스 생성 Ecore를 :
package projecta;
interface ProjectA<A> {
// ...
}
을 그리고 지금은 projectB.ecore을 위해 같은 일을 할 다음과 같은 인터페이스를 가져왔다 :
을package projectb;
import projecta.ProjectA;
interface ProjectB<A,B> extends ProjectA<A> {
// ...
}
이렇게하려면 A와 EClass가 상호 참조를 사용하여 액세스하고 올바른 인터페이스 확장을 생성하기 위해 projectA.ecore에서 일부 분석을 수행해야합니다 ...
나는 ecore reflection API에서 깨끗하고 명확한 방법을 찾지 않고 둘러 보았습니다. 이것이 가능한가? 그래, 어떻게?
편집 : 기술 정보
나는 이러한 종류의 코드를 사용하여 Ecore를로드하고있어이 :
final ResourceSetImpl resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new XMIResourceFactoryImpl());
final Resource resource = resourceSet.getResource(uri, true);
final EPackage ePackage = (EPackage) resource.getContents().get(0);
final String fileContent = new GenerateAlgebra().process(ePackage);
GenerateAlgebra는 문자열 변환에 .ecore 전용 클래스입니다. 기술적으로 Xtend (https://github.com/manuelleduc/ecore-oa/blob/master/fr.inria.diverse.ecorealgebragenerator/src/fr/inria/diverse/objectalgebragenerator/popup/actions/GenerateAlgebra.xtend)를 사용하여 개발되었습니다.
resourceSet.getResources()
을 반복 시도하고 가능한 EMF 생성기를 사용하지?ecore xmi를 java Objects로로드하고 proxys를 다른 EPackage의 상호 참조 된 EClayer로 해석하면 둘 사이의 연결이 성립됩니다. 어떻게하면 더 구체적으로 생성 할 수 있습니까? –아직 귀하의 문제를 완전히 이해하지 못했습니다. 연결로 Epackages를 모두로드해야합니까? B의 상위 유형 A를 식별 할 수 있도록? –
기본적으로 EClass가 정의 된 .ecore 파일을 찾을 수 있어야합니다. –