时间: 2020-11-20|33次围观|0 条评论

中国式的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;

即可。

感觉模型文件(指生成的结果那个,例如上面那个)和代码,不能都那么完美,要么,把中国式的模型改改,这样代码就没那么别扭,要么就类似我的做法。

原文链接:https://blog.csdn.net/findhappy117/article/details/83732654

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《中国式的emf(gef)建模,带来的问题
   

还没有人抢沙发呢~