Decoration Service是GMF Runtime提供的一个Service。它的目的是为已有图形添加修饰,它并不需要已有图形的任何信息,icon或figure都可以作为decoration加到图形上。要为图形添加Decoration,首先要编写一个Decorator类。它可以继承AbstractDecorator,为了满足要求我们要重写其中两个方法:activate()、refresh ()。activate方法主要功能是激活Decorator,一般只需调用refresh方法即可。Refresh负责当decorator target变化时刷新Decorator,即保持二者之间的同步。在这里我们就可以设置自己的Decoration(如自定义的icon或figure)。如果想实现Decoration动态响应模型的改变,我们可以让Decorator实现NotificationListener接口,这样我们就可以监听模型的改变了。实现notifyChanged方法,在此方法中根据需求为模型添加监听器。做完Decorator之后,我们就要为这个Decorator编写一个Provider,它需继承AbstractProvider并实现IDecoratorProvider接口。然后实现createDecorators、provides两个方法。在createDecorators方法中安装我们的Decorator。
Provides中判断添加Decorator的条件。最后就要注册我们的Provider了。添加扩展点:
org.eclipse.gmf.runtime.diagram.ui.decorator.providers,将decoration provider设成我们的Provider,至此大功造成!