中国式的emf(gef)建模,带来的问题

中国式的emf(gef)建模,带来的问题,,以下是中国式的建模
---------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<action:Diagram xmlns:action="http://www.j.com/action">
<logic name="业务逻辑1" description="" location="Point(290, 76)" size="Dimension(150, 40)" logicClass="">
<link to="//@logic.1"/>
<link to="//@logic.2"/>
</logic>
<logic name="业务逻辑2" description="" location="Point(278, 273)" size="Dimension(150, 40)" logicClass=""/>
<logic name="业务逻辑" description="" location="Point(61, 263)" size="Dimension(150, 40)" logicClass=""/>
</action:Diagram>
----------------------
从模型看是很票啦的,<link to="//@logic.1"/>指向<logic name="业务逻辑2" description="" location="Point(278, 273)"

但到了gef编码的时候,就容易出现编码了,因为你在建立连线的时候,在命令里面一般是这样实现:
link = ActionFactory.eINSTANCE.createLink();
link.setTo(target);
source.getLink().add(link);

注意这里,只是设置source.getLink().add(link); 就可以满足模型的需求了,当代码执行到source.getLink().add(link);的时候,就会出发souce这个监听器,,然后就是刷新连接,
但这个刷新连接都是source刷新,就算你执行了refreshTargetConnections也没用,因为这个执行的的对象是source对象editpart,而不是taget,,

那怎样触发taget所对应的editpart刷新呢?

如果你看一些经典的例子,你会发现别人的连线命令是这样:
source.getOutgoingConnections().add(connection);
target.getIncomingConnections().add(connection);

学别人,就在画线命令里面多加一项对taget模型的改动代码即可,,
例如:target.setId(target.getId()); 就是拿些无关重要的熟悉(最好是少被操作的属性)重置下值,既可以触发和source一样的动作,,也会走到notifyChanged方法上面去,然后多加一个判断:
case ActionPackage.NODE__ID:
refreshTargetConnections();
break;

即可。
感觉模型文件(指生成的结果那个,例如上面那个)和代码,不能都那么完美,要么,把中国式的模型改改,这样代码就没那么别扭,要么就类似我的做法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值