Sirius快速入门教程
这份教程是今年4月Obeo公司交流培训用的。 教程中主要展示了Sirius如何快速方便的用于图像工具的开发。内容比较精练,适合于对EMF(Eclipse Modeling Framework)有一定了解,但是还未接触过Sirius的人学习参考。Sirius是EMF平台上的一个插件集. 它给MDE(Model-Driven Engineering)软件的图像工具开发提供了非常便利的环境。早期设计MDE软件是基于GMF。那时候很多图像处理还有功能都需要用Java开发。现在Sirius提供了一个图像工具的模型,开发者可以用Sirius模型来开发自己的图像工具。Sirius模型设计好之后,所有的Java代码将由Sirius模型生成。近几年,Sirius因为其方便易学,积累了不少用户。它的维护和技术支持也发展的愈加成熟。
本教程共分四个部分,循序渐进的讲述如何用Sirius开发一个简易的Mindstorms模型工具:
- 设计元模型
- 图像工具开发
- 容器和编辑工具
- 属性栏编辑
这组教程有配套的软件包,里面包含了一个Sirius IDE压缩包,四份完成的项目压缩包,一些图标素材和一段Java代码。软件包不在这里做分享,想要具体实现教程内容,可以下载EMF(Oxygen)和Sirius 5.0。
Sirius的一些语句表达
- var 变量, 例子:
- var:self, 通常指当前模型本身(图像层); var: container, 通常指向模型的容器。
- feature 特性,指向原模型里当前元素所持有的一些特性,例子:
- feature : name, 元素的名字
- feature : instructions, 元素的指令
- service 服务,在Sirius里插入自己编写的Java方法
- aql AQL(Acceleo Query Language), 一种查询语句,可以对模型和它的图像模型进行查询。具体参见:AQL (英文网站)。
1. 元模型
Mindstorms是一款乐高机器人。这款机器人有以下几个主要功能:
- 移动,包括前进,后退,转向。
- 抓取,放开物品
- 各种感应器等等。
机器人的一系列动作可以自己编写,然后导入到机器人上。在这个教程中,我们会开发一个工具用于设计操控机器人的一系列动作。
1.1 元模型分析
上图是这次教程中用到的Mindstorms工具的元模型。从底部向上看,这个工具支持四种操作:抓取(Grab),释放(Release),旋转(Rotate)和前进(GoForward)。 Action(动作)是这四种操作的抽象类(Abstract)。 Action(单一动作)和Choreography(动作组)都是指令(Instruction)。而一个动作组(Choreography)可以包含0到多个指令(Instruction)。 意味着一个动作组可以包含任意数量的单一动作或动作组。
除了结构外,部分类还有一些特性。例如动作组可以有名称。 Rotate类有转向角度和是否随机属性。 Forward类有以厘米为单位的距离属性。
1.2 示范步骤
- 运行 Obeo Designer 或者安装好的eclipse (需要安装EMF和Sirius plugins)
- 新建一个 Ecore Modeling Project, 命名为 ‘fr.obeo.dsl.tuto.mindstorms’
- 打开mindstorms.aird, mindstorms class diagram,如果没有需要右键手动新建一个diagram。
- 用Palette里面的工具添加以下EClass类:Choreography, Instruction, Action, Grab, Release, Rotate 和 GoForward 到画布。
- 将 Instruction 和 Action设为Abstract类
- 用Palette里面的工具添加两条SuperType关系:从Grab, Release, Rotate, GoForward到Action; 从Action和Choreography到Instruction。
- 用Palette添加一条 Composition关系到Choreography和Instruction之间,命名为instructions。
- 用Palette添加EAttributes :
- Choregraphy, name: EString
- Rotate, degrees: EInt, random: EBoolean
- GoForward, cm: EInt
- 右键图表空白处,选择Generate, 生成 Model, Edit, Editor代码
- 修改‘fr.obeo.dsl.tuto.mindstorms.edit’项目里的以下内容来改进图标和标签:(没有素材压缩包的这步可以忽略)
- 替换掉icons/full/obj16下面的图片素材
- 粘贴以下代码到RotateItemProvider.java (在‘fr.obeo.dsl.tuto.mindstorms.edit’里), 替换原本的getImage()方法。
/**
* This returns Rotate.gif.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated not
*/
@Override
public Object getImage(Object object) {
if (((Rotate)object).getDegrees()>=0) {
return overlayImage(object, getResourceLocator().getImage("full/obj16/Rotate"));
}
else {
return overlayImage(object, getResourceLocator().getImage("full/obj16/Rotate_Right"));
}
}
1.3 检测成果
无论你是直接导入solution1.zip到IDE或一步步自己建成的。接下来都可以检测一下EMF自带的模型编辑器。
- 右键任意三个项目model, edit或editor之一,运行Run/Run Configuration…
- 在左边选择栏,选中Eclipse Application, 点击New。新建一个运行配置,之后点Run。
- 在Runtime中,导入sample.zip里的模型例子。 里面包含一个Mindstorms模型。现在可以用EMF的默认编辑器对它进行编辑。
- 如果没有sample.zip,也可以根据下图自己手动创建一个。
以上是第一部分关于元模型的内容。下一节将会进入Sirius容器和编辑的介绍。如果有疑问欢迎提出,我会尽力解答。