第Ⅰ部分 EMF概述第1章 Eclipse 3
1.1 项目 3
1.1.1 Eclipse项目 4
1.1.2 建模项目 4
1.1.3 工具项目 4
1.1.4 技术项目 4
1.1.5 其他项目 5
1.2 Eclipse平台 5
1.2.1 插件体系结构 5
1.2.2 工作区资源 5
1.2.3 平台用户界面 6
1.2.4 富客户端平台 7
1.3 更多信息 7
第2章 EMF介绍 9
2.1 统一Java、XML和UML 9
2.2 建模与编程 12
2.3 定义模型 13
2.3.1 Ecore模型(元模型) 13
2.3.2 创建和编辑模型 15
2.3.3 XMI串行化 15
2.3.4 Java批注 16
2.3.5 Ecore概述 17
2.4 生成代码 18
2.4.1 生成的模型类 18
2.4.2 其他生成的内容 20
2.4.3 重新生成和合并 20
2.4.4 生成器模型 21
2.5 运行库架构 22
2.5.1 通知和适配器 22
2.5.2 对象持久化 23
2.5.3 反射EObject API 26
2.5.4 动态EMF 27
2.5.5 数据集成基础 28
2.6 EMF和建模标准 29
2.6.1 统一建模语言(UML) 29
2.6.2 元对象工具 29
2.6.3 XML元数据互换 29
2.6.4 模型驱动的体系结构 30
第3章 使用EMF.Edit编辑模型 31
3.1 显示和编辑EMF模型 31
3.1.1 Eclipse UI基础知识 32
3.1.2 EMF.Edit支持 33
3.2 项提供程序 34
3.2.1 内容和标签项提供程序 35
3.2.2 项属性源 36
3.2.3 命令工厂 37
3.2.4 更改通知 38
3.2.5 项提供程序实现类 39
3.3 命令架构 40
3.3.1 公共命令架构 40
3.3.2 EMF.Edit命令 43
3.3.3 EditingDomain 45
3.4 生成EMF.Edit代码 47
3.4.1 编辑生成 47
3.4.2 编辑器生成 48
3.4.3 重新生成EMF.Edit插件 49
第4章 使用EMF——简单概述 51
4.1 示例模型:入门级采购订单模型 51
4.2 创建EMF模型和项目 52
4.2.1 从批注Java创建EMF模型 53
4.2.2 从Rational Rose类模型创建EMF项目 58
4.2.3 从XML Schema创建EMF项目 62
4.2.4 为Ecore模型创建生成器模型 65
4.2.5 其他格式 66
4.3 生成代码 67
4.4 运行应用程序 69
4.5 继续开发 71
第Ⅱ部分 定义EMF模型第5章 Ecore建模概念 75
5.1 Ecore模型用法 75
5.2 Ecore内核 76
5.3 结构特性 77
5.3.1 属性 79
5.3.2 引用 80
5.4 行为特性 81
5.5 分类器 81
5.5.1 类 82
5.5.2 数据类型 84
5.6 包和工厂 85
5.7 批注 86
5.8 模型数据类型 89
5.9 Ecore和用户模型 90
第6章 UML 91
6.1 UML包 91
6.2 分类器的UML规范 92
6.2.1 类 92
6.2.2 枚举类型 93
6.2.3 数据类型 94
6.3 属性的UML规范 94
6.3.1 单值属性 95
6.3.2 多值属性 95
6.3.3 包含默认值的属性 95
6.4 引用的UML规范 96
6.4.1 双向非包容引用 96
6.4.2 包容引用 96
6.4.3 映射引用 97
6.5 操作的UML规范 98
6.6 文档 99
6.7 Rational Rose中的Ecore属性 100
6.7.1 包属性 101
6.7.2 分类器属性 101
6.7.3 结构特性属性 101
6.7.4 操作属性 102
6.7.5 模型元素属性 102
第7章 Java源代码 103
7.1 类的Java规范 104
7.1.1 属性 104
7.1.2 引用 106
7.1.3 属性和引用的简洁符号 108
7.1.4 操作 109
7.2 枚举类型的Java规范 111
7.3 用于包的Java规范 112
7.4 映射的Java规范 114
7.4.1 包中映射条目类的显式定义 114
7.4.2 映射类型引用、操作和参数的定义 115
7.5 批注的Java规范 117
第8章 扩展的Ecore建模 119
8.1 特性映射 119
8.1.1 多重特性和跨特性订单 119
8.1.2 FeatureMap接口 122
8.2 使用特性映射建模 123
8.2.1 UML 123
8.2.2 批注Java 124
8.2.3 XML Schema 125
第9章 XML Schema 127
9.1 模式 128
9.1.1 没有目标名称空间的模式 128
9.1.2 包含目标名称空间的模式 128
9.1.3 全局元素或者属性声明 129
9.1.4 元素或者属性形式默认值 130
9.1.5 EMF扩展 130
9.2 简单类型定义 131
9.2.1 限制 131
9.2.2 包含枚举方面的限制 132
9.2.3 列表类型 134
9.2.4 联合类型 134
9.2.5 匿名类型 134
9.2.6 EMF扩展 136
9.3 复杂类型定义 137
9.3.1 扩展和限制 137
9.3.2 简单内容 138
9.3.3 匿名类型 139
9.3.4 抽象类型 139
9.3.5 混合类型 139
9.3.6 EMF扩展 141
9.3.7 操作 142
9.4 属性声明 145
9.4.1 ID属性 145
9.4.2 ID引用或URI属性 146
9.4.3 必需的属性 147
9.4.4 默认值 147
9.4.5 限定属性 148
9.4.6 全局属性 148
9.4.7 属性引用 149
9.4.8 EMF扩展 149
9.5 元素声明 152
9.5.1 AnyType元素 153
9.5.2 ID元素 154
9.5.3 ID引用或URI属性 154
9.5.4 Nillable元素 156
9.5.5 默认值 156
9.5.6 限定元素 157
9.5.7 全局元素 157
9.5.8 元素引用 158
9.5.9 替换组 158
9.5.10 EMF扩展 160
9.6 模型组 163
9.6.1 重复模型组 163
9.6.2 重复模型组引用 165
9.7 通配符 166
9.7.1 元素通配符 166
9.7.2 属性通配符 167
9.7.3 EMF扩展 167
9.8 批注 168
9.8.1 文档 168
9.8.2 Appinfo 168
9.8.3 忽略的批注 169
9.8.4 非模式属性 169
9.9 预定义的模式简单类型 170
9.10 EMF扩展 172
第Ⅲ部分 使用EMF生成器第10章 EMF生成器模式 177
10.1 模型类 177
10.1.1 接口和实现类 178
10.1.2 存取器方法 178
10.1.3 抽象类 180
10.1.4 接口 180
10.2 属性 180
10.2.1 简单属性 180
10.2.2 数据类型属性 181
10.2.3 枚举类型属性 183
10.2.4 多值属性 185
10.2.5 默认值 186
10.2.6 Volatile属性 187
10.2.7 Non-Changeable属性 188
10.2.8 Unsettable属性 188
10.3 引用 190
10.3.1 单向引用 190
10.3.2 双向引用 191
10.3.3 多重-多值引用 193
10.3.4 Non-Proxy-Resolving引用 194
10.3.5 包容引用 195
10.3.6 Volatile引用 196
10.3.7 Non-Changeable引用 197
10.3.8 Unsettable引用 197
10.3.9 映射引用 199
10.4 特性映射 200
10.5 操作 202
10.6 类继承 203
10.6.1 单一继承 203
10.6.2 多重继承 203
10.6.3 接口继承和实现 204
10.7 反射方法 205
10.7.1 特性ID 205
10.7.2 反射存取器 206
10.7.3 反向握手方法 209
10.7.4 特性ID转换方法 211
10.8 工厂和包 212
10.9 转换类和适配器工厂 216
10.10 可选的生成器模式 219
10.10.1 性能优化 219
10.10.2 隐藏EMFisms 224
10.11 定制生成的代码 227
第11章 EMF.Edit生成器模式 231
11.1 项提供程序 232
11.1.1 内容和标签提供程序 233
11.1.2 项属性源 235
11.1.3 命令工厂 237
11.1.4 更改通知 238
11.1.5 对象创建 239
11.2 项提供程序适配器工厂 243
11.3 编辑器 246
11.4 操作栏参与者 249
11.5 向导 251
11.6 插件 252
第12章 运行生成器 255
12.1 EMF代码生成 255
12.2 生成器用户界面 259
12.3 生成器模型属性 261
12.3.1 模型对象属性 261
12.3.2 包属性 267
12.3.3 类属性 269
12.3.4 特性属性 269
12.4 命令行生成器工具 270
12.4.1 无头调用 270
12.4.2 Rose2GenModel 271
12.4.3 XSD2GenModel 273
12.4.4 Ecore2GenModel 273
12.4.5 生成器 274
12.5 生成器Ant任务 275
12.5.1 emf.Rose2Java 276
12.5.2 emf.XSD2Java 277
12.5.3 emf.Ecore2Java 277
12.6 模板格式 278
12.6.1 示例模板 278
12.6.2 模板的可扩展性 280
第13章 示例——实现模型和编辑器 283
13.1 开始入手 283
13.2 生成模型 285
13.3 实现易失特性 285
13.4 实现数据类型 288
13.5 运行ExtendedPO2编辑器 292
13.6 限制引用目标 293
13.7 将模型划分为多个包 296
13.7.1 解析包的依赖关系 297
13.7.2 回顾限制引用目标 298
13.8 同时编辑多个资源 301
13.8.1 跨文档、非包容引用 301
13.8.2 跨文档包容引用 306
第Ⅳ部分 使用EMF编程第14章 探索元数据 313
14.1 包 313
14.1.1 一般性访问包元数据 314
14.1.2 定位包 316
14.2 反射 318
14.2.1 创建对象 318
14.2.2 询问和修改对象 319
14.3 动态EMF 324
14.4 扩展的元数据 327
第15章 持久化 331
15.1 持久化架构概述 331
15.2 EMF持久化API 334
15.2.1 URI 334
15.2.2 URIConverter 335
15.2.3 资源 336
15.2.4 Resource.Factory和Resource.Factory.Registry 340
15.2.5 ResourceSet 343
15.3 XML资源 344
15.3.1 默认的串行化格式 345
15.3.2 反串行化 349
15.3.3 选项 350
15.3.4 动态EMF 357
15.3.5 扩展的元数据 359
15.3.6 其他特性 362
15.4 EMF资源和资源工厂实现 364
15.4.1 基础XML 365
15.4.2 通用XML 365
15.4.3 XMI 365
15.4.4 Ecore 367
15.4.5 EMOF 367
15.4.6 生成的资源 368
15.5 性能考虑事项 368
15.5.1 推荐的XML资源选项 368
15.5.2 缓存固有ID 370
15.5.3 缓存资源URI 370
15.6 活动对象的自定义存储 370
15.6.1 使用EStore 372
15.6.2 EStore和生成类 373
第16章 客户端编程工具箱 377
16.1 树迭代器和开关 377
16.2 适配器 381
16.2.1 对象调整 381
16.2.2 行为扩展 387
16.2.3 内容适配器 390
16.2.4 观察生成的类 391
16.3 交叉引用器 393
16.3.1 基础交叉引用器 393
16.3.2 交叉引用适配器 395
16.4 复制对象 397
16.5 比较对象 401
第17章 更改模型 403
17.1 描述更改 403
17.1.1 应用更改描述 405
17.1.2 更改多值特性 406
17.1.3 更改资源 408
17.2 更改记录 409
第18章 验证架构 413
18.1 约束和不变式 413
18.2 对生成代码的影响 416
18.3 调用验证 419
18.4 EObject基本约束 424
18.5 XML Schema约束 424
第19章 EMF.Edit编程 427
19.1 重写命令 427
19.2 定制视图 432
19.2.1 隐藏模型对象 432
19.2.2 使用列表和表查看器 437
19.2.3 添加非建模的中间视图对象 443
第20章 Eclipse IDE之外的应用领域 453
20.1 富客户端平台 453
20.1.1 RCP和EMF 454
20.1.2 启动RCP应用程序 454
20.1.3 RCP应用程序中的生成代码 458
20.1.4 部署RCP应用程序 459
20.2 独立应用程序 459
20.2.1 将EMF添加到类路径中 461
20.2.2 注册资源工厂 463
20.2.3 注册包 464
第21章 EMF 2.3和2.4 465
21.1 Java 5.0支持 465
21.1.1 枚举 466
21.1.2 泛型 469
21.2 EMF持久化增强 477
21.2.1 资源删除 477
21.2.2 内容类型 478
21.2.3 其他增强 481
21.3 其他新特性 484
21.3.1 Ecore验证 484
21.3.2 引用键 485
21.3.3 批注Java模型导入器 486
21.5.1 模型对象属性 489
21.5.2 包属性 491
21.5.3 枚举属性 492
附录A UML符号 493
附录B 示例模型概述 497
附录C 参考文献 511