如何使用Xtext(带Xtend的M2M)和GMF创建diagramm? (初学者)

时间:2012-10-13 12:39:15

标签: xtext eclipse-gmf xtend

我已经开始使用Eclipse了,我还是初学者。所以我想从这里得到一些帮助。 我使用Xtext来读取我的DSL。然后我想用图表显示实例,我已经用GMF定义了这个图表。但是Xtext中的ecore(MFilesystem)和GMF中的ecore(Filesystem)是不同的。所以我使用Xtend来更改模型并创建一个EObject(文件系统)。但我不知道,GMF如何使用Xtent的资源来创建图表。我在这里展示我的问题:

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中定义了ecore

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

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 个答案:

答案 0 :(得分:1)

Xtext指令

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

生成新的元模型,而不是导入现有的元模型。相反,请指定

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

引用您的GMF编辑器正在使用的元模型。有关详细信息,请参阅this post