2012-10-13 27 views
2

我已經開始使用Eclipse了,而且我仍然是初學者。所以我想從這裏得到一些幫助。 我使用Xtext來讀取我的DSL。然後我想用一個我已經用GMF定義的圖表來展示實例。但Xtext中的ecore(MFilesystem)和GMF中的ecore(Filesystem)是不同的。所以我使用Xtend來改變模型並創建一個EObject(文件系統)。但我不知道,GMF如何使用Xtent的資源創建圖表。我告訴我的問題就在這裏:如何使用Xtext(帶Xtend的M2M)和GMF創建圖表? (初學者)

1:我已經定義在XTEXT(Grammmar)Ecore元:

grammar org.xtext.Filesystem with org.eclipse.xtext.common.Terminals 

generate filesystem "http://www.xtext.org/Filesystem" 

MFilesystem: 
(mfiles+=MFile | mfolder+=MFolder)* ; 

MFile: 
'myfile' name=ID ';' 
; 

MFolder: 
'myfolder' name = ID ';' 
; 

http://i.stack.imgur.com/QrFrk.jpg

2:我在GMF

http://farm9.staticflickr.com/8048/8082263442_149b8e8b0f.jpg

定義Ecore元

http://farm9.staticflickr.com/8336/8082305888_824c467570.jpg

3:我嘗試運行運行時間的Xtext

http://farm9.staticflickr.com/8475/8082313936_d06206d838.jpg

,並從我的DSL文件(test.filesystem)創建diagramm。

http://farm9.staticflickr.com/8323/8082338379_f35894ba57_z.jpg

4:然後我有這個問題

http://farm9.staticflickr.com/8332/8082347529_3ca68fd520.jpg

5:所以我嘗試使用的Xtend改變我的模型的Xtext

http://farm9.staticflickr.com/8476/8082347146_dc220f9ca9.jpg

package org.xtext.generator 

import org.eclipse.emf.ecore.resource.Resource 

import org.eclipse.xtext.generator.IFileSystemAccess 

import org.eclipse.xtext.generator.IGenerator 

import org.gmf.filesystem.filesystem.Filesystem 

import org.gmf.filesystem.filesystem.FilesystemFactory 

import org.gmf.filesystem.filesystem.impl.FilesystemFactoryImpl 

import org.xtext.filesystem.MFile 

import org.xtext.filesystem.MFolder 


class FilesystemGenerator implements IGenerator { 

    Filesystem myfilesystem 

    FilesystemFactory myfilesystemFactory 

    override void doGenerate(Resource resource, IFileSystemAccess fsa) { 

     //TODO implement me 

     val ast = resource.contents.get(0) 

     myfilesystemFactory = new FilesystemFactoryImpl() 

     myfilesystem = myfilesystemFactory.createFilesystem() 

     val fi = myfilesystemFactory.createFile() 

     var astFi = (ast.eContents.get(0)) as MFile 

     fi.name = astFi.name 

     val fo = myfilesystemFactory.createFolder() 

     var astFo = (ast.eContents.get(1)) as MFolder 

     fo.name = astFo.name 

     } 

} 

6:但它不起作用。我想,我做錯了什麼。所以我想知道,我該怎麼做才能讓GMF使用myfilesystem來創建圖表。

謝謝。

回答

1

的的Xtext指令

generate filesystem "http://www.xtext.org/Filesystem" 

生成新的元模型,而不是導入一個現有的。請指定

import "platform:/resource/org.gmf.filesystem/model/filesystem.ecore" 

指向您的GMF編輯器正在使用的元模型。有關更多信息,請參閱this post