2013-03-27 73 views
0

我試圖通過定義一個DSL並執行M2M以及M2T(代碼生成)來實現模型驅動的開發。對於代碼生成,我選擇使用XPand和模板定義。您能否提供示例代碼或鏈接到說明如何從Java代碼調用模板擴展的文檔?如何以編程方式從Java類運行Xpand代碼生成器?

P.S.我發現很難在Eclipse以外的獨立模式下運行這樣的事情,所以我開始編寫簡單的Java實用程序。

回答

1

這裏是任何有興趣的代碼:

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."); 
+0

你導入什麼包? – csadan 2017-06-14 12:02:45

相關問題