私は Eclipse を使い始めましたが、まだ初心者です。だから、ここから助けてもらいたいのです。Xtext を使用して DSL を読み取ります。そして、GMF で既に定義した図でインスタンスを表示したいと思います。しかし、Xtext の ecore(MFilesystem) と GMF の ecore(Filesystem) は異なります。そこで、Xtend を使用してモデルを変更し、EObject(Filesystem) を作成します。しかし、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 ';'
;
2: GMF で ecore を定義しました
3: Xtext のランタイムを実行してみます
DSL ファイル (test.filesystem) からダイアグラムを作成します。
4: それから私はこの問題を抱えています
5: Xtend を使って Xtext のモデルを変更してみます
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:しかし、それは動作しません。私は何か間違ったことをしたと思います。myfilesystem
ですから、GMF がダイアグラムを作成するために使用する方法を知りたいのです。
ありがとう。