﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Eclipse骇客帝国</title><link>http://eht.blogjava.net/</link><description>专注于开发Eclipse插件和研究Eclipse体系结构，并把好的思想带给国内同行</description><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 17:31:53 GMT</lastBuildDate><pubDate>Tue, 11 Aug 2026 17:31:53 GMT</pubDate><ttl>60</ttl><item><title>开源项目，需要高级Java开发人员！</title><link>http://www.blogjava.net/briansun/archive/2009/03/18/260410.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Wed, 18 Mar 2009 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2009/03/18/260410.html</guid><description><![CDATA[XMind Ltd.<br />
http://www.xmind.net/<br />
<br />
创业软件公司，采用开源+商业软件模式，市场在欧美，产品XMind 2007/2008/3.0都颇受好评，是同类产品中的佼佼者。公司注册地在香港，工作在深圳市南山区。<br />
<br />
要求：<br />
1.有创业意识，积极融入创业团队。<br />
2.喜欢小团队工作，有协作精神，有独当一面的能力和责任感。<br />
3.学习能力强，喜欢接受新事物。<br />
4.精通Java，热爱Java。懂设计模式，懂Eclipse。有Eclipse开发经验者优先考虑。<br />
5.坚信世界是平的。<br />
6.英语不要太差。<br />
<br />
有意者直接回帖，或发送简历到hr@xmind.net<br />
<br />
谢谢！ <br />
<br />
<br />
<img src ="http://eht.blogjava.net/aggbug/260410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2009-03-18 11:39 <a href="http://www.blogjava.net/briansun/archive/2009/03/18/260410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse在做什么</title><link>http://www.blogjava.net/briansun/archive/2007/04/18/111709.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Wed, 18 Apr 2007 10:53:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2007/04/18/111709.html</guid><description><![CDATA[很久没关心Eclipse基金会的动作了，只是不断在使用，不断在开发，不断在教别人使用和开发，然后就是等待Eclipse的下个版本。那么，Eclipse基金会究竟在干什么呢？我不想写篇很长的Blog了，只是随便谈谈最近的几个映像：<br><br><span style="font-weight: bold;">1。Eclipse 3.3</span><br>如果我的推算没有问题的话，今年的第三季度我们就可以拿到正式版的3.3了，3.3好像没有什么太大的动作了，我只记得3.2的时候搞了一个MDC（百万下载挑战），据说在预订一半多的时间里就实现了百万下载量。回头看看Firefox好像几乎没花什么精力下载量就达到千万级别了，不是一个类型的软件确实没法比啊。<br><br>看了3.3M6的一些表现，Forms包的外观有些改善，但是不知道有没有结构上的调整；Application扩展点的API改了很多，名字也比原来合理了，不过最近正在开发中的一些项目又要重构了，呵呵；最令人激动还是View终于可以折叠到一边了，而不是原来那样最小化了之后还占很多位置，而且最大化也更酷炫了，得益于View的新折叠方式。<br><br><span style="font-weight: bold;">2。越来越重视MacOSX</span><br>SWT 3.3的&#8220;New and Noteworthy&#8221;可以看到这个趋势。记得我去年与Sun公司的James Bai谈到Eclipse与NetBeans时，我就表达了自己的观点，好像Blog里面也有。事实上，&#8220;惯用法和外观&#8221;在MacOSX系统上的重要地位是没用过苹果电脑的人无法想象的，Eclipse在Windows确实很漂亮，但是之前的版本在MacOSX上还是远不如NetBeans的。我自己也遇到了这样的问题，我们在Windows上开发有&#8220;助记符&#8221;的问题，比如文件菜单，应该写成&#8220;文件(&amp;F)&#8221;，这样F下面有条小横线，用户按Alt-F就可以直接打开文件菜单，但是在Mac上没有这样的设计，Eclipse展示出来仍然是这样，就显得有明显从Windows移植的痕迹。除了Mac的菜单外，Mac的窗体、Mac的工具栏、Mac的任务栏、Mac的快捷键都有很多与Windows不同的地方，Eclipse要加油了啊～～<br><br>回到说SWT，3.3在MacOSX上有了不少改善，增加了TrayItem，增加了彩色鼠标指针，还改了一个reparent的bug。<br><br><span style="font-weight: bold;">3。Ajax是大方向</span><br>前段时间炒作了一条新闻，说Eclipse基金会同时发布了三款用于Ajax开发的插件，这个说法是欠妥的。因为这三个项目都是很久以前就有的，现在把他们拿到一起来说，根本原因就是为了回应现在炒作很凶的Ajax。其中&#8220;Dynamic Languages Toolkit&#8221;没什么稀奇的，NetBeans也已经做了，但我相信Eclipse在易用性方面一定又是做到最好；&#8220;Ajax Toolkit Framework&#8221;也就是ATF是三者中最红的，现在要合并进WTP了，是为Dojo、Rico、Zimbra这些API的开发人员提供集成，套用行话说，就是&#8220;Ajax开发人员终于有了自己的IDE了（欢呼+大笑）&#8221;；唯独只有&#8220;Rich Ajax Platform&#8221;（RAP）最值得一提。<br><br>这是一个与众不同的项目，非常具有前瞻性和远见性，这也是Eclipse一贯的做事风格。RAP的缩写是来自于RCP的，RCP已经家喻户晓了，很多知名项目比如Lotus Notes 8和RSSOwl都是基于RCP的，RCP的程序员也很多，&#8220;如遇危难，RCP可以将兵！&#8221;但是面对Ajax一夜来袭，很多Rich Client应用程序开始希望自己能够搬到Web上去的，可是怎么搬呢？把Java代码翻译成javascript吗？我们都知道真正伟大的程序员都是在Java平台上的，而Java程序员大都不喜欢javascript这样高效但不严谨的风格，尤其是不好调试这一项，使得javascript项目的成本随规模成几何级数递增，这种事情放在Google这样钱花不掉的公司身上还行，但是要放在小公司上就捉襟见肘了。<br><br>所以行业内的专家经过这几年的反复斟酌，得到的结论是，终极的解决方案还是要让程序员手写Java代码，出来的却是javascript效果。那如何实现这样的转变了，有两个方案。一是写一个编译器，首先给出一个限定的Java API库，只有utils包、io包、lang包的少数功能和标准控件，最好是SWT式的，大家都很习惯了，如果程序员仅用这些API（和自己编写的API）写代码，就可以被这个编译器丝毫不差的编译成javascript代码，在本地执行和在Web上执行达到相同的效果，这样完全可以调试，也可以扩展这些API。这种解决方案以Google的GWT为代表。二是写一个服务器，这样就可以用全套的Java API，但是不能用AWT和Swing，再给出一组标准控件，（最好是SWT式的，大家都很习惯了），程序员所写的Java代码其实是在服务器上运行的，服务器根据这段代码的操作，把相应的结果反馈给Client端也就是浏览器，而浏览器以javascript的方式展现和接收事件。这种解决方案的代表，就是RAP。<br><br>还要说的一点就是后者其实有个帮手，也算很多Ajax网站的诀窍，就是JSON。JSON是把一个Map（名值对组）序列化成XML的工具，如果这样解释好像没什么新奇的。。。那么好，应广大JSON粉丝的强烈要求，我把JSON的解释改成：&#8220;JSON就是一个你在服务器端把JavaObject给它，就能在浏览器端取出一个javascript object的神奇而又强大的工具，而它的实现机制，只不过是把一个Map序列化成XML&#8221;！<br><br>这两个方案有明显的差别，可以说根本不是一种技术，但是他们很可能都有前途，都是王者之道，一个齐桓公一个晋文公，都有机会成为霸主，也完全有可能鼎足而立，开发人员选择谁，完全是根据项目的情况，甚至有可能。。。开发一个联合的方案。。。把GWT封装成一个Eclipse RAP的插件。<br><br><span style="font-weight: bold;">4。看看Summer Of Code</span><br>不小心点进了Google的Summer Of Code，之前就已经关注过一些，但是好奇心还没有驱使我点Eclipse Foundation进去看，今天终于按奈不住了。。。先简单介绍一下Google SoC[http://code.google.com/soc/]，其实是这样的，很多开源软件基金会想花钱请一些比较牛的大学生来开发一些代码（这些都是最著名的开源软件，也是最肥的），但是不知道去哪里找大学生。Google的影响力比较大，所以就挑了个头，先把这些开源项目的ideas登上去，让学生们挑，学生再把自己的简历投给Google，Google安排一个统一的时间由开源组织去选，选中的学生由Google撮合双方见面或不见面开发，主要是利用了学生在暑期的80天空闲时间，然后老板把钱付给Google，Google付给学生，中间40天的时候Google还要搞个&#8220;期中考试&#8221;。。。看了一下Eclipse的ideas，挺惊讶的，虽说这不是Eclipse项目发展的主流，但是也从一定程度上显示了Eclipse的不小野心。<br><br>其中我最感兴趣的是&#8220;Eclipse Open Office Integration&#8221;，它旨在把OpenOffice.org的组件嵌入到Eclipse的编辑器中去，而在此之前，Eclipse已能方便的嵌入Microsoft Office的组件了（得益于ActiveX）。这样的功能如果能实现，对我们平时的开发也是很有好处的。另一个我感兴趣的就是&#8220;Eclipse install based manager&#8221;，现在的RCP没有自己的安装程序，只是在Eclipse的帮助文档中有一篇制作RCP Install的指南，但这是远远不够的，我花在做安装程序上的时间太多了，不值得，因为这些都是共性的工作。除此之外，我还对&#8220;RCP real-time collaboration based upon ECF and Google Talk XMPP-based messaging service&#8221;感兴趣，如果Eclipse不做，我们也要做这样的功能。最后要提到的一个好玩的功能就是&#8220;NetBeans in Eclipse&#8221;，两种插件接口对Java阵营还是不利的，如果我为NetBeans编写的插件能够跑在Eclipse上的话，那NetBeans的新特性就会都变成Eclipse的新特性了（够自私了吧！）<br><br><span style="font-weight: bold;">5。RCP仍是无冕之王</span><br>Eclipse官网的黄金位置还是留给了RCP，RCP在全球还是有大量忠实粉丝的。不久前发现汇丰银行某个分行的CRM系统是基于RCP的（客户端），不久前又发现英国一个咨询公司专门提供RCP开发的咨询业务，不久前IBM正式进入公测阶段的Lotus Notes 8/Hannover也是基于RCP的，只是为了外观重写了Workbench，不久前。。。被人发现我们的软件也是基于RCP的，而且随时提供RCP方面的咨询和培训。<br><br><span style="font-weight: bold;">6。跟Mozilla结个亲家吧</span><br>忘了提Eclipse 3.3的又一大特性了，叫做&#8220;Moziila Everywhere&#8221;，是指在任何平台上都可以创建一个Browser控件但是使用Mozilla内核（及时该平台上没有安装Firefox）。这是怎么实现的呢？其实很简单，它要求你必须安装一个xulrunner，后者是Mozilla的全部内核，包括Gecko布局引擎、Javascript解析引擎、XUL解析引擎和XPCOM，其中每样东西都足够写一本书，有了这些，仅用XUL+Javascript就可以写出一个Firefox来，Eclipse洽是利用了这个特性，用Java连接XPCOM所以创建了一个Mozilla的Browser，但是没有任何行为，包括右键菜单。<br><br>这个Browser控件和缺省的Browser控件是不一样的，我们平时见到的缺省Browser控件，在Windows上用的是IE内核，在MacOSX上用的是Safari，在Linux上。。。不知道，所以它是最最简单的浏览器，不具备任何可以定制的功能，除了显示一张HTML页面外，没有任何用处。（你该不会想用Eclipse写一个傲游出来吧）<br><br>但是Mozilla内核的浏览器控件就不同了，它意味着如果程序员平时为Firefox写插件的形式，也可以被应用到RCP应用程序上来，设想一下我们拥有一个RCP+xulrunner的平台吧，RCP接收Java扩展，xulrunner接收xul和javascript扩展，那我们的平台——要么叫Fireclipse，要么叫Eclifox——就所向披靡了。即使不利用它的可扩展性，单单就是能保证在不同平台上提供对Web应用程序的一致性展现一条，就足够臭美的了，更可以用写Eclipse插件的形式来限定浏览器的行为。。。。。。唉，刚才是不是说过一个NetBeans in Eclipse啊？把那玩意扔了吧～～<br><br><span style="font-weight: bold;">总结。</span><br><br>活活，还真是好久没有写Blog了呢。本来只想谈谈Eclipse基金会的，没想到越说越多，连MacOSX、JSON、Google、Mozilla都说了个遍，是不是说了你的偶像什么坏话，我常干这种事，直接跟我联系吧，我愿意分享我的一切感受和看法。忙了，再聊！
<br><br><span style="font-style: italic;">下一个大泡泡</span><br style="font-style: italic;"><span style="font-style: italic;">（转载本文需注明出处：Brian Sun @ 爬树的泡泡[http://www.briansun.com]）</span>
<br><br>  <img src ="http://eht.blogjava.net/aggbug/111709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2007-04-18 18:53 <a href="http://www.blogjava.net/briansun/archive/2007/04/18/111709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 专业人士必备的书籍和网站列表</title><link>http://www.blogjava.net/briansun/archive/2007/04/14/110626.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Sat, 14 Apr 2007 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2007/04/14/110626.html</guid><description><![CDATA[<p>developerWorks里面一篇非常不错的文章，我在订阅邮件里发现的：</p>
<p><a  href="http://www.ibm.com/developerworks/cn/java/j-javares.html?ca=dwcn-newsletter-java" title="http://www.ibm.com/developerworks/cn/java/j-javares.html?ca=dwcn-newsletter-java" target="_blank">Java 专业人士必备的书籍和网站列表</a></p>
<p>摘要：</p>
<p><a name="N1005A">书籍</a></p>
<p><a name="N1005A">每个程序员都会有一些由于经常被当作专业资料参阅而磨坏的书。下列书籍应该是 Java 语言程序员的书架上必备的。书很贵，所以我有意将这份列表弄得很短，仅限于重要书籍。</a></p>
<p><a name="N10064">Thinking in Java (Bruce Eckel)</a></p>
<p><a  href="http://www.amazon.com/exec/obidos/ASIN/0131002872" target="_blank"><em>Thinking in Java, 3rd edition</em></a> （Bruce Eckel; Prentice Hall PTR，2002 年）<br>
<a  href="http://www.china-pub.com/computers/common/info.asp?id=24614" target="_blank"><em>Java 编程思想：第3版</em></a> （陈昊鹏 等译; 机械工业出版社，2005 年）<br>
Eckel 的书对于学习如何在 Java 语言环境中使用好面向对象技术极其实用。书中大量的代码样例解释了他所介绍的概念。文字出自一个并不认为
Java 技术总是正确答案的人，所以相当地实用。Eckel
具有多种语言的大量经验，还有用面向对象方式进行思考的扎实技能。本书将这些技能放到实用的 Java 语言环境中。他还在写一本新书，名为 <em>Thinking in Enterprise Java</em>。</p>
<p><a name="N10080">Effective Java (Joshua Bloch)</a></p>
<p><a  href="http://www.amazon.com/exec/obidos/ASIN/0201310058" target="_blank"> 					<em>Effective Java: Programming Language Guide</em> 				</a> （Joshua Bloch; Addison-Wesley，2001 年）<br>
<a  href="http://www.china-pub.com/computers/common/info.asp?id=8645" target="_blank"><em>Effective Java 中文版</em></a> （潘爱民 译; 机械工业出版社，2003 年）<br>
本书是理解优秀 Java 程序设计原则的最佳书籍。大多数材料从其他的 &#8220;学习 Java &#8221; 的书中根本找不到。例如，Bloch 书中关于覆盖 <code>equals()</code> 这一章是我读过的最好的参考资料之一。他也在书中包括了很实用的建议：用接口替代抽象类和灵活使用异常。Bloch 是 Sun 公司 Java 平台库的架构师，所以他透彻地了解这门语言。事实上，他编写了该语言中大量有用的库。本书必读！</p>
<p>。。。。。。</p>
<p>。。。。。。</p>
<p>。。。。。。</p><img src ="http://eht.blogjava.net/aggbug/110626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2007-04-14 13:14 <a href="http://www.blogjava.net/briansun/archive/2007/04/14/110626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>芒果软件XMIND 2007</title><link>http://www.blogjava.net/briansun/archive/2007/01/16/94288.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Tue, 16 Jan 2007 11:36:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2007/01/16/94288.html</guid><description><![CDATA[
		<p>
				<strong>[什么是芒果软件？]</strong>
				<br />
芒果软件，全称“北京市朝阳区芒果软件研究所”，是依法成立的民办科技类非企业法人。。。。。。</p>
		<p>这个话怎么说的这么不顺啊，换种说法。芒果软件，是一群技术精英的名字，我们来自四面八方，为了一个共同的前途走到一起，开始了一款软件从创意、设计到开发、测试、上市、销售，以及未来将成为国产软件之骄傲的传奇之旅。。。。。。</p>
		<p>我们所说的这段软件，就是XMIND！它是第一款可视化思维工具，也是目前市场上唯一的同类产品。登陆我们的网站可以看到它的介绍和截图：<br /><a title="http://www.mango-software.com/" target="_blank" href="http://www.mango-software.com/">http://www.mango-software.com/</a><br />
以及免费下载beta版：<br /><a title="http://www.xmind.cn/" target="_blank" href="http://www.xmind.cn/">http://www.xmind.cn/</a></p>
		<p>
				<strong>[什么是可视化思维工具？]<br /></strong>很多管理咨询公司和培训公司，以及很多中学和大学的教师，他们在传授一类方法，或开设一门课程，题目可能是“如何提高你的工作效率”。
这类课程80％的内容是很无聊的，学员也不太喜欢，但是有20％的内容是激动人心的。我们发现这激动人心的提高工作效率的方法就是用形象的思维工具帮助思
维。比如很多管理咨询公司和培训公司会开设名为“<strong>思维导图</strong>”的课程，课上要求学员们用纸和笔把自己脑海中随时冒出来的创意随时记录下来。</p>
		<p>记录的方法是在纸的中央画一个椭圆，里面写上中心主题，从这里发散出去想，想到的内容标为分支主题，每个分支主题还可以再发散，字写在线上，线划到
哪儿都要多划一点，这样就促进了自己的思维，这种思维方式比写文章要快很多倍（如果你没试过是无法想象的快），很快你就写满了整张A3纸！</p>
		<p>即为别人培训又会做软件的我们就想到用软件来实现这一切！因为软件绘制思维导图，可以大大提高绘图制品的价值，不仅可以自己看，还可以与别人分享，
最重要的是即使修改。如果在纸上绘制的时候把一个分支错误的连接在了另一个分支的后面，就无法修改了，如果是重要的图，就必须重新绘制，但是软件就不怕
了。另外，软件还可以排版，或者将某个思维导图<strong>导出成Word/Powerpoint</strong>的格式，再进一步利用，这就延长了办公软件的流程，从用户脑子里想的到纸上打印的完全的连接了起来。</p>
		<p>作为补齐最后一公里的软件产品，可视化思维工具还是跟其它Office软件有很大的不同，首先，Word和Powerpoint几乎都是以线性的方式组织文字和内容的，这和人脑的结构有很大的不同，因为人类都是以<strong>发散的方式</strong>思
考问题的；其次，Word和Powerpoint在调整篇章结构上太繁琐也不直观，很多用户都反映，他们在写文章或制作幻灯片之前都先用XMIND列提
纲，以便于谋篇布局，然后再为每个分支填入内容，之后还可以持续优化篇章结构，完全确定了以后，再用XMIND导出成最终需要的格式，修改错别字和最后排
版。</p>
		<p>除了绘制思维导图以外，XMIND还包含了很多其它符合人类基本思维方式的图形，我们将这类图形统称为“<strong>思维图</strong>”。XMIND提供了在线更新的功能，XMIND的用户还可以从芒果软件的网站上源源不断的下载更多的思维图的种类。当然，我们只作最重要的，适合大多数人的，具有个性化的图形还是要靠用户自己用XMIND丰富的个性定制功能自己设计，并提取模版，相互交流。</p>
		<p>可视化思维工具的另一大类用途是与他人交流思想。我们有很多客户是大企业的销售经理，他们在向客户演示自己产品和服务的过程中引入了XMIND，并获得了很好的反馈效果。因为它的形状是最适合人脑思维的，所以能表达的信息也最多最精确，也最容易被别人接受。XMIND的<strong>图标库</strong>也为用户绘制的思维图提供了额外的亮点，图形+图标所具有的表达能力是非凡的。此外，咨询公司和培训公司还辅导学员们利用XMIND帮助记忆和会议记录。最后，XMIND可以将同一个主题的所有思维图<strong>整合在一个文件里</strong>，因为用户愿意将“晨会计划”、“晨会内容”、“参会人员”和“会议反馈”等主题放在一个文件里，便于发给自己的boss。</p>
		<p>上面这些就是可视化思维工具的主要功能，了解一下XMIND
2007就会发现它的功能还远远不只这些。芒果软件的宗旨就是为广大用户提供最适合思维的软件，而XMIND的宗旨就是整理您的思维、发掘您的潜意识、激
活您的创意灵感，最后，帮助您绘制漂亮的图形。让Google去搜索网络吧，我们搜索的是您的大脑！</p>
		<p>
				<strong>[谁将会是XMIND的用户？]<br /></strong>XMIND有两类大的用户群：</p>
		<p>1。高层经理、白领精英、办公室一族、政府公务员<br />
特征：每日工作用脑量很大，处在现代办公环境中，常常需要计划、决策、记录、创意、演示、与人交流等等，工作节奏很快，工作时间中使用电脑占一定比重。</p>
		<p>2。中学生、大学生、中学教师、大学教授<br />
特征：每日学习、工作用脑量很大，常常需要记录、总结、归纳、综合、交流等等，工作、学习繁忙，使用电脑占一定比重。
</p>
<img src ="http://eht.blogjava.net/aggbug/94288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2007-01-16 19:36 <a href="http://www.blogjava.net/briansun/archive/2007/01/16/94288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>芒果软件实验室 诚揽人才</title><link>http://www.blogjava.net/briansun/archive/2006/09/09/68698.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Sat, 09 Sep 2006 04:34:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2006/09/09/68698.html</guid><description><![CDATA[
		<p>芒果软件实验室（Mango Software Labs）是国内首家从事可视化思维工具类软件开发的机构。我们由一群技术精英组成，致力于使用先进的软件技术帮助用户真正意义上提高生产率，以15%的成本为用户提供15%的解决方案。</p>
		<p>芒果软件实验室正在研发中的项目Brainy（利用盛行于欧美，风靡于全球的思维导图理论）将会成为未来人类离之不得的全脑思维伴侣，它利用计算机软件技术和全脑思维艺术将人们的大脑和思维带入一个积极、高效的全新领域，Brainy将会在人们日常办公和生活中帮助用户增强记忆、规划写作、促进团队合作和内部沟通，在客户演示、会议记录、个人计划、项目管理、青少年教育等方面更是发挥着不可估量的作用。</p>
		<p>Brainy不能取代任何Office 办公软件，却能和当前的Office紧密集成，成为办公软件生态环境中的一员，Brainy存在的目的是为了填补用户的大脑和办公软件制品之间的鸿沟。多数用户可以在五分钟之内上手，并在第一次试用之后就离之不得。尤其对于英文区国家的从小在这种氛围中长大的用户而言更是容易接受这种理念。也正因为如此，芒果软件实验室从成立之初就把国际市场当作最重要的市场来看待。</p>
		<p>目前Brainy仍在开发阶段，芒果软件实验室需要有理想有抱负有能力有信心的“四有”技术骨干和创业精英的加盟。我们以Eclipse RCP为产品的运行平台，以测试驱动为产品的开发过程，以大量开放标准和开源软件为降低产品成本的有效手段，以全球第一的思维导图软件为产品的战略目标。</p>
		<p>芒果软件实验室在技术上重视重构和复用，在经营上重视产品化和全球化，在管理上重视“团队综合能力”和敏捷开发，实验室还会定期聘请“武林高手”现身讲座，让每位员工每周都有培训的机会，每月都有培训别人的任务，定期参加Code Review，量身订做技术课程。</p>
		<p>思想为箭，芒果做弓。一群充满激情和个性的年轻人正试图通过他们的努力去改变人们的思维方式，乃至改变整个世界。</p>
		<p>加入我们，你一定会大开眼界！</p>
		<p>
				<br />公司主页：  <a href="http://www.mango-software.com">http://www.mango-software.com</a></p>
		<p>有意者请联系（邮件请包含个人简历）：<a href="mailto:hr.mangosoft@gmail.com">hr.mangosoft@gmail.com</a></p>（申请职位请注明信息来自BlogJava,将会得到更多的关注) <br /><br /><span class="tpc_content">招聘职位1:<br />【软件设计师：RCP方向】<br /><br />职位描述：<br />通过重用Eclipse组件搭建桌面应用程序，完成所有的设计要求，将产品的易用性提高到专业水准。全部代码使用Java5.0。（同时招全职/实习研究生）<br /><br />职位要求：<br />1。精通Eclipse RCP，Eclipse插件开发，SWT/JFace架构。<br />2。精通设计模式，熟练使用重构优化软件设计。<br /><br /><br />招聘职位2：<br />【软件设计师：ODF方向】<br /><br />职位描述：<br />担任Brainy的核心模型的主要开发工作、文件格式设计、导入导出等。全部代码使用Java5.0。（同时招全职/实习研究生）<br /><br />职位要求：<br />1。了解ODF。<br />2。精通JCE者优先。<br />3。精通设计模式，熟练使用重构优化软件设计。<br />4。熟练使用Eclipse开发环境，了解测试驱动开发的开发流程。<br /><br /><br />招聘职位3：<br />【Java程序员】<br /><br />职位描述：<br />担
任Brainy项目组的开发人员，从开发开始做起，逐渐参与设计、测试、需求等环节。全面认识并使用Java5.0、Eclipse3.2、
Graphical Editing Framework、Apache Ant、Jakarta
Commons、iText、TrueZip、BouncyCastle等开发平台和编程环境。适合立志在软件行业发展的同学。（同时招全职/实习研究
生）<br /><br />职位要求：<br />1。精通Java语言。<br />2。有绘图软件开发经验者优先。<br />3。有桌面应用程序开发经验者优先。<br />4。精通设计模式，熟练使用重构优化软件设计。<br />5。熟练使用Eclipse开发环境。<br />6。了解测试驱动开发的开发流程者优先。</span><br /><p> </p><img src ="http://eht.blogjava.net/aggbug/68698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2006-09-09 12:34 <a href="http://www.blogjava.net/briansun/archive/2006/09/09/68698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 NUnit 异步消息测试问题</title><link>http://www.blogjava.net/xdingding/archive/2006/08/08/62461.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Tue, 08 Aug 2006 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2006/08/08/62461.html</guid><description><![CDATA[唉真是有意思，以前在博客园总写些Java文章，现在搬过来又总写.net 。不过两者有很多借鉴<br />以下就是我借鉴一个java的mail<br /> <br /><p style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><span lang="ZH-CN" style="FONT-FAMILY: SimSun">最近在写一个使用</span><span lang="EN-US" style="FONT-FAMILY: Verdana">XMPP</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">协议</span><span lang="EN-US" style="FONT-FAMILY: Verdana">(gtalk</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">和</span><span lang="EN-US" style="FONT-FAMILY: Verdana">jabber</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">使用的</span><span lang="EN-US" style="FONT-FAMILY: Verdana">) </span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">即时通讯的客户端，在</span><span lang="EN-US" style="FONT-FAMILY: Verdana">.net</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">下使用了一个</span><span lang="EN-US" style="FONT-FAMILY: Verdana">Open Source</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">库</span><span lang="EN-US" style="FONT-FAMILY: Verdana">ags. </span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">这个库是基于</span><span lang="EN-US" style="FONT-FAMILY: Verdana">Windows Socket</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">异步方式来做底层架构的。这就存在</span><span lang="EN-US" style="FONT-FAMILY: Verdana">NUnit</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">的使用问题，</span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><span lang="ZH-CN" style="FONT-FAMILY: SimSun">如果按照一般</span><span lang="EN-US" style="FONT-FAMILY: Verdana">Unit</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">使用过程，在客户端发出请求后，因为异步原因，会不等接收数据的</span><span lang="EN-US" style="FONT-FAMILY: Verdana">delegate</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">事件被调起，</span><span lang="EN-US" style="FONT-FAMILY: Verdana">Test</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">函数就会提前退出。</span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><span lang="ZH-CN" style="FONT-FAMILY: SimSun">为此到网上海</span><span lang="EN-US" style="FONT-FAMILY: Verdana">google</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">了一番，均无此法，后来搜到一封网上的英文</span><span lang="EN-US" style="FONT-FAMILY: Verdana">mail</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">，</span><span lang="EN-US" style="FONT-FAMILY: Verdana">mail</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">里写了几行好像测试异步访问</span><span lang="EN-US" style="FONT-FAMILY: Verdana">Web</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">服务器的测试程序，没头没尾看不出究竟干什么的（他们是讨论一个</span><span lang="EN-US" style="FONT-FAMILY: Verdana">feature</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">问题），但里面几行给了我很大提示，其中有一行</span></p><p style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN: 0in; mso-outline-level: 1"><span lang="EN-US" style="FONT-FAMILY: Verdana"><span style="mso-spacerun: yes"> </span></span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">if (!reset.WaitOne(timeout, true))</span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><span lang="ZH-CN" style="FONT-FAMILY: SimSun">这似乎就是我要寻找的提示，嗯用线程同步信号不错，估计可以解决，经过</span><span lang="EN-US" style="FONT-FAMILY: Verdana">2</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">个小时反复试验终于出炉啦</span><span lang="EN-US" style="FONT-FAMILY: Verdana">,</span><span lang="ZH-CN" style="FONT-FAMILY: SimSun">呵呵</span><span lang="EN-US" style="FONT-FAMILY: Verdana">!</span></p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">大体程序如下：</p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">static ManualResetEvent reset;</p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">private const int timeout = 3000;</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">[TestFixtureSetUp]</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">public void FixtureSetUp()</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">{</p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">reset = new ManualResetEvent(false);</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">[TestFixtureTearDown]</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">public void FixtureTearDown()</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">{</p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">reset.Close();</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">[Test]</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">public void TestConnect()</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">{</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">。。。。。</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">msgControl.Connect(connectInfo);</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">Assert.AreNotEqual("", msgControl.Status);</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">msgControl.RecvStringEvent += new RecvStringCallback(msgControl_RecvStringEvent);</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">reset.Reset();</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">// note for some reason r.AsyncWaitHandle.Wait won't work as expected</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">// if (!r.AsyncWaitHandle.WaitOne (timeout, true))</p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">if (!reset.WaitOne(timeout, true))</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">{</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">if (recvTimes == 0)</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">{</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: SimSun; mso-outline-level: 4">Assert.Ignore("Timeout");</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">else</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">{</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: SimSun; mso-outline-level: 4">Assert.AreEqual(8, recvTimes, "not recv 8 times");</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">Assert.IsNotNull(message, message);</p><p lang="EN-US" style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">private int recvTimes = 0;</p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">void msgControl_RecvStringEvent(string msgText)</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">{</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">recvTimes++;</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">message = msgText;</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">if (recvTimes &gt; 9)</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">{</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: SimSun; mso-outline-level: 4">recvTimes = 0;</p><p style="FONT-WEIGHT: bold; FONT-SIZE: 16pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: SimSun; mso-outline-level: 4">reset.Set();</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun; mso-outline-level: 3">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">}</p><p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2"> </p><p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">希望能对编写异步通讯的人有所帮助</p><img src ="http://eht.blogjava.net/aggbug/62461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2006-08-08 22:57 <a href="http://www.blogjava.net/xdingding/archive/2006/08/08/62461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诚揽人才（北京）</title><link>http://www.blogjava.net/briansun/archive/2006/08/01/61224.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Tue, 01 Aug 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2006/08/01/61224.html</guid><description><![CDATA[
		<br />北京，创业型软件公司，走商用化产品化路线，目前正致力于开发某商务软件套件，特别需要以下人才，有意者请联系：<br /><br />Brian Sun<br /> briansun.vip@gmail.com<br /> 13811410545<br /><br />邮件请包含个人简历，欢迎暑期实习。<br /><br /><b>【软件设计师：UI方向】</b><br />兼职全职均可。<br />要求：<br />1。了解什么是轻量组件架构，熟练使用其中的一个（最好是Swing或Draw2D）。<br />2。精通GEF者优先。<br />3。了解基本的图形学算法。<br />4。精通设计模式，熟练使用重构优化软件设计。<br />工作简介：<br />使用Draw2D编写一个类似GEF的100%MVC架构，并用该架构编写并维护一个编辑器。全部代码使用Java5.0。<br />需要人数：2人<br /><b><br />【软件设计师：RCP方向】</b><br />兼职全职均可。<br />要求：<br />1。精通Eclipse RCP，Eclipse插件开发，SWT/JFace架构。<br />2。精通设计模式，熟练使用重构优化软件设计。<br />工作简介：<br />通过重用Eclipse组件搭建桌面应用程序，完成所有的设计要求，将产品的易用性提高到专业水准。可能需要对插件进行分拆、替换或重写。全部代码使用Java5.0。<br />需要人数：2人<br /><br /><b>【软件工程师：Java方向】</b><br />兼职全职均可。<br />要求：<br />1。精通Java语言，具备一定的Java5.0知识。<br />2。精通设计模式，熟练使用重构优化软件设计。<br />3。熟练使用Eclipse开发环境，了解测试驱动开发的开发流程。<br />工作简介：<br />担任某桌面应用程序的主要开放工作。<br />需要人数：2人<br /><br /><img src ="http://eht.blogjava.net/aggbug/61224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2006-08-01 16:55 <a href="http://www.blogjava.net/briansun/archive/2006/08/01/61224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何给Eclipse的Plugin增加快捷键</title><link>http://www.blogjava.net/fhawk/archive/2006/01/23/28993.html</link><dc:creator>大头鹰</dc:creator><author>大头鹰</author><pubDate>Mon, 23 Jan 2006 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/fhawk/archive/2006/01/23/28993.html</guid><description><![CDATA[在Eclipse的Plugin开发中，给Action增加快捷键是很简单的，只要在插件的plugin.xml加入如下内容即可：<BR><FONT color=#0000ff>&lt;extension<BR>&nbsp;&nbsp;point = "org.eclipse.ui.commands"&gt;<BR>&nbsp;&lt;!-- activeKeyConfiguration项用来说明所绑定快捷键的初始设置 --&gt;<BR>&nbsp;&lt;activeKeyConfiguration value="org.eclipse.ui.defaultAcceleratorConfiguration"/&gt;<BR>&nbsp;&lt;!-- 如果快捷键设置有多套，可以添加多个类别 --&gt;<BR>&nbsp;&lt;category<BR>&nbsp;&nbsp;name="Bacchus.Category1"<BR>&nbsp;&nbsp;description="Test description"<BR>&nbsp;&nbsp;id="Bacchus.Category1"/&gt;<BR>&nbsp;&lt;!-- 其中id为这个command的ID，相关的action通过这个ID标志找到这个command --&gt;<BR>&nbsp;&lt;command<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;name="Bacchus.Category1"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;category="Bacchus.Category1"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;description="Test bacchus command1"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;id="bacchus.portal.ui.commands.BacchusAction"/&gt;<BR>&nbsp;&lt;!-- 具体的快捷键设置，其中command指定实际的coomand的ID --&gt;<BR>&nbsp;&lt;keyBinding<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;keySequence="Ctrl+1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;command="bacchus.portal.ui.commands.BacchusAction"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;configuration="org.eclipse.ui.defaultAcceleratorConfiguration"&gt;<BR>&nbsp;&lt;/keyBinding&gt;<BR>&lt;/extension&gt;<BR></FONT>在具体的Action配置中，只要在其属性definitionId设置成command的ID即可，示例如下：<BR><FONT color=#0000ff>&lt;action<BR>&nbsp;label="Sample Action"<BR>&nbsp;icon="icons/sample.gif"<BR>&nbsp;class="cli.bacchus.portal.ui.actions.BacchusAction"<BR>&nbsp;tooltip="Hello, Eclipse world"<BR>&nbsp;menubarPath="sampleMenu/sampleGroup"<BR>&nbsp;toolbarPath="sampleGroup"<BR>&nbsp;id="bacchus.portal.ui.actions.BacchusAction"<BR>&nbsp;definitionId="bacchus.portal.ui.commands.BacchusAction"&gt;<BR>&lt;/action&gt;</FONT><BR>注意：当给相关的action设置完definitionID后，必须保证其中设置的command是有的，而且是正确的，否则有可能导致该action显示不出来。<BR>更具体的信息请参考eclipse开发参考中关于扩展点org.eclipse.ui.commands的详细描述。<img src ="http://eht.blogjava.net/aggbug/28993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fhawk/" target="_blank">大头鹰</a> 2006-01-23 11:22 <a href="http://www.blogjava.net/fhawk/archive/2006/01/23/28993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]GEF源码分析（六） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事 二</title><link>http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Wed, 07 Dec 2005 16:41:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html</guid><description><![CDATA[&nbsp;<BR>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">GEF源码分析（六） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事 二<BR><BR>GraphicalEditPart先生当天安排了部门及会议计划。经过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门紧张有奏的准备会议讨论的资料，第三天、按时</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">8:30</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">开会。<BR></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR>GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生还如往常，准时提前</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">5</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟坐在会议室前边角上。他喜欢部门的小伙子们，虽然这些小伙子们做事情时常有些不周，但是他更欣赏他们的活力和富有创造激情。所以、每每开会时，他更愿坐在旁边听这些小伙子们的意见，“相比较当个威武的军队长官，我更意是一个严格又和蔼的优秀教练”</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生常常如此提醒自己不要越俎代庖。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门干将小李主持会议，简短阐明会议主题和要求后，（为了提高会议效率会议每人最多</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">5</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟发言，最后</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">20</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟讨论时间，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">5</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">分钟</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生做总结）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小王首先站起发言：“目前我们</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门，虽然，主要任务有明确定义，但是内部的工作流程不明确，没有可依章程。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">...</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">”。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“是呀，公司目前还没有我们部门的标准操作手册，很多问题都有很大随机性，工作的好坏过于依赖人员本身的工作能力，这十分不利于人员的内部流动以及新人员的补充”我们的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">教练</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">满意的点点头。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">小魏起来补充一下：“由于我们内部每个人的做事方法，都是各有一套绝活，流程不一致，经常导致在工作对上下层通知协作出现问题。在水平部门沟通时，也常常不流畅”。这是个大学刚毕业十分活泼的小姑娘。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“为什么大家总是觉得女的职员不好，看多有灵气的一个小姑娘呀，又是个好苗子。”</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">教练</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">"</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">此时内心中的自我形象简直就是华佗再世，那感觉真有点飘飘然乎，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生不由自主地晃了晃脑袋。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">接下来其它人纷纷发言：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“工作经验很难相互交流，积累与提高。很难在部门级对工作流程等进行优化，缺乏专业化。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“我们经常要和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门一起工作，跟踪操作执行。这很是浪费工作时间，尤其是当某个工作需要很长时间，或者中间经常需要和客户交流反馈一段时间，这样非常影响工作效率。”</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“对于客户的问题很难快速根据现有的经验模式形成解决方案，虽然我们公司服务态度和广告质量高于其它公司，但是经常由于反应速度太慢，活被其它公司从中抢了去，销售部门常常抱怨我们部门速度太慢。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“公司在相应客户需要操作过程中，很难针对客户某个需求重新调整。客户常常抱怨在制作过程中很难做些小的改动。”</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1">……</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">由于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生管理小师的带领，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门的会议总是简短有效。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">1</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">个小时多几分钟大家都把问题简明扼要的表达出来。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小李环顾下四周“最后，由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长总结一下今天的会议”。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一直沉默的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GraphicalEditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">先生站了起来，十分精神，也环顾了一下四周，清了清嗓子。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“首先、我要自我检讨一下，这一年多总是忙乱于紧急的小事情当中，很久没有收集大家的建议和反馈了，这十分不利于我们部门的发展。今天大家举出很多目前部门的问题，这些充分反映了大家对部门的业务熟悉程度，我相信，这是因为大家十分关注公司的未来，希望公司越办越好，而不是怨天尤人的牢骚，可能有些领导会觉的这是找毛病对领导不满，在我这里，我今天在一次明确表明，我十方鼓励大家，欢迎大家将一些意见反馈给我，希望大家不仅仅是简单反馈在工作中的直接困难，而且经过自己的思考提炼写成简洁的文书给我，最好发挥自我主动和创造性提出一些变革建议。这些东西将是我们部门及公司潜在的珍贵的财富，同时也是我们部门未来发展方向的一个重要部分。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“今天的会议大家主要是针对我们部门的问题，希望会后大家再从公司整体考虑这些问题，以及未来扩充</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门会带来什么问题，比如大家可以参考我们当初成立时遇到那些问题，这些问题将来如何避免或减少。”</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“按计划，会后，小李，小孙，小丁，小黄还有我，将总结今天会议，同时、制定出未来部门组织变革的策略。在此期间，希望大家踊跃的将自己的想法创意于我们交流。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“还有一件事情，今天要批评一下小丁同事，现在开会不迟到了，但是，不仅没发言、我看你从开会就一直看前天发的材料，为什么不提前准备，这是耽误大家每个人的时间，下不为例。今后、小李你在部门规章里加一条，部门开会前必须提前阅读理解会议材料，凡违反者，包括我在内一律站到会议室角落站着阅读完资料后，在回会议座位。我的话完了。”</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">小丁满脸通红，不由地低着头，双手捂住了腮帮，不敢喘气了，恨不得有个地缝钻进去。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">“今天会议结束。”小李宣布。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">会后根据小孙的会议记录，很快的小李几个人总结出以下的一个鱼骨图。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;<IMG src="http://www.cnblogs.com/images/cnblogs_com/xdingding/Gef-BlogWeb.gif" border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><BR>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><BR>&nbsp;<IMG src="http://www.cnblogs.com/images/cnblogs_com/xdingding/icon1.gif" border=0></P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">什么是因果图？</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">因果图的发明者 Kaoru Ishikawa 是一名管理专家，其最初的目的是改进车间的质量控制工作。正如以下示例所示，因果图还能表达其他环境中的因果关系。<BR><IMG src="http://www.cnblogs.com/images/cnblogs_com/xdingding/ZA010359992052.gif" border=0><BR>&nbsp; </P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">由于因果图的形状很像鱼的骨架，所以它又称作鱼骨图。鱼的脊骨上几根最大的鱼骨表示主要的原因类别。<BR>例如，在本例中，主要的原因类别有盎格鲁人/朱特人、丹麦人、萨克逊人和诺曼底人，这些种族群体都想控制英格兰，从而导致了该战争的爆发。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">主要类别中的较小鱼骨表示主要的原因。例如，在本例中，在萨克逊人这个类别方面，黑斯廷斯战争的主要原因在于公元 1051 年萨克逊王爱德华许诺将王位传给威廉一世。</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: black; FONT-FAMILY: SimSun; mso-outline-level: 1">您还可以在主要原因上添加次要原因。</P><IMG height=1 src="http://xdingding.cnblogs.com/aggbug/292516.html" width=1><BR><BR>
<DIV align=right>般若菩提 2005-12-07 14:14 </DIV><BR>文章来源:<A href="http://xdingding.cnblogs.com/archive/2005/12/07/292516.html">http://xdingding.cnblogs.com/archive/2005/12/07/292516.html</A><img src ="http://eht.blogjava.net/aggbug/22929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-08 00:41 <a href="http://www.blogjava.net/xdingding/archive/2005/12/08/22929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（五） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html</guid><description><![CDATA[<BR><A class=titlelink id=Editor_Results_rprSelectionList__ctl2_Hyperlink1 href="http://xdingding.cnblogs.com/archive/2005/12/05/290704.html"><FONT color=#000000>GEF源码分析</FONT></A>（五） GEF 的EditPart的职能分离 __ 跨国时尚媒体集团广告部门 的故事<BR><BR><SPAN style="FONT-SIZE: 10pt">&nbsp; 
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><SPAN style="FONT-SIZE: 10pt">接下来我们以一个故事的方式来解决第三篇遗留下来问题：</SPAN></P></SPAN><SPAN style="FONT-SIZE: 10pt"><BR></SPAN>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN: 0in; COLOR: #333399; FONT-FAMILY: SimSun; mso-outline-level: 1">已存在一个三角图形EditPart，我们想重用它,但是我们还需要增加（或删去）边框可调整的特性，如何保证无需重新建立一个新的EditPart，或者做出丑陋的继承，当功能不断组合后，出现无数子EditPart类? </P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: 0in; COLOR: #333399; FONT-FAMILY: SimSun; mso-outline-level: 1">如何由框架自动完成Undo及Redo功能？</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><SPAN style="FONT-SIZE: 10pt">
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">话说在某个跨国时尚媒体集团中国区广告部门（这是一家主营平面广告的广告公司，听说董事长是个年仅办百的老头GraphicalEditor先生，来自赫赫有名的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">基金财团），有目前主要有两个子部门</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">广告策划部</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figuer(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">平面设计部</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长是一位中年充满信心和活力GraphicalEditPart先生。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figuer</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长是一位与部门名同名的广告主设计师美丽青春的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小姐。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长GraphicalEditPart目前主要肩负着三项任何：</SPAN></P>
<UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 1in; DIRECTION: ltr; unicode-bidi: embed" type=disc>
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 2"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">处理由其他部门中的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">人员送来各销售部门广告需求；</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 2"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">做出具体的平面设计策划交给</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小姐，由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">小姐负责画出充满激情的平面广告；</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 2"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">读阅客户要求与反馈的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">文书，这些文书是由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（情报收集部门）收集客户的反馈及要求，经过专业的整理与分类而成（上篇我们以及探讨过了）</SPAN></LI></UL>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">由于公司扩大了业务，投入市场的产品种类比以往增加了三倍，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长工作变得异常繁忙有些快压垮了，感觉自己快成为整日驮着重物年迈的驴子，“是不是自己老了”GraphicalEditPart先生开始常常怀疑自己了。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这天，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部长收到总部一封信：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">GraphicalEditPart先生：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; mso-outline-level: 2"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">首先我代表公司感谢您这些年勤奋出色的工作。我们公司在中国短短三年的营业额增长了四倍，同时</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中国部门在此期间获得了公司最有活力部门奖，这些成绩都与您的努力是分不开的。据我们了解，您在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门这三年中，实施了几项富有创意的制度改革，如成立</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">情报收集部门，推广后大大提高了整个公司</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门业务处理能力。为了进一步扩大业务，公司在未来的两年里将在世界各地尤其是中国增加</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">40%</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的区域广告部门，正如您所知道目前公司对于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部门的组织规划以及责任制度还有很多不完善之处，这将十分不利于区域部门扩展的计划。故我委托您做出《未来广告部组织的规划》计划书，本月底将邀请您来总部参加组织规划与变革方案的评审会，届时将会对您的计划书进行评审。如通过评审，公司所有广告部将会按照您的计划书进行变革。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; mso-outline-level: 2"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">祝愿世界明天的舞台，因我们而变得更加美好、充满激情与想象</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun; mso-outline-level: 2">&nbsp;</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: Verdana; mso-outline-level: 3"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>CEO <SPAN style="FONT-STYLE: italic">GEF</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">“噢！太棒了，这封信来的真是及时，如果再继续如此的话，我要压垮了，只好另谋它职了。嗯，这回我要好好地写这个计划书。这样，身上担子总算有减轻的希望。有上司的赏识，我要一展宏图一番。”GraphicalEditPart不由自主拍了下桌子自言自语后，张开双臂，砰地一下仰靠在椅背上，深深地出了口气，双目轻合工作的压力似乎片刻间消失，顺手戴上了他那十分酷毙的太阳镜，小声打开旁边</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">CD</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，噢，夏威夷之夜，感觉自己此时就在夏威夷带着墨镜躺在金黄、松软、温暖的沙滩，吹着口哨，热情似火的太阳穿过太阳镜，越过眼皮，将几缕模糊的光芒带入眼中（其实是他那高瓦的吊灯），海风习习（旁边的电风扇），在享受着这片刻宁静天堂感觉，激情创意不断涌出，啊，久违了的感觉。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">开干！迅速的打开他喜爱的脑图软件</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> -- Mindjet Manager</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，记录下脑中的构思，画下如下计划要点</SPAN></SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1"><BR><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/部门规划.gif" border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun; mso-outline-level: 1">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; mso-outline-level: 1"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">看来GraphicalEditPart先生要大干一场，欲知详情，请听下回分解<IMG src="http://xdingding.cnblogs.com/Emoticons/emsmiled.gif" align=absMiddle border=0></SPAN></P><img src ="http://eht.blogjava.net/aggbug/22555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 14:01 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（四） GEF 消息转义 ___ Tool的作用</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html</guid><description><![CDATA[<BR>郁闷！同志们没有留言，不知是写的太差，何处需要改进，还是大家觉得对自己没有用处....&nbsp; <BR><BR>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF源码分析</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（四）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">消息转义</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> ___ Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的作用</SPAN></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><BR></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><FONT size=2>接着上一节：</FONT></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><FONT size=2>我们先解决如下问题：</FONT></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"><SPAN style="FONT-WEIGHT: bold; COLOR: rgb(51,51,153)">在界面操作过程中，我们希望面对的是边框调整事件，图形移动事件，或者是编辑文本事件，而不是原始的鼠标和键盘事件？</SPAN><SPAN style="COLOR: black"> </SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">术语定义：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">系统</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">事件：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一般由某些计算机人机交互硬件发出信号，并且经操作系统理解后产生的事件，例如：原始的鼠标的移动、点击和键盘的敲击事件等。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">业务语义事件：</SPAN><SPAN lang=EN-US style="FONT-WEIGHT: bold; FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">由系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件和其它</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件触发，由</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务代码理解后产生的事件（操作系统不可理解，同时无任何领域的业务语义），如</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的尺寸调整，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的点击，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（其实不仅限于事件的转义，包括</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的改变，也需要由系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">语义转换到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义来使用）</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.jpg" border=0> 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">控制中的优点是易于理解、维护和扩充，具体的主要有以下方面：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">a.</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">减少系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件判断逻辑部分代码的重复。比如在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部分代码无需分步着大量逻辑重复的代码，当鼠标移动时去判断究竟是一个</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的尺寸改变，还是一个</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动，还是一组</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动，还是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">DragAnd</SPAN><SPAN lang=EN-US style="FONT-FAMILY: SimSun">Drop</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的动作。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">b.Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部分的代码语义明确。在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: SimSun">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">内部处理代码和接口中直接面对的是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义，如图形的移动，图形的尺寸改变，这样、代码易于理解、调试等。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">b.Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">部分代码无需为系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件保存状态。如</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形的移动中，如果这些事件直接在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中处理，从开始</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MouseDown,</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MouseMove</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MouseUp</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">过程中，在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中要集中保留这样众多状态，极易造成</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">代码具体多头职责的症状，从而患上严重的精神分裂</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">:)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">于是乎</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">FrameWork</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">有给出以下的解决方案：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun"><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-7.gif" border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; COLOR: rgb(102,102,102); FONT-FAMILY: 宋体"><BR>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><BR><BR>如上图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">通过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tools(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">根</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">interface</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，当然在视图上的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Menu</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Toolbar</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">是通过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Action</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">发出，这个是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Workbench</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">机制，在此就不讨论了。以下是</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的类继承树：</SPAN></P>
<P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-6.gif" border=0> 
<P style="FONT-SIZE: 8pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">B<BR></SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><BR><BR>从上图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">B</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">可以看出</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">继承的这些类均处理一个或者一类</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件，其中需要保留中间状态的子类均以</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">XXXTracker</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">形式出现。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">首先这些</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的实现类通过</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的接口（上图右边），接收界面来的事件，然后调用内部</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">handleXXX</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，这样通过内部函数getTargetRequest</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">()[</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">create</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Target</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">Request()</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">]</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和getSourceRequest()</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">[</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">createSourceRequest()</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">]</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，把系统</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">事件转换为</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件叫</SPAN><SPAN lang=EN-US style="COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: Verdana; TEXT-DECORATION: underline">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（如图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">C</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）。至此</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">会通过调用相关联的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的接口将</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">业务语义事件通知到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中。于是在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller(EditPart)</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中仅仅需要理解处理</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对象。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><BR><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-8.gif" border=0>&nbsp; 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">C</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">下面以</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">ResizeTracker</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">代码为例：</SPAN></P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class ResizeTracker</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected Request createSourceRequest() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">ChangeBoundsRequest request;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">request = new ChangeBoundsRequest(REQ_RESIZE);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">request.setResizeDirection(getResizeDirection());</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">return request;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected Command getCommand() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">List editparts = getOperationSet();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">EditPart part;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">CompoundCommand command = new CompoundCommand();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">command.setDebugLabel("Resize Handle Tracker");//$NON-NLS-1$</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">for (int i = 0; i &lt; editparts.size(); i++) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">part = (EditPart)editparts.get(i);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">command.add(part.getCommand(getSourceRequest()));</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">return command.unwrap();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void eraseTargetFeedback() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (!getFlag(FLAG_TARGET_FEEDBACK))</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">return;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (getTargetEditPart() != null)</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">getTargetEditPart().eraseTargetFeedback(getSourceRequest());</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">setFlag(FLAG_TARGET_FEEDBACK, false);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected boolean handleButtonUp(int button) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (stateTransition(STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">eraseSourceFeedback();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">eraseTargetFeedback();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">performDrag();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">return true;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">最后还有个问题是<BR></P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><IMG height=50 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.jpg" width=50 border=0><BR>Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这些事件接口，如何从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Viewer</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">传递过来的呢？</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">我画了一个简要的类图</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/gefCallToolsWeb.gif" border=0><BR>图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">D</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"><BR>参照上图，下面罗列重要代码：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">大家主要以下两方面</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">一、创建这些关键事件处理链的过程（注意图上的粗体文字）；</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; COLOR: rgb(153,51,0)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二、消息从</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">SWT</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Canvas</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">实例传递到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">过程（图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中注释标签的顺序）；</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class GraphicalEditor</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void createPartControl(Composite parent) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">createGraphicalViewer(parent);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void createGraphicalViewer(Composite parent) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">GraphicalViewer viewer = new ScrollingGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">viewer.createControl(parent);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">setGraphicalViewer(viewer);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">configureGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">hookGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">initializeGraphicalViewer();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void setGraphicalViewer(GraphicalViewer viewer) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEditDomain().addViewer(viewer);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">this.graphicalViewer = viewer;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class EditDomain </P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void addViewer(EditPartViewer viewer) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">viewer.setEditDomain(this);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">if (!viewers.contains(viewer))</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">viewers.add(viewer);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class GraphicalViewerImpl</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void setEditDomain(EditDomain domain) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">super.setEditDomain(domain);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// Set the new event dispatcher, even if the new domain is null.<SPAN>&nbsp; </SPAN>This will dispose</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// the old event dispatcher.</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getLightweightSystem()</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">private final LightweightSystem lws = createLightweightSystem();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class ScrollingGraphicalViewer</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void setEditDomain(EditDomain domain) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">super.setEditDomain(domain);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// Set the new event dispatcher, even if the new domain is null.<SPAN>&nbsp; </SPAN>This will dispose</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">// the old event dispatcher.</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getLightweightSystem()</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">.setEventDispatcher(eventDispatcher = new DomainEventDispatcher(domain, this));</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; TEXT-DECORATION: underline"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">class </SPAN><SPAN lang=EN-US style="FONT-FAMILY: SimSun">Light</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">weightSystem</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">public void setEventDispatcher(EventDispatcher dispatcher) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">this.dispatcher = dispatcher;</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp; </SPAN>//</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在此</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Shapes</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">例子中是</SPAN><SPAN lang=ZH-CN style="FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">DomainEventDispatcher</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">dispatcher.setRoot(root);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">dispatcher.setControl(canvas);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">protected void addListeners() {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">EventHandler handler = createEventHandler();</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.getAccessible().addAccessibleListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.getAccessible().addAccessibleControlListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">canvas.addMouseListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">canvas.addMouseMoveListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">canvas.addMouseTrackListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addKeyListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addTraverseListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addFocusListener(handler);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">canvas.addListener(SWT.MouseWheel, handler);</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">……</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">setEventDispatcher(getEventDispatcher());</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">class EventHandler </P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">implements MouseMoveListener, MouseListener, AccessibleControlListener, KeyListener,</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">TraverseListener, FocusListener, AccessibleListener, MouseTrackListener,</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: SimSun">Listener</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">{</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void keyPressed(KeyEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp;</SPAN>//</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在此</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Shapes</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">例子中是</SPAN><SPAN lang=ZH-CN style="FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">DomainEventDispatcher</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; TEXT-DECORATION: underline"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">getEventDispatcher().dispatchKeyPressed(e);</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void mouseDoubleClick(MouseEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEventDispatcher().dispatchMouseDoubleClicked(e);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void mouseMove(MouseEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEventDispatcher().dispatchMouseMoved(e);</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: SimSun">public void mouseUp(MouseEvent e) {</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-STYLE: italic; FONT-FAMILY: SimSun; TEXT-DECORATION: underline">getEventDispatcher().dispatchMouseReleased(e);</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">}</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana">…</P>
<P lang=EN-US style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana">}</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样、在图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">发送到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">机制做了简要的探讨。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">学习了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">产生</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的机制，可以帮助我们调试</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，同时如果在大家自己的程序中需要有新的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">交互类型，也可以试着建立自己的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Tool</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">类产生新的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Request</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，这样在自己的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">产生对应的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Command,</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样就可以处理实现新的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">交互类型。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在下一篇我们探讨一下有关图</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">A</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">如何产生</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Command</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，以及执行</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Command</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">问题。</SPAN></P><img src ="http://eht.blogjava.net/aggbug/22553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:58 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22553.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（三） 模拟GEF设计思路，解剖GEF2 附图：包含GEF的Editor创建时序图 </title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html</guid><description><![CDATA[<BR><BR>&nbsp; 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun"><STRONG>包含GEF的Editor创建时序图</STRONG></SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> <BR><BR></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">网站上例子<A href="http://www.eclipse.org/articles/Article-GEF-diagram-editor/shape.html">A Shape Diagram Editor</A>为例</SPAN></P><BR><BR><IMG height=452 hspace=5 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/gefc1.gif" width=590 align=bottom><BR><BR><BR><BR><BR><IMG height=325 hspace=0 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/%E5%8C%85%E5%90%ABgef%E7%9A%84Editor%E7%9A%84createPartControl.gif" width=471><BR><BR><IMG height=253 hspace=0 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/configGraphicalViewer.gif" width=750><BR><BR><IMG height=376 hspace=0 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/initializeGraphicalViewer.gif" width=792>&nbsp;<img src ="http://eht.blogjava.net/aggbug/22552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:55 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（二） 模拟GEF设计思路，解剖GEF 1</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html</guid><description><![CDATA[&nbsp; 
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">学习笔记（二）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">模拟</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">设计思路，解剖</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF 1</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">如同其他的一些</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">framework</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一样，是一个复杂庞大（有点夸张<IMG src="http://xdingding.cnblogs.com/Emoticons/emwink.gif" align=absMiddle border=0>）的，当我们想使用驾驭它时，就必须全面的理解其整体构架及其运作过程。这需要我们的毅力和敏锐。旅途开始了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">….</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun"><BR>&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">主要的任务是针对</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形编辑操作，如下图。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-1.jpg" border=0> 
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">为了使</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">能够广泛的用于种类繁多</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">图形编辑领域，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">就必须建立一个严格的易扩充</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易组合</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易重用的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">框架（当然这种分解细化功能对象的方法思想，我们可以用在其它的地方，其它领域、其他语言如</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">C#</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">上）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-1.gif" border=0> 
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">那么如果设计</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这个</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">严格的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">框架</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">是严格的独立，它不依赖与</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller) </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以及</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">此框架</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">如何</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">达到</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易扩充</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易组合</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">/</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">易重用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的特性。下面我按照自己拙劣的思路，以麻雀之眼度</SPAN><SPAN lang=ZH-CN style="COLOR: black; FONT-FAMILY: SimSun">鸿雁之志啦<IMG src="http://xdingding.cnblogs.com/Emoticons/emembarrassed.gif" align=absMiddle border=0></SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">部分：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">理所当然要使用自家的东东</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。利用</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figuer</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">作为自己的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">部分：</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">往往内部包含了千差万别、不可预知的商业信息。因此、</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">框架应该尽量减少约束（在下面将详细说明约束）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in"><SPAN lang=EN-US style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-WEIGHT: bold; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">部分：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart/Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure/Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这三个树状对象模型，在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中将建立了与其对应的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Figure/Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">结点</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">建立一一关联的关系。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">这样产生的构架如下：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.gif" border=0> 
<P style="FONT-SIZE: 8pt; MARGIN: 0in; COLOR: rgb(102,102,102); FONT-FAMILY: 宋体">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P><IMG src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/Untitled-2.jpg" border=0> 
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0); FONT-FAMILY: SimSun">思考：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(153,51,0)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">为什么</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">要同</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一样采用树状结构呢？</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">当</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">以树状的形式存在，这样便于功能分解（这个道理有点像</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">在类设计中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">复合优于继承</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">一般）</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样每一结点的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">即</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EditPart) </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">仅需要处理</SPAN></P>
<UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 1in; DIRECTION: ltr; unicode-bidi: embed" type=circle>
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: rgb(51,51,153)"><SPAN style="FONT-FAMILY: SimSun">自身逻辑功能</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">管理子</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN> 
<LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">必要时通知父</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Controller</SPAN></LI></UL>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; COLOR: rgb(51,51,153)"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">尤其当用户需要在图形界面编辑界面中，需要使用多种不同</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">UI</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">行为规则的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">2D</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">元素（例如不同的形状块，不同行为的连线等）组合来完成工作时（例如类似</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Visio</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">这样的界面），这种构架的优势就显露无疑。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">未完待续</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">….(</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">下面要探讨如何产生上述三个树状模型等</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">。</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">)</SPAN></P><img src ="http://eht.blogjava.net/aggbug/22550.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:53 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22550.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GEF源码分析（一） eclipse的GEF相关项目说明</title><link>http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html</link><dc:creator>般若菩提</dc:creator><author>般若菩提</author><pubDate>Mon, 05 Dec 2005 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html</guid><description><![CDATA[<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">学习笔记（一）</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">相关项目说明</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">首先、感谢<A href="http://bjzhanghao.cnblogs.com/">八进制</A>的辛勤劳动和奉献。这几天开始对</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">发生兴趣，<A href="http://bjzhanghao.cnblogs.com/category/36197.html"><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">八进制的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">系列</SPAN></A></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">对我学这些的帮助很大入门很快。自己也就顺手把周末学习的东西记录下来。帮助后来学人。我会把这几天所学陆续写出希望大家支持。目前、正在为八进制例子发愁，我对</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">NodePart</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">增加了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">ResizeEditPolicy</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，但是不知为何鼠标拖动时有个灰色的区域在随着变化，但鼠标释放时，</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">NodeFigure</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的尺寸不发生变化，是否是因为在</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">refreshVisuals</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">中固化了</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Size</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">，代码学习中</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">….</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">eclipse</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">相关项目说明。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">各项目的简介：</P>
<P style="MARGIN: 0in"><IMG height=222 hspace=5 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/temp.jpg" width=350 align=bottom></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><EM><STRONG>Draw2D</STRONG></EM></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">建立了</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">2</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">维的图形库</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">树状图形部件</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Figure)</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">，负责显示</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">2</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">维的图形展示。<BR></SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR><STRONG><EM>GEF</EM></STRONG></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: arial">Graphical Editing Framework</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">建立标准的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">构架，代码利用</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">作为自己的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">View</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">部分，主要代码实现复杂的树状</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">(</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">于</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">分别对应</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">)<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的控制器。实现的框架具有很高的可复用等特性，例如：将图形部件功能分解为多个</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EditPolicy</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">，这样使用者可以通过</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">installEditPolicy</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">接口来定制，以及扩充自己的某一功能特征。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR><STRONG><EM>EMF</EM></STRONG>:<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: arial">Eclipse Modeling Framework</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">首先在一个轻量级项目以及项目初期开发，</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">常常采用拥有</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Property</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Java</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">对象来简单明了表示【即</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: arial">Plain Old Java Objects (POJOs)</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">】。</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: arial">E</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">MF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">定义了一套Ecore元模型，使得</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">具有易于维护、易于扩充、易于数据交换等特性的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Model Framwork</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">。因此、在实际中大型的项目中往往会采用</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">Draw2D</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EMF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的方式来实现整体的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">MVC</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">模式。例如：</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">ROSE</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的最新版本</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">IBM.Rational.Software.Architect就是采用了这种构架。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><BR><STRONG><EM>GMF</EM></STRONG></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">（</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: arial">Graphical Modeling Framework </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">）</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">使用了</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">和</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EMF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">，建立了两个之间的桥梁框架，同时实现了一些领域上的典范应用，如</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">UML</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">图，甘特图，脑图等。（项目正在进行中这些功能还未完备。可以用来参考以实现自己的一个标准的</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">GEF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="COLOR: navy; FONT-FAMILY: Verdana">EMF</SPAN><SPAN lang=ZH-CN style="COLOR: navy; FONT-FAMILY: SimSun">的应用）。</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">各项目依赖关系：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="MARGIN: 0in"><IMG style="WIDTH: 218px; HEIGHT: 173px" height=159 src="http://xdingding.cnblogs.com/images/cnblogs_com/xdingding/temp2.JPG" width=218 border=0></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">&nbsp;</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: SimSun">如上图：使用者可以有以下几种用法：</P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">EMF: Model</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">管理层</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D: </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二维图形展现</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF: </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二维图形的简单编辑模块</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> EMF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">二维图形的编辑模块</SPAN></P>
<P style="FONT-SIZE: 10pt; MARGIN: 0in"><SPAN lang=EN-US style="FONT-FAMILY: Verdana">Draw2D </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GEF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> EMF </SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">＋</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana"> GMF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">：基于</SPAN><SPAN lang=EN-US style="FONT-FAMILY: Verdana">GMF</SPAN><SPAN lang=ZH-CN style="FONT-FAMILY: SimSun">提供的图形编辑功能之上扩展<BR></SPAN></P><img src ="http://eht.blogjava.net/aggbug/22549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xdingding/" target="_blank">般若菩提</a> 2005-12-05 13:50 <a href="http://www.blogjava.net/xdingding/archive/2005/12/05/22549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天下归一，谈EclipseCon2005</title><link>http://www.blogjava.net/briansun/archive/2005/03/21/2274.html</link><dc:creator>Brian Sun</dc:creator><author>Brian Sun</author><pubDate>Mon, 21 Mar 2005 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/briansun/archive/2005/03/21/2274.html</guid><description><![CDATA[EclipseCon 2005的余温还没有过去，今天仅从一个方面探讨一下它的贡献：<br>
<br><span style="font-family: courier new; font-weight: bold; color: rgb(255, 0, 0);">
1。Borland Upgrades Position In Eclipse Foundation.</span><br>
虽然此举将令Borland付出每年25万美元的年金，但是这是值得的，这一点从Jolt大奖今年的情况就可以看出。Borland必须作出反映了，是继
续以JBuilder为武器与Eclipse竞争到底，还是主动投诚，加速Eclipse的进程，并在合适的时机将JBuilder整个端到
Eclipse上面去。还好，Borland选择了后者，让人们不必再为两种不同的标准而烦恼，让天下归一。<br>
<br><span style="color: rgb(255, 165, 0); font-weight: bold; font-family: courier new;">
2。BEA Contributes JRockit To Eclipse Foundation</span>.<br>
这个举动实在令人佩服，（佩服是说我真的没有想到）。因为在JDK这一边，除了Sun之外，还有三个可圈可点的产品：IBM
JDK，曾是性能最好的JDK，出到1.3后就没声音了，后来贡献给了WSAD；IBM
Jikes，曾是第一个支持增量编译的编译器，后来贡献给了Eclipse成了Eclipse
Compiler（很多场合成了标准，比如linux下的java编译器）；JRockit，曾是（现在仍然是）wintel平台上最快的虚拟机。现在这
三个奇迹全部回归了Eclipse基金会，再次出现了天下归一的局面。<br>
<br><span style="font-family: courier new; color: rgb(128, 0, 128); font-weight: bold;">
3。BEA Contributes BEA Workshop To Eclipse Foundation.</span><br>
关于Java开发环境的竞争曾经进入过白热化的阶段，当年雄踞一方的Visual
Cafe，如今已经不见了踪影，开源环境下的Iava也被JCreator取而代之，等等等等。现在，自VisualAge for
Java贡献给了Eclipse之后，Rational XDE和BEA
workshop也贡献给了Eclipse，现在只等Borland步其后尘，才能最终实现天下归一的梦想。<br>
<br><span style="font-family: courier new; font-weight: bold; color: rgb(165, 42, 42);">
4。Rational SDP Gets Ready For Eclipse 3.0.</span><br>
RSDP:Rational软件开发平台，已经为建立在Eclipse
3.0之上的想法做好了准备，尽管还缺乏一些内部细节的透露。目前我们知道的内容是一对矛盾体：Rational的最高领导已经明确表示Rational
将继续支持Java和DotNET两种平台，但是IBM的有关官员却表示即将推出的RSDP将全面建立在Eclipse
3.0之上。对于这种矛盾，新闻界有些人认为IBM将推出让Eclipse支持DotNET开发的插件，是这样的吗？我不知道。如果真是这样的，那已经不
是天下归一这个词能够形容的了。<br>
<br>
<br>
<br>
<img src ="http://eht.blogjava.net/aggbug/2274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/briansun/" target="_blank">Brian Sun</a> 2005-03-21 10:04 <a href="http://www.blogjava.net/briansun/archive/2005/03/21/2274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>