2013-03-27 3 views
0

저는 DSL을 정의하고 M2M과 M2T (코드 생성)를 수행하여 모델 중심 개발을 달성하고자합니다. 코드 생성을 위해 필자는 XPand 및 템플릿 정의로 작업하기로했습니다. Java 코드에서 템플릿 확장을 호출하는 방법을 설명하는 샘플 코드 또는 링크를 제공 할 수 있습니까?프로그래밍 방식으로 Java 클래스에서 Xpand 코드 생성기를 실행할 수 있습니까?

P. 필자는 이클립스 밖에서 독립 실행 형 모드로 이러한 것들을 실행하는 것이 매우 어렵 기 때문에 간단한 Java 유틸리티를 작성하여 시작했다.

Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE; 
    Map<String, Object> factoryMap = reg.getExtensionToFactoryMap(); 
    factoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); 

    ResourceSet resourceSet = new ResourceSetImpl(); 
    EPackage PSM_Pkg = MyDSLPackage.eINSTANCE; 
    resourceSet.getPackageRegistry().put(PSM_Pkg.getNsURI(), PSM_Pkg); 

    Resource resource = resourceSet.getResource(Constants.PSM_URI, true); 
    EList<EObject> inObjects = resource.getContents(); 

    // Xpand 
    URI outURI = URI.createURI("file:///C:/Users/..."); 
    Output out = new OutputImpl(); 
    Outlet outlet = new Outlet(outURI.toFileString()); 
    out.addOutlet(outlet); 
    XpandExecutionContextImpl executionContext = new XpandExecutionContextImpl(out, null); 

    // Configure the metamodels 
    EmfMetaModel emfMetaModel = new EmfMetaModel(); 
    emfMetaModel.setMetaModelPackage(MyDSLlPackage.class.getName()); 
    executionContext.registerMetaModel(emfMetaModel); 
    XpandFacade xpandFacade = XpandFacade.create(executionContext); 
    Object[] params = null; 
    System.out.println(inObjects.get(0)); 
    xpandFacade.evaluate("template::Template::main", inObjects.get(0), params); 
    System.out.println("Code generated."); 

답변

1

는 관심있는 사람들을위한 코드입니다?
+0

무슨 패키지를 가져 않은 : 여기 – csadan