文档章节

EMF模型中的资源管理

西昆仑
 西昆仑
发布于 2012/09/11 23:44
字数 707
阅读 130
收藏 0
在GMF项目中,初期阶段的工作是建立业务模型,该模型通过EMF编辑器建立并生成代码。这些代码主要包含如下内容:

1. 业务模型接口、实现类

EllipseShape、EllipseShapeImpl、ShapeFactoryImpl

该工程中生成各对应的业务模型,并通过工厂进行创建。

2. 适配器类:(在工程org.eclipse.myTestShapes.edit)

public class EllipseShapeItemProvider
extends AbstractShapeItemProvider
implements
IEditingDomainItemProvider,
IStructuredItemContentProvider,
ITreeItemContentProvider,
IItemLabelProvider,
IItemPropertySource

从字面上看,是提供者,提供哪些内容? 提供内容,提供图标、提供属性、提供domainProvider~
界面元素直接通过适配器获取需要的内容,避免与模型对象的直接接触。将内容提供的工作交给适配器

工程结构如下:

 

此处主要讨论业务模型的资源管理,暂不讨论界面的相关元素,所以其他工程不介绍。
资源管理:包括业务模型的序列化文件、内存管理,这些操作通过谁来实现? EditDomain

public interface EditingDomain
{
  //负责文件资源的加载,URI代表序列化后的文件资源
  Resource createResource(String fileNameURI);
  Resource loadResource(String fileNameURI);
  ResourceSet getResourceSet();

  //command用于对内存对象的修改
  Command createCommand(Class<? extends Command> commandClass, 
                        CommandParameter commandParameter);
  Command createOverrideCommand(OverrideableCommand command);
  CommandStack getCommandStack();

  .............
}

1. 序列化后的模型内容存放于文件中,通过loadResource将文件中的资源加载到内存中,并形成对应的对象,存放于resourceSet中。

2. 存放于内存中的内存对象的修改,通过command修改,用户的编辑信息被封装成command并置于commandStack中执行,对模型对象进行修改。

 

命令栈(CommandStack)

public class BasicCommandStack implements CommandStack 
{
  protected List<Command> commandList;   //command队列,
  protected int top;                     //堆栈指针
  protected Command mostRecentCommand;   //最近执行的命令
  protected Collection<CommandStackListener> listeners;    //命令栈的监听者
  
  public BasicCommandStack() 
  {
    commandList = new ArrayList<Command>();
    top = -1;
    listeners = new ArrayList<CommandStackListener>();
  }

  //命令的操作:执行、是否可以回退、回退,再执行、命令栈清空
  public void execute(Command command);
  public boolean canUndo();
  public void undo() 
  public boolean canRedo();
  public void redo();
  public void flush();

  //监听者相关操作:添加、删除、通知
  public void addCommandStackListener(CommandStackListener listener);
  public void removeCommandStackListener(CommandStackListener listener);
  protected void notifyListeners();
}

针对上述接口,主要得出如下主要结论:
1. 命令栈是命令的容器,有一个指针指向堆顶
2. 命令堆栈有监听者,支持添加删除Listener,有命令的相关操作,会通知监听者
4. 最新的命令执行完毕后,会进行记录,并进入命令堆栈
5. 支持撤销操作(这就是为什么将命令进入堆栈的原因,撤销就是对堆顶的命令执行undo)
6.清空操作:将堆栈中得所以命令清除、释放,并通知listener
还有其他功能,可见具体代码,对模型的修改,最终都通过命令实现~

© 著作权归作者所有

共有 人打赏支持
西昆仑

西昆仑

粉丝 137
博文 141
码字总数 102735
作品 0
南京
高级程序员
私信 提问
EMF介绍系列(二、从模型生成应用程序)

还是从一个例子里看看EMF的使用方法和作用吧。假设我们的应用是一个网上商店,在系统里有这些对象:商店Shop、类别Category、 商品Product,其中类别可以包含子类别。现在我们用EMF从头到尾生...

青夜之衫
2017/12/06
0
0
Eclipse基金会十周年:知名开源项目盘点

  【IT168 专稿】Eclipse基金会已经成立了整整10年了。目前,这个开源组织拥有众多项目,其中就包含了最为出名的Java IDE Eclipse以及Mylyn。在Eclipse基金会成立之初,由其发起并指导的项...

it168网站
2014/02/24
0
0
Graphical Modeling Framework简介

本文假设读者有Eclipse平台应用程序开发经验,了解Eclipse平台的插件机制,使用EMF和GEF开发过应用程序。在本文中,“Eclipse应用程序”等价于“Eclipse插件”。 Eclipse是一个开源的平台,从...

青夜之衫
2017/12/07
0
0
写代码的代码:JET

用过EMF的人想必都对它的代码生成功能印象深刻吧,有没有想过这是怎样实现的呢? 代码生成一般是通过写好的模板,在用户输入一些限制条件后,由程序把这两者结合起来得到需要的代码。EMF也是...

青夜之衫
2017/12/06
0
0
EMF Validation Builder

EMF Validation Builder 是一个Eclipse的插件,实现自动的 EMF 验证过程,当你保持模型时,该模型就会自动进行验证。EMF Validation Builder 会维护一个依赖关系表,因此整个验证过程可以在需...

匿名
2011/02/18
718
0

没有更多内容

加载失败,请刷新页面

加载更多

day150-2018-11-17-英语流利阅读-待学习

歪果仁也疯狂:海外版抖音的征途 毛西 2018-11-17 1.今日导读 海外版抖音 TikTok 于 2017 年 5 月上线海外,至今覆盖全球 150 多个国家和地区,月活跃用户数已突破 5 亿。然而,“出海”的抖...

飞鱼说编程
今天
8
0
分布式学习最佳实践:从分布式系统的特征开始(附思维导图)

什么是分布式系统 回到顶部   分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法...

dragon_tech
今天
4
0
TOKEN设计

TOKEN设计 Api_Token 首先需要知道API是什么? API(Application Programming Interface)即应用程序接口。你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接口。而我们在...

DrChenXX
今天
3
0
浅谈“李氏代换”——从纪念金庸和斯坦李说起

李氏代换(LSP)简介 李氏代换是软件设计的一个原则,又名依赖倒转原则或依赖倒置原则,其衍生原则有接口分离原则等。该原则由Barbara Liskov于1988年提出。 该原则指出,程序中高级别的元素...

SamYjy
今天
35
0
JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网

本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。T...

toolfk
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部