﻿<?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://www.blogjava.net/JetGeng/category/5869.html</link><description>我的Java天堂</description><language>zh-cn</language><lastBuildDate>Sat, 15 May 2010 13:52:36 GMT</lastBuildDate><pubDate>Sat, 15 May 2010 13:52:36 GMT</pubDate><ttl>60</ttl><item><title>Osgi常见错误分析</title><link>http://www.blogjava.net/JetGeng/archive/2010/05/14/321000.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Fri, 14 May 2010 11:15:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2010/05/14/321000.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/321000.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2010/05/14/321000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/321000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/321000.html</trackback:ping><description><![CDATA[<img src="http://www.blogjava.net/images/blogjava_net/JetGeng/45001/o_osgi_error.png" alt="" border="0" /><br />
文中提到的代码<a title="castexception_src" href="http://www.blogjava.net /Files/JetGeng/castexception.zip">castexception_src</a> <br />
编译好了包括不同的版本org.gunn.castexception.supplier插件文件为<a title="castexception_bin" href="http://www.blogjava.net/Files/JetGeng/castexception_bin.rar">castexception_bin</a>
 
 
<img src ="http://www.blogjava.net/JetGeng/aggbug/321000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2010-05-14 19:15 <a href="http://www.blogjava.net/JetGeng/archive/2010/05/14/321000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Galileo: EMF-Databinding – Part 1--creation of the domain-model</title><link>http://www.blogjava.net/JetGeng/archive/2009/11/07/301576.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sat, 07 Nov 2009 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2009/11/07/301576.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/301576.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2009/11/07/301576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/301576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/301576.html</trackback:ping><description><![CDATA[<div>
<p>在我们创建领域模型前，我们有必要了解一下我们的模型用来表达什么内容。 所以我就先解释一下在这个系列文章中要实现应用。 <tt>假设Eclipse组织邀请你编写一个让他们管理贡献者和项目的应用程序。 </tt>
</p>
<p>我们需要创建一个模型来表达客户提供的信息。他们有可能如下图。 </p>
<p><img src="http://tomsondev.files.wordpress.com/2009/06/ecorescreen.png?w=510&amp;h=294" alt="" /></p>
<p>让我们进一步的看看这个模型。 </p>
<div>
<dl><dt>
Fundation
</dt><dt><img src="http://tomsondev.files.wordpress.com/2009/06/ecore_foundation.png?w=249&amp;h=53" alt="" width="249" height="53" /></dt><dd>
<p>fundation是这个模型的根，他拥有两个列表属性。 </p>
<table summary="Simple list" border="0">
    <tbody>
        <tr>
            <td>
            <span><em>projects:</em>
            </span>
            像EMF,Techonlogy,Platform这样的顶级项目。 </td>
        </tr>
        <tr>
            <td>
            <span><em>persons:</em>
            </span>
            参加一个或多个项目的人。
            </td>
        </tr>
    </tbody>
</table>
</dd><dt>
Project
</dt><dt><img src="http://tomsondev.files.wordpress.com/2009/06/ecore_project.png?w=230&amp;h=190" alt="" width="230" height="190" /></dt><dd>
<p>Eclipse项目拥有很多属性，比如项目开始和结束时间、项目的主页的url等等。下面列出我们最感兴趣的。 </p>
<table summary="Simple list" border="0">
    <tbody>
        <tr>
            <td>
            <span><em>subprojects:</em>
            </span>
            一个项目可以拥有多个子项目。子项目本身也可以拥有多个子项目。
            </td>
        </tr>
        <tr>
            <td>
            <span><em>parent:
            </em>
            </span>
            项目有一个父亲（除了顶级项目外）。这就意味着项目和子项目（project-subproject）的关系是一个双向的关系。
            </td>
        </tr>
        <tr>
            <td>
            <span><em>projectleads </em>
            </span>
            一个项目有多个项目领导人。 </td>
        </tr>
        <tr>
            <td>
            <span><em>committers </em>
            </span>
            一个项目可以拥有多个贡献者。
            </td>
        </tr>
    </tbody>
</table>
</dd><dt>
CommitterShip
</dt><dt><img src="http://tomsondev.files.wordpress.com/2009/06/ecore_committership1.png?w=176&amp;h=88" alt="" width="176" height="88" /></dt><dd>
<p>当一个用户成为一个项目的贡献者（Committer）时，这就建立了一个committership。他拥有一个开始时间和结束时间。另外我们还要记录下下面的属性。
</p>
<table summary="Simple list" border="0">
    <tbody>
        <tr>
            <td>
            <span><em>project:</em>
            </span>
            和committership相关的项目。项目和committership是一个双向的关系。
            </td>
        </tr>
        <tr>
            <td>
            <span><em>person:</em>
            </span>
            参加项目的人。
            </td>
        </tr>
    </tbody>
</table>
</dd><dt>
Person
</dt><dt><img src="http://tomsondev.files.wordpress.com/2009/06/ecore_person.png?w=237&amp;h=111" alt="" width="237" height="111" /></dt><dd>
<p>贡献者或项目领导人的信息。我们关系的信息如下： </p>
<table summary="Simple list" border="0">
    <tbody>
        <tr>
            <td>
            <span><em>committerships:</em>
            </span>
            用于保存和人相关的所有的committerships.这说明人和committership是一个双向关系。
            </td>
        </tr>
    </tbody>
</table>
</dd></dl>
</div>
<p>下面这张类图给出了关于上面模型的全貌。 </p>
<p><img src="http://tomsondev.files.wordpress.com/2009/06/project.png?w=510&amp;h=327" alt="" /></p>
<p>正如你所看到的，我把许多关系设成了双向关系。 As you noticed I modeled many of the relations as
bidirectional relations.
这个并不是严格要求所有地方都要这样，因为有的地方可以通过eComtainer来获取他的父亲。就像project-subproject一样。
但是包含关系（containment
relationship）在使用databinding的情况下就不太合适了。因为从子到父亲时没有对应feature，只能通过调用eContainer()方法来获得。
EMF提供了一个编辑器来创建你的Ecore-Model并把它保存成XMI格式。我们可以用它来创建测试数据。下图就是一个例子。</p>
<p><img src="http://tomsondev.files.wordpress.com/2009/06/xmi.png?w=510&amp;h=245" alt="" /></p>
</div>
<img src ="http://www.blogjava.net/JetGeng/aggbug/301576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2009-11-07 22:41 <a href="http://www.blogjava.net/JetGeng/archive/2009/11/07/301576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Birt初次体验&amp;mdash;&amp;mdash;资料收集</title><link>http://www.blogjava.net/JetGeng/archive/2008/04/04/190751.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Fri, 04 Apr 2008 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2008/04/04/190751.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/190751.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2008/04/04/190751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/190751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/190751.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.eclipse.org/birt/phoenix/intro/">Birt</a>这个项目开始已经很久了。先前一直没有使用表报的需求，所以也就没有对这个项目做太多的关注。就在前一段时间突然有了这一方面的需求，所以就开始在网上疯狂的Google和Birt相关的信息。因为这个项目开始时间挺长了，而且越来越成熟。所以和他相关的资料挺多。efa在他的《<a href="http://www.blogjava.net/davidxu/articles/6784.html">[JAVA - BIRT]Birt 学习资料</a>》已经给出了很多内容。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了这些内容外我还找到了三本书：</p>
<ol>
    <li>《 <strong><a href="http://www.amazon.com/BIRT-Field-Guide-Reporting-Eclipse/dp/0321442598">BIRT: A Field Guide to Reporting</a> 》</strong>  </li>
    <li><strong>《<strong><a href="http://www.amazon.com/Integrating-Extending-Eclipse-Jason-Weathersby/dp/0321443853/ref=pd_bxgy_b_text_b">Integrating and Extending BIRT</a></strong>》</strong>  </li>
    <li><strong>《<a href="http://www.amazon.com/Practical-Data-Analysis-Reporting-BIRT/dp/1847191096">Packt.Publishing.Practical.Data.Analysis.and.Reporting.with.BIRT</a>》</strong></li>
</ol>
<p>&nbsp;<strong>&nbsp;&nbsp;&nbsp; </strong>第一本和第二本是在是基于 Birt 2.1。</p>
<p>&nbsp; &nbsp;&nbsp;&nbsp; 第三本书是基于Birt 2.2</p>
<p>&nbsp;&nbsp;&nbsp; 有了这些东西基本就可以上路了。但是我又一想，如果有点例子就更好了。例子肯定是有的。官方就有，还等什么呢还不赶紧去拿。</p>
<p>&nbsp;</p>
<p><a href="http://www.blogjava.net/images/blogjava_net/JetGeng/WindowsLiveWriter/Birt_818E/birt_2.jpg"><img style="border-width: 0px;" alt="birt" src="http://www.blogjava.net/images/blogjava_net/JetGeng/WindowsLiveWriter/Birt_818E/birt_thumb.jpg" border="0" height="193" width="244" /></a> </p>
<p>到里面随便找吧。肯定有你合适的。</p>
<p>下面要做的事情就是分析好你的需求，好好用birt来表现你的内容了。</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/190751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2008-04-04 10:01 <a href="http://www.blogjava.net/JetGeng/archive/2008/04/04/190751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WTP中常见问题解答</title><link>http://www.blogjava.net/JetGeng/archive/2007/10/15/152982.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Mon, 15 Oct 2007 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2007/10/15/152982.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/152982.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2007/10/15/152982.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/152982.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/152982.html</trackback:ping><description><![CDATA[<p style="margin-bottom: 0cm;">问题一：</p>
<p style="margin-bottom: 0cm;">问：项目图标报错，<font face="Times New Roman, serif">Problems
</font>试图有一条错误显示&#8220;<font face="Times New Roman, serif">Java
compiler level does not match the version of the installed Java
project facet.&#8221;</font>。</p>
<p style="margin-bottom: 0cm;">答：这个是因为<font face="Times New Roman, serif">Facted
Project</font>中的<font face="Times New Roman, serif">Java</font>版本设定与项目的<font face="Times New Roman, serif">Java</font>版本设定不一致。</p>
<p style="margin-bottom: 0cm;"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/project_factes.jpg" alt="" border="0" /></p>
<p style="margin-bottom: 0cm;">如<font face="Times New Roman, serif">Drawing </font>１: Modify<font face="Times New Roman, serif">: Modify Faceted Project</font>中所示，这个时候项目的<font face="Times New Roman, serif">Java</font>的版本为<font face="Times New Roman, serif">5.0</font>。如果项目的<font face="Times New Roman, serif">Java
Compiler</font>的设置如<font face="Times New Roman, serif">Drawing </font>２: Java C<font face="Times New Roman, serif">: Java Compiler</font>中所示的设置。就是会出现问题中所述的错误。修改的方式很简单，只要统一一下他们的设置。让他们保持一致就<font face="Times New Roman, serif">OK</font>了。</p>
<p style="margin-bottom: 0cm;"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Java_Compiler.jpg" alt="" border="0" /><br />
</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/152982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2007-10-15 14:26 <a href="http://www.blogjava.net/JetGeng/archive/2007/10/15/152982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用DTP时遇到一个很奇怪的问题</title><link>http://www.blogjava.net/JetGeng/archive/2007/06/22/125832.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Fri, 22 Jun 2007 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2007/06/22/125832.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/125832.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2007/06/22/125832.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/125832.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/125832.html</trackback:ping><description><![CDATA[<span style="font-size: 10.5pt; font-family: 宋体;">使用</span><span style="font-size: 10.5pt; font-family: &quot;times new roman&quot;;" lang="EN-US">DTP</span><span style="font-size: 10.5pt; font-family: 宋体;">时遇到一个很奇怪的问题。<br><br></span><span style="font-size: 10.5pt; font-family: 宋体;">我所使用的</span><span style="font-size: 10.5pt; font-family: &quot;times new roman&quot;;" lang="EN-US">DTP</span><span style="font-size: 10.5pt; font-family: 宋体;">的版本是</span><span style="font-size: 10.5pt; font-family: &quot;times new roman&quot;;" lang="EN-US">dtp-sdk_1.0_200612211</span><span style="font-size: 10.5pt; font-family: 宋体;">。我通过</span><span style="font-size: 10.5pt; font-family: &quot;times new roman&quot;;" lang="EN-US">Data Source Explorer</span><span style="font-size: 10.5pt; font-family: 宋体;">来浏览数据库是发现有的字段的类型不能正确显示。<br><img alt=""  src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/dtp/mysql.jpg" height="17" width="166"><br><img alt=""  src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/dtp/notypefield.jpg" height="213" width="346"><br>
<p>这个数据库是Mysql
5.0.</p>
<p>这个数据表在Navicat中的设计视图如下图。</p>
<img alt=""  src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/dtp/innavicat.jpg" height="300" width="518"><br>
<p>这种问题不光出现在mysql数据库中，在oracle 10g的数据库中我也发现了类似的情况。</p>
<p>发现他不能正常的显示Clob和Blob这两种类型。</p>
<p><img alt=""  src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/dtp/imagedbdtp.jpg" height="91" width="246"><br></p>
<br>在Sql plus中这个表的描述为：<br><img alt=""  src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/dtp/imagedbsql.jpg" height="150" width="597"><br><br>知道怎么回事的兄弟们，帮忙告诉我一声。先谢谢了。<br>
<br></span><img src ="http://www.blogjava.net/JetGeng/aggbug/125832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2007-06-22 14:39 <a href="http://www.blogjava.net/JetGeng/archive/2007/06/22/125832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>看到了Eclipse AspectJ</title><link>http://www.blogjava.net/JetGeng/archive/2007/03/06/102163.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Tue, 06 Mar 2007 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2007/03/06/102163.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/102163.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2007/03/06/102163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/102163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/102163.html</trackback:ping><description><![CDATA[今天看到了Eclipse AspectJ这本书，小试了一下这个东西还真的不错。
<img src ="http://www.blogjava.net/JetGeng/aggbug/102163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2007-03-06 14:48 <a href="http://www.blogjava.net/JetGeng/archive/2007/03/06/102163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于GEF中的Connection</title><link>http://www.blogjava.net/JetGeng/archive/2007/01/08/92407.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Mon, 08 Jan 2007 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2007/01/08/92407.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/92407.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2007/01/08/92407.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/92407.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/92407.html</trackback:ping><description><![CDATA[ 
<p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">在</font><font face="宋体">gef</font><font face="宋体">项目中连线一直扮演这个不可或缺的角色。碰巧前段时间有个机会好好的看了这个部分的内容。下面就把我的一点点认识和大家分享。</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">首先要在模型上支持，能够保存连接的信息。对于不同的项目有不同的要求。我们通过两个例子就可以看出这一点来。</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="Times New Roman, serif"><font face="宋体">1</font></font><font face="宋体">、</font><font face="Times New Roman, serif"><a href="http://www13.plala.or.jp/observe/GEF/"><font face="宋体">http://www13.plala.or.jp/observe/GEF/</font></a><font face="宋体"></font></font><font face="宋体">示例中的</font><font face="Times New Roman, serif"><font face="宋体">GEF6.zip </font></font><font face="宋体">（下面称这个例子为</font><font face="Times New Roman, serif"><font face="宋体">HelloWold</font></font><font face="宋体">）</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">运行的结果入下图所示：</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/gef/connection/hellwoui.jpg" alt="hellwoui.jpg" border="0" height="313" width="378" /></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">它的模型可以使用如下的类图来表示：</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/gef/connection/LineConnectionModel-i.jpg" alt="LineConnectionModel-i.jpg" border="0" height="314" width="616" /></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">用来描述</font><font face="宋体">Connection</font><font face="宋体">的分别是</font><font face="宋体">LineConnectionModel</font><font face="宋体">和</font><font face="宋体">ArrowConnectionModel</font><font face="宋体">这两个类。这两个类的父类和图形模型（</font><font face="宋体">HellowModel</font><font face="宋体">）相关。</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">2</font><font face="宋体">、</font><font face="宋体">IBM</font><font face="宋体">红皮书中的</font><font face="宋体">GEF</font><font face="宋体">范例</font><font face="宋体">(</font><font face="宋体">下面称这个例子为</font><font face="宋体">workflow)</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">运行效果如下图：</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/gef/connection/gefrun.jpg" alt="gefrun.jpg" border="0" height="234" width="368" /></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">他的模型可用下面的类图描述：</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/gef/connection/gefredbook.jpg" alt="gefredbook.jpg" border="0" height="515" width="710" /></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">其实连接的模型应该很简单，他只要能保存他的两端的对象就好了。图形模型（如</font><font face="宋体">HelloWold</font><font face="宋体">中的</font><font face="宋体">HelloModel</font><font face="宋体">）能够保持与他相关连的连接（</font><font face="宋体">HelloWold</font><font face="宋体">中的</font><font face="宋体">LineConnectionModel</font><font face="宋体">或</font><font face="宋体">ArrowConnectionModel</font><font face="宋体">）。</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">看完了</font><font face="宋体">Model</font><font face="宋体">，我们下面就可以看看</font><font face="宋体">EditPart</font><font face="宋体">部分了。</font></p><p style="margin-bottom: 0cm;" align="left"><font face="宋体"><span lang="zh-CN">要看</span></font><font face="宋体">EditPart</font><font face="宋体"><span lang="zh-CN">当然是要看最关键的了。也就是和连接直接关联的</span></font><font face="宋体">EditPart</font><font face="宋体"><span lang="zh-CN">了。分别察看了和连接相关的</span></font><font face="宋体">EditPart</font><font face="宋体"><span lang="zh-CN">，发现他们都会实现一个叫</span></font><font face="宋体"><font size="2"><font color="#000000">org.eclipse.gef.NodeEditPart</font></font></font><font face="宋体"><font size="2"><font color="#000000"><span lang="zh-CN">的接口。如下图所示：</span></font></font></font></p><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/gef/connection/ShapeEditPart-a.jpg" alt="ShapeEditPart-a.jpg" border="0" height="269" width="611" /><br /><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">在</font></font><font face="宋体"><font size="2">nodeEditPart</font></font><font face="宋体"><font size="2">中有四个方法需要实现。通过这个四个方法的名字就可以看出他们和</font></font><font face="宋体"><font size="2">Anchor<sup>2</sup></font></font><font face="宋体"><font size="2">密切相关。下面就来看看这几个方法的具体功能：</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">ConnectionAnchor
getSourceConnectionAnchor(ConnectionEditPart connection);</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">当需要画连接的时候，通过这个方法获取连接的源锚点。不管这个锚点在什么位置，他取得以后直接就用它作为源点了。</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">ConnectionAnchor
getSourceConnectionAnchor(Request request);</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">当在准备创建连接的时候，通过</font></font><font face="宋体"><font size="2">Request</font></font><font face="宋体"><font size="2">来获取新连接的源锚点。</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">另外的两个就不再啰嗦了。是为了获得目标的锚点。</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">但是我们肯定看到了</font></font><font face="宋体"><font size="2">HelloWold</font></font><font face="宋体"><font size="2">和</font></font><font face="宋体"><font size="2">Workflow</font></font><font face="宋体"><font size="2">中的连接有点不一样。</font></font><font face="宋体"><font size="2">HelloWold</font></font><font face="宋体"><font size="2">中直接是图元上的，而</font></font><font face="宋体"><font size="2">workflow</font></font><font face="宋体"><font size="2">是通过连接基本图元上面的一个子图元而连接的。简单来说就是他们连接的</font></font><font face="宋体"><font size="2">anchor</font></font><font face="宋体"><font size="2">有点不一样，这样就会出现执行结果的不同。</font></font></font></p><p style="text-indent: 0.83cm; margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">下面来看看他们到底是怎么实现的。根据上面提到的。锚点的获取是通过</font></font><font face="宋体"><font size="2">getSourceConnectionAnchor</font></font><font face="宋体"><font size="2">和</font></font><font face="宋体"><font size="2">getTargetConnectionAnchor</font></font><font face="宋体"><font size="2">方法来获取的。我们只需要好好比对一下他们这几个方法的不同就可以了。</font></font></font></p><p style="text-indent: 0.83cm; margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">HelloWold</font></font><font face="宋体"><font size="2">中的</font></font><font face="宋体"><font size="2">getSourceConnectionAnchor</font></font></font></p><p style="text-indent: 0.83cm; margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2"><b><font color="#7f0055">public</font></b>
ConnectionAnchor getSourceConnectionAnchor(Request request) {</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font face="宋体"><font size="2"><font color="#000000"></font><b><font color="#7f0055">return</font></b><font color="#000000"></font><b><font color="#7f0055">new</font></b><font color="#000000">
ChopboxAnchor(getFigure());</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">	}</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2"></font></font><font face="宋体"><font size="2"><span lang="zh-CN">这里就简单的创建一个
</span></font></font><font face="宋体"><font size="2">ChopboxAnchor
</font></font><font face="宋体"><font size="2"><span lang="zh-CN">就好了。这个就可以直接连到该</span></font></font><font face="宋体"><font size="2">Figure</font></font><font face="宋体"><font size="2"><span lang="zh-CN">上了。</span></font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2">在</font></font><font face="宋体"><font size="2">workflow</font></font><font face="宋体"><font size="2">中这个情况稍微有一点复杂了。先不说，还是看看他的
</font></font><font face="宋体"><font size="2">getSourceConnectionAnchor
</font></font><font face="宋体"><font size="2">是怎么实现的。</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font face="宋体"><font size="2"><font color="#000000"></font><b><font color="#7f0055">public</font></b><font color="#000000">
ConnectionAnchor getSourceConnectionAnchor(</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">ConnectionEditPart connection)
{</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">Connection edge = (Connection)
connection.getModel();</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><b><font color="#7f0055">return</font></b><font color="#000000">
getNodeFigure().getConnectionAnchor(edge.getSource().getName());</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">}</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><br /></p><p style="margin-bottom: 0cm;" align="left"><font color="#3f5fbf"><font face="宋体"><font size="2">/**</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font><font color="#3f5fbf">returns</font><font color="#000000"></font><font color="#3f5fbf">an</font><font color="#000000"></font><font color="#3f5fbf">anchor</font><font color="#000000"></font><font color="#3f5fbf">given</font><font color="#000000"></font><font color="#3f5fbf">its</font><font color="#000000"></font><font color="#3f5fbf">name</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font><b><font color="#7f9fbf">@param</font></b><font color="#000000"></font><font color="#3f5fbf">portName</font><font color="#000000"></font><font color="#3f5fbf">name</font><font color="#000000"></font><font color="#3f5fbf">of</font><font color="#000000"></font><font color="#3f5fbf">the</font><font color="#000000"></font><font color="#3f5fbf">anchor</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font><b><font color="#7f9fbf">@return</font></b><font color="#000000"></font><font color="#3f5fbf">the</font><font color="#000000"></font><font color="#3f5fbf">anchor</font><font color="#000000"></font><font color="#3f5fbf">with</font><font color="#000000"></font><font color="#3f5fbf">the</font><font color="#000000"></font><font color="#3f5fbf">name</font><font color="#000000"></font><font color="#7f7f9f">&lt;code&gt;</font><font color="#3f5fbf">portName</font><font color="#7f7f9f">&lt;/code&gt;</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*/</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><b><font color="#7f0055">public</font></b><font color="#000000">
ConnectionAnchor getConnectionAnchor(String portName) {</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><b><font color="#7f0055">return</font></b><font color="#000000">
(ConnectionAnchor)</font><font color="#0000c0">connectionAnchors</font><font color="#000000">.get(
portName );</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">}</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="margin-bottom: 0cm;" align="left"><font face="宋体"><font size="2"><b><font color="#000000"></font><font color="#7f0055">protected</font></b><font color="#000000">
Hashtable </font><font color="#0000c0">connectionAnchors</font><font color="#000000">
= </font><b><font color="#7f0055">new</font></b><font color="#000000">
Hashtable(7);</font></font></font></p><p style="text-indent: 0.83cm; margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="text-indent: 0.83cm; margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2"><font color="#3f5fbf">/**</font></font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font><font color="#3f5fbf">Add</font><font color="#000000"></font><font color="#3f5fbf">an</font><font color="#000000"></font><font color="#3f5fbf">input</font><font color="#000000"></font><font color="#3f5fbf">port</font><font color="#000000"></font><font color="#3f5fbf">and</font><font color="#000000"></font><font color="#3f5fbf">its</font><font color="#000000"></font><font color="#3f5fbf">anchor</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font><b><font color="#7f9fbf">@param</font></b><font color="#000000"></font><font color="#3f5fbf">portName</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*</font><font color="#000000"></font><font color="#3f5fbf">unique</font><font color="#000000"></font><font color="#3f5fbf">name</font><font color="#000000"></font><font color="#3f5fbf">to</font><font color="#000000"></font><font color="#3f5fbf">refer</font><font color="#000000"></font><font color="#3f5fbf">to</font><font color="#000000"></font><font color="#3f5fbf">the</font><font color="#000000"></font><font color="#3f5fbf">port</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#3f5fbf">*/</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><b><font color="#7f0055">public</font></b><font color="#000000"></font><b><font color="#7f0055">void</font></b><font color="#000000">
addInput(String portName) {</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">InputPortFigure inputPort = </font><b><font color="#7f0055">new</font></b><font color="#000000">
InputPortFigure();</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">add(inputPort);</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><br /></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">PortConnectionAnchor anchor = </font><b><font color="#7f0055">new</font></b><font color="#000000">
PortConnectionAnchor(inputPort);</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">getTargetConnectionAnchors().add(anchor);</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"></font><font face="宋体"><font size="2"><font color="#0000c0">connectionAnchors</font><font color="#000000">.put(portName,
anchor);</font></font></font></p><p style="margin-bottom: 0cm;" align="left"><font color="#000000"><font face="宋体"><font size="2">}</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2"></font></font><font face="宋体"><font size="2">通过这几个方法可以看出它是在添加</font></font><font face="宋体"><font size="2">Input</font></font><font face="宋体"><font size="2">时候就创建好了一个和</font></font><font face="宋体"><font size="2">PortFigure
</font></font><font face="宋体"><font size="2">相关</font></font><font face="宋体"><font size="2">Anchor</font></font><font face="宋体"><font size="2">并把它保存起来。在要用的时候就把它取出来。这样就搞定了。</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font color="#000000"><font face="宋体"><font size="2"></font></font><font face="宋体"><font size="2">具体的可以参考这两个例子的代码。好了，打完收工。</font></font></font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">参考文档</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="宋体">IBM
</font><font face="宋体">红皮书</font></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="Times New Roman, serif"><a href="../../reloadcn/archive/2006/10/09/gef5.html" name="Connection，Property"><font face="宋体">1</font></a></font><a href="../../reloadcn/archive/2006/10/09/gef5.html" name="Connection，Property"><font face="宋体"><span lang="zh-CN">、</span>荒野困兽</font><font face="Times New Roman, serif"><font face="宋体">(</font></font></a><a href="../../reloadcn/archive/2006/10/09/gef5.html" name="Connection，Property"><font face="宋体">老脸归来</font><font face="Times New Roman, serif"><font face="宋体">)’blog</font></font></a></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><font face="Times New Roman, serif"><a href="http://www.ibm.com/developerworks/cn/opensource/os-ecl-gef/part1/index.html" name="GEF 进阶，第一部分: Anchor" target="_blank"><font face="宋体">2</font></a></font><a href="http://www.ibm.com/developerworks/cn/opensource/os-ecl-gef/part1/index.html" name="GEF 进阶，第一部分: Anchor" target="_blank"><font face="宋体"><span lang="zh-CN">、</span></font><font face="Times New Roman, serif"><font face="宋体">GEF
</font></font></a><a href="http://www.ibm.com/developerworks/cn/opensource/os-ecl-gef/part1/index.html" name="GEF 进阶，第一部分: Anchor" target="_blank"><font face="宋体">进阶，第一部分</font><font face="Times New Roman, serif"><font face="宋体">:
Anchor</font></font></a></p><br /><img src ="http://www.blogjava.net/JetGeng/aggbug/92407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2007-01-08 17:09 <a href="http://www.blogjava.net/JetGeng/archive/2007/01/08/92407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DragSourceEvent 中的坐标问题</title><link>http://www.blogjava.net/JetGeng/archive/2007/01/05/92104.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Fri, 05 Jan 2007 12:32:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2007/01/05/92104.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/92104.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2007/01/05/92104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/92104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/92104.html</trackback:ping><description><![CDATA[ 
<p style="MARGIN-BOTTOM: 0cm"><a name="_3196b2bfb616_HomePageDays_DaysList_ctl02_DayItem_DayList_ctl01_TitleUrl"></a><font face="宋体"><font color="#000000"><span lang="zh-CN">我想在我的</span></font></font><font face="Times New Roman, serif"><font face="宋体"><font color="#000000"><font size="2"><u>EditPartViewer</u></font></font></font></font><font face="宋体"><font color="#000000"><font size="2"><span lang="zh-CN"><span style="BACKGROUND: none transparent scroll repeat 0% 0%"><span style="TEXT-DECORATION: none">中获取一个图形元素把它拖放到一个</span></span></span></font></font></font><font face="Times New Roman, serif"><font face="宋体"><font color="#000000"><font size="2"><span style="BACKGROUND: none transparent scroll repeat 0% 0%"><span style="TEXT-DECORATION: none">swt</span></span></font></font></font></font><font face="宋体"><font color="#000000"><font size="2"><span lang="zh-CN"><span style="BACKGROUND: none transparent scroll repeat 0% 0%"><span style="TEXT-DECORATION: none">控件中。实现在</span></span></span></font></font></font><font face="Times New Roman, serif"><font face="宋体"><font color="#000000"><font size="2"><span style="BACKGROUND: none transparent scroll repeat 0% 0%"><span style="TEXT-DECORATION: none">&lt;&lt;</span></span></font></font></font></font><a href="/JetGeng/archive/2006/11/11/80604.html"><font face="宋体"><font color="#000000">图形编辑器中拖拽对象到</font></font><font face="Times New Roman, serif"><font face="宋体"><font color="#000000">swt</font></font></font></a><a href="/JetGeng/archive/2006/11/11/80604.html"><font face="宋体"><font color="#000000">控件</font></font><font face="Times New Roman, serif"><font face="宋体"><font color="#000000">&gt;&gt;</font></font></font></a><a href="/JetGeng/archive/2006/11/11/80604.html"><font face="宋体"><font color="#000000"><span lang="zh-CN"><span style="TEXT-DECORATION: none">一文有提到了。不过我在处理的时候，并不是按照他的那个方式来做的。我是根据当前点<span lang="zh-CN">（</span></span></span></font></font><font face="Times New Roman, serif"><font face="宋体"><font color="#000000"><span style="TEXT-DECORATION: none"><font size="2">DragSourceEvent</font></span></font></font></font></a><a href="/JetGeng/archive/2006/11/11/80604.html"><font face="宋体"><font color="#000000"><span lang="zh-CN"><span style="TEXT-DECORATION: none"><span lang="zh-CN">）</span>的位置来查找该点下的对象。看是否是我需要的对象，如果是就允许拖动。否则就不可以。</span></span></font></font></a></p><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm"><font color="#000000"><font face="宋体"><span style="TEXT-DECORATION: none">问题在这里出来：当没有出现滚动条的时候一切都很正常，当一出现滚动条就死活没有办法拖动了。最后才发现</span></font><font face="宋体"><span style="TEXT-DECORATION: none">DragSourceEvent</span></font><font face="宋体"><span style="TEXT-DECORATION: none">中的坐标是按照屏幕来得，而</span></font><font face="宋体"><font size="2"><u>EditPartViewer </u></font></font><font face="宋体"><font size="2"><span style="TEXT-DECORATION: none">中的坐标是按照他的那个</span></font></font><font face="宋体"><font size="2"><span style="TEXT-DECORATION: none">viewer</span></font></font><font face="宋体"><font size="2"><span style="TEXT-DECORATION: none">来得。这个地方需要转换一下。</span></font></font></font></p><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm; TEXT-DECORATION: none"><br /></p><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm; TEXT-DECORATION: none"><br /></p><p style="MARGIN-BOTTOM: 0cm"><span lang="zh-CN">这个转换的动作发现在</span><font face="Times New Roman, serif">jfire</font><span lang="zh-CN">（</span><font face="Times New Roman, serif">org.nightlabs.editor2d.util.EditorUtil <a href="https://svn.jfire.org/svn/main/trunk/org.nightlabs.editor2d/src/org/nightlabs/editor2d/util/EditorUtil.java">https://svn.jfire.org/svn/main/trunk/org.nightlabs.editor2d/src/org/nightlabs/editor2d/util/EditorUtil.java</a></font>）中有现成的。不多说了，拿来用吧。</p><img src ="http://www.blogjava.net/JetGeng/aggbug/92104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2007-01-05 20:32 <a href="http://www.blogjava.net/JetGeng/archive/2007/01/05/92104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在eclipse中通过编程的方式调用Ant脚本</title><link>http://www.blogjava.net/JetGeng/archive/2006/12/30/91026.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sat, 30 Dec 2006 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/12/30/91026.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/91026.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/12/30/91026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/91026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/91026.html</trackback:ping><description><![CDATA[ 
<p lang="zh-CN" style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.77cm" align="left">近来看了点<font face="Times New Roman, serif">Ant</font>的东西，想<font face="Times New Roman, serif">Ant</font>真的很强。在使用的过程中发现，开发项目的过程中使用到的<font face="Times New Roman, serif">Ant</font>其实并不多，只是有时候只是需要换一下其中的个别参数就可以重新用了。如果把这些重复的情况，写成不同的<font face="Times New Roman, serif">build.xml</font>的模板。定制成不同的任务，通过快捷键来调出，最后自动的执行<font face="Times New Roman, serif">ant</font>脚本。呵呵，想想就是一个很不错的主意。</p><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.77cm" align="left">说干就干了。定义一些<font face="Times New Roman, serif">Action</font>，和快捷键帮定就不多说了。生成<font face="Times New Roman, serif">build.xml</font>通过你自己喜欢的代码生成技术（个人喜欢用<font face="Times New Roman, serif">JET<sup>4</sup></font>）定义模板并生成代码。</p><p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.77cm" align="left"><span lang="zh-CN">下面在自动执行</span><font face="Times New Roman, serif">Ant</font><span lang="zh-CN">脚本的时候卡了一会壳。看到《</span>以编程方式调用 <font face="Times New Roman, serif">Apache Ant</font></p><p style="MARGIN-BOTTOM: 0cm; TEXT-INDENT: 0.77cm" align="left"><span lang="zh-CN">》</span><font face="Times New Roman, serif"><sup>2 </sup></font><span lang="zh-CN">觉得问题已经解决了。不过这种方式是在</span><font face="Times New Roman, serif">Eclipse </font><span lang="zh-CN">运行的</span><font face="Times New Roman, serif">VM</font><span lang="zh-CN">中执行，也就是说会把</span><font face="Times New Roman, serif">Eclipse </font><span lang="zh-CN">挂住。我希望达到的效果是和</span><font face="Times New Roman, serif">org.eclipse.ant.ui</font><span lang="zh-CN">插件达到的效果一样。最好是去调用他了。他是在</span><font face="Times New Roman, serif">eclipse</font><span lang="zh-CN">默认集成的，直接依赖于他不会有什么问题。看了他</span><font face="Times New Roman, serif">plugin.xml</font><span lang="zh-CN">发现了一个好东西“</span><font face="Times New Roman, serif">org.eclipse.debug.core.launchConfigurationTypes”</font><span lang="zh-CN">，所以我就想我创建一个</span><font face="Times New Roman, serif"><font face="Courier New, monospace"><font color="#000000"><font size="2">ILaunchConfigurationType </font></font></font></font><font color="#000000"><font face="Courier New, monospace"><span lang="zh-CN"><font size="3">用它来实</font></span></font><span lang="zh-CN"><font size="3"><font face="宋体">实例化一个</font></font></span><font face="Times New Roman, serif"><font face="Courier New, monospace"><font size="2">ILaunchConfigurationWorkingCopy</font><font size="3"></font></font></font></font><font color="#000000"><span lang="zh-CN"><font size="3"><font face="宋体">是不是就可以搞定了</font><font face="Courier New, monospace">。上网</font></font></span><font face="Times New Roman, serif"><font face="Courier New, monospace"><font size="3">google</font></font></font></font><font color="#000000"><span lang="zh-CN"><font size="3"><font face="宋体">了一下有个兄弟写完了这个部分的工作</font></font></span><font face="Times New Roman, serif"><font face="Courier New, monospace"><font size="3"><sup>1</sup></font></font></font></font><font color="#000000"><span lang="zh-CN"><font size="3"><font face="宋体">。把他的代码放到一个插件里面简单的跑了一下，果然可行。爽！<br /><br /> </font></font></span></font></p><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm" align="left">参考文档：</p><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm" align="left"><br /></p><ol><li><p style="MARGIN-BOTTOM: 0cm" align="left"><font face="Times New Roman, serif"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span style="TEXT-DECORATION: none"><font size="2"><font face="Times New Roman, serif">Eclipse 3.1 Update to “How to run ANT files programmatically”</font></font></span></span></a></font></p></li><li><p lang="zh-CN" style="MARGIN-BOTTOM: 0cm" align="left"><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span lang="zh-CN"><font size="2"><font face="SimSun"><span style="TEXT-DECORATION: none">以编程方式调用 </span></font></font></span></span></a></font><font face="Times New Roman, serif"><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span style="TEXT-DECORATION: none"><font size="2"><font face="Times New Roman, serif">Apache Ant</font></font></span></span></a></font></font><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span lang="zh-CN"><font size="2"><font face="SimSun"><span style="TEXT-DECORATION: none">（</span></font></font></span></span></a></font><font face="Times New Roman, serif"><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span style="TEXT-DECORATION: none"><font size="2"><font face="Times New Roman, serif"></font></font></span></span></a><a href="http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0502_gawor/0502_gawor.html">http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0502_gawor/0502_gawor.html</a><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"></a></font></font><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span lang="zh-CN"><font size="2"><font face="SimSun"><span style="TEXT-DECORATION: none">）</span></font></font></span></span></a></font></p></li><li><p lang="zh-CN" align="left"><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span lang="zh-CN"><font size="2"><font face="SimSun"><span style="TEXT-DECORATION: none">代码范例</span></font></font></span></span></a></font><font face="Times New Roman, serif"><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span style="TEXT-DECORATION: none"><font size="2"><font face="Times New Roman, serif">http://dev.eclipse.org/mhonarc/lists/platform-ant-dev/msg01053.html</font></font></span></span></a></font></font></p></li><li><p lang="zh-CN" align="left"><font face="Times New Roman, serif"><font size="2"><a href="http://orangevolt.com/wordpress/archives/2005/08/11/eclipse-31-update-to-how-to-run-ant-files-programmatically/"><span><span style="TEXT-DECORATION: none"><font size="2"><font face="Times New Roman, serif">http://www.eclipse.org/articles/Article-JET/jet_tutorial1.html</font></font></span></span></a></font></font></p></li></ol><img src ="http://www.blogjava.net/JetGeng/aggbug/91026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-12-30 16:13 <a href="http://www.blogjava.net/JetGeng/archive/2006/12/30/91026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在eclipse中获得当前活动的workbenchwindow</title><link>http://www.blogjava.net/JetGeng/archive/2006/12/04/85363.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Mon, 04 Dec 2006 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/12/04/85363.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/85363.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/12/04/85363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/85363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/85363.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" lang="zh-CN">大家肯定都知道在<font face="Times New Roman, serif">Eclipse</font>中获得当前活动的<font face="Times New Roman, serif">workbenchWindow</font>可以采用如下的方式来完成。</p>
		<p style="margin-bottom: 0cm;">
				<font face="Times New Roman, serif">PlatformUI.getWorkbench().getActiveWorkbenchWindow()</font>
		</p>
		<p style="margin-bottom: 0cm;">或</p>
		<p style="margin-bottom: 0cm;">
				<span lang="zh-CN">（</span>在<font face="Times New Roman, serif">Plugin</font>类中）
<font face="Times New Roman, serif">getDefault().getWorkbench().getActiveWorkbenchWindow()
</font><span lang="zh-CN">。一般情况下这两个方式<span lang="zh-CN">都</span>能够很好的工作。但是突然有一天发现他不能工作了。郁闷我都不行了。察看了一下变量<span lang="zh-CN">（<span lang="zh-CN">如下图</span>）</span>。<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/display.jpg" alt="display.jpg" border="0" height="291" width="752" /><br /></span></p>
		<p style="margin-bottom: 0cm;">
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">这个<font face="Times New Roman, serif">activatedWindow</font>明明有啊，怎么就取不到呢。</p>
		<p style="margin-bottom: 0cm;">
				<span lang="zh-CN">打开代码一看，看到</span>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">org.eclipse.ui.internal.Workbench</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="Courier New, monospace">
								<font color="#000000">
										<span lang="zh-CN">类中的</span>
								</font>
						</font>
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">getActiveWorkbenchWindow</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="Courier New, monospace">
								<font color="#000000">
										<span lang="zh-CN">方法。</span>
								</font>
						</font>
				</font>
		</p>
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> IWorkbenchWindow getActiveWorkbenchWindow() {<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> Return null if called from a non-UI thread.<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> This is not spec'ed behaviour and is misleading, however this is how<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> it<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> worked in 2.1 and we cannot change it now.<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> For more details, see [Bug 57384] [RCP] Main window not active on<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> startup</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (Display.getCurrent() </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">;<br />        }<br /><br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> Look at the current shell and up its parent<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> hierarchy for a workbench window.</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        Control shell </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> display.getActiveShell();<br />        </span>
				<span style="color: rgb(0, 0, 255);">while</span>
				<span style="color: rgb(0, 0, 0);"> (shell </span>
				<span style="color: rgb(0, 0, 0);">!=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            Object data </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> shell.getData();<br />            </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (data </span>
				<span style="color: rgb(0, 0, 255);">instanceof</span>
				<span style="color: rgb(0, 0, 0);"> IWorkbenchWindow) {<br />                </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> (IWorkbenchWindow) data;<br />            }<br />            shell </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> shell.getParent();<br />        }<br /><br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> Look for the window that was last known being<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> the active one</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        WorkbenchWindow win </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> getActivatedWindow();<br />        </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (win </span>
				<span style="color: rgb(0, 0, 0);">!=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> win;<br />        }<br /><br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> Look at all the shells and pick the first one<br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> that is a workbench window.</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        Shell shells[] </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> display.getShells();<br />        </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> (</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">; i </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> shells.length; i</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            Object data </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> shells[i].getData();<br />            </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (data </span>
				<span style="color: rgb(0, 0, 255);">instanceof</span>
				<span style="color: rgb(0, 0, 0);"> IWorkbenchWindow) {<br />                </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> (IWorkbenchWindow) data;<br />            }<br />        }<br /><br />        </span>
				<span style="color: rgb(0, 128, 0);">//</span>
				<span style="color: rgb(0, 128, 0);"> Can't find anything!</span>
				<span style="color: rgb(0, 128, 0);">
						<br />
				</span>
				<span style="color: rgb(0, 0, 0);">        </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">;<br />    }<br /><br /></span>
		</div>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">程序跑到</font>
						</font>
						<font face="宋体">
								<font size="2">Display.<i>getCurrent</i>()</font>
						</font>
						<font face="宋体">
								<font size="2">这一绝句就给我掉链子（返回了一个</font>
						</font>
						<font face="宋体">
								<font size="2">null</font>
						</font>
						<font face="宋体">
								<font size="2">）。就是他，就是他了！到网上</font>
						</font>
						<font face="宋体">
								<font size="2">google</font>
						</font>
						<font face="宋体">
								<font size="2">了一下。看看在什么状况下他会返回一个</font>
						</font>
						<font face="宋体">
								<font size="2">null.</font>
						</font>
						<font face="宋体">
								<font size="2">在</font>
						</font>
						<font face="宋体">
								<font size="2">http://wiki.eclipse.org/index.php/FAQ_How_do_I_get_a_Display_instance%3F</font>
						</font>
						<font face="宋体">
								<font size="2">找到了。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">他说，</font>
						</font>
						<font face="宋体">
								<font size="2">Display
</font>
						</font>
						<font face="宋体">
								<font size="2">永远和创建他的线程联系在一起，并且一个线程拥有一个活动的</font>
						</font>
						<font face="宋体">
								<font size="2">Display</font>
						</font>
						<font face="宋体">
								<font size="2">。在创立</font>
						</font>
						<font face="宋体">
								<font size="2">Display</font>
						</font>
						<font face="宋体">
								<font size="2">的线程中可可以通过</font>
						</font>
						<font face="宋体">
								<font size="2">Display.<i>getCurrent</i>()</font>
						</font>
						<font face="宋体">
								<font size="2">获得当前活动的</font>
						</font>
						<font face="宋体">
								<font size="2">Display</font>
						</font>
						<font face="宋体">
								<font size="2">。如果出了这个线程就看不到这个</font>
						</font>
						<font face="宋体">
								<font size="2">Display</font>
						</font>
						<font face="宋体">
								<font size="2">了。如果有的线程不拥有</font>
						</font>
						<font face="宋体">
								<font size="2">Display</font>
						</font>
						<font face="宋体">
								<font size="2">，那它的</font>
						</font>
						<font face="宋体">
								<font size="2">Display.<i>getCurrent</i>()</font>
						</font>
						<font face="宋体">
								<font size="2">就只能得到</font>
						</font>
						<font face="宋体">
								<font size="2">null</font>
						</font>
						<font face="宋体">
								<font size="2">了。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">回头看了一下我的代码，我是在新建的线程中启动了调用了这个方法。难怪他不给面子呢！</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">参考文献：</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">http://wiki.eclipse.org/index.php/FAQ_How_do_I_get_a_Display_instance%3F</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/widgets/Display.html<br /></font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<span lang="zh-CN">
				</span>
		</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/85363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-12-04 15:01 <a href="http://www.blogjava.net/JetGeng/archive/2006/12/04/85363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初次接触Ocl</title><link>http://www.blogjava.net/JetGeng/archive/2006/11/11/80607.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sat, 11 Nov 2006 12:30:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/11/11/80607.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/80607.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/11/11/80607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/80607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/80607.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">以前不知道有<font face="Times New Roman, serif">Ocl</font>这个东西，前几天有幸看到。深深被他吸引了。抛开其他的不说，就他的查询功能的就让人激动不已了<font face="Times New Roman, serif">:)</font>。</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">现在只是看了</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font face="Times New Roman, serif">
						<a href="http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.gmf.doc/examples-guide/msl/oclQueryExample.html">oclQueryExmaple</a>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<font face="Times New Roman, serif">
						<a href="http://help.eclipse.org/help31/index.jsp?topic=/org.eclipse.gmf.doc/tutorials/msl/oclQueryTutorial.html">Querying
EMF Models with OCL</a>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left" lang="zh-CN">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">在项目中简单的使用了一下他作为查询的工具。感觉他真的很不错，在下一段时间将会重点去了解他。</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/80607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-11-11 20:30 <a href="http://www.blogjava.net/JetGeng/archive/2006/11/11/80607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图形编辑器中拖拽对象到swt控件</title><link>http://www.blogjava.net/JetGeng/archive/2006/11/11/80604.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sat, 11 Nov 2006 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/11/11/80604.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/80604.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/11/11/80604.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/80604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/80604.html</trackback:ping><description><![CDATA[    <span lang="zh-CN">前面一段时间有一个需求就是从</span><font face="Times New Roman, serif">swt</font><span lang="zh-CN">控件中拖拽对象到图形编辑器中（就是</span><font face="Times New Roman, serif"><b><span lang="zh-CN"><font size="3"><font face="System, sans-serif">class
org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor </font></font></span></b></font><b><font size="3"><font face="System, sans-serif">的儿子们</font></font></b><span lang="zh-CN">）编辑器。</span><p style="margin-bottom: 0cm;"><span lang="zh-CN">后来就<span lang="zh-CN">想假如</span>我需要从图形编辑器中拖拽对象到</span><font face="Times New Roman, serif">swt</font><span lang="zh-CN">控件中又该怎么做。<br />经过一段时间的探索，终于搞定了。</span></p><p style="margin-bottom: 0cm;" lang="zh-CN">记下如下过程，希望对需要的朋友有点帮助。</p><p style="margin-bottom: 0cm;" lang="zh-CN"></p><p style="margin-bottom: 0cm;"><span lang="zh-CN">首先<span lang="zh-CN">有了</span>《从</span><font face="Times New Roman, serif"><font face="Times New Roman, serif">SWT</font></font><span lang="zh-CN">控件中托拽对象到</span><font face="Times New Roman, serif"><font face="Times New Roman, serif">GEF</font></font><span lang="zh-CN">编辑器中》文中对</span><font face="Times New Roman, serif"><font size="3"><font face="宋体"><font color="#000000"><b>addDropTargetListener</b></font></font></font></font><font color="#000000"><span lang="zh-CN">方法使用的经历，很快就确定我需要对</span><font face="Times New Roman, serif"><font size="3"><font face="宋体">GraphicalViewer</font></font></font></font><font color="#000000"><span lang="zh-CN">添加一个</span><font face="Times New Roman, serif"><font size="2"><font face="Courier New, monospace">DragSourceListener</font></font></font></font><font color="#000000"><font size="2"><font face="Courier New, monospace"><span lang="zh-CN">。</span></font><span lang="zh-CN"><font face="宋体"><br /></font></span></font></font></p><p style="margin-bottom: 0cm;"><font color="#000000"><font size="2"><span lang="zh-CN"><font face="宋体">想着到这个地方我应该可以很快收工了。但是添加完了以后发现<span lang="zh-CN">原来的拖动功能都没有了</span>，这个怎么回事。谁在后面搞鬼。</font></span></font></font></p><p style="margin-bottom: 0cm;" lang="zh-CN">经过一段时间的狂搜滥索终于找到了问题的关键。因为<font face="Times New Roman, serif">GEF</font>不允许同时有两个活动
<font face="Times New Roman, serif">DragSource
</font>。</p><p style="margin-bottom: 0cm;" lang="zh-CN">它本身已经拥有一个<font face="Times New Roman, serif">DragSource</font>了（编辑器内部的托拽），我们这时候添加一个就会存在多</p><p style="margin-bottom: 0cm;" lang="zh-CN"><font face="Times New Roman, serif">DragSource</font>了。当我添加一个新的<font face="Times New Roman, serif">DragSource</font>时候我们新家的<font face="Times New Roman, serif">DragSource</font>就会被认为是默认的<font face="Times New Roman, serif">DragSource</font>。</p><p style="margin-bottom: 0cm;" lang="zh-CN">他以前的<font face="Times New Roman, serif">DragSource</font>就失效了。这不是我像看到的。</p><p style="margin-bottom: 0cm;" lang="zh-CN">怎么处理。看到了一个牛人的解决方案。</p><p style="margin-bottom: 0cm;" lang="zh-CN"><br /></p><pre lang="zh-CN">What I made to fix the problem was to only allow my DragSource to act under certain <br />conditions (in my application this happens when you click and drag the mouse AND<br /> the SHIFT key is pressed). So when the SHIFT key is not pressed my DragSource does <br />nothing and the editor's internal drag and drop works fine。<br /><br />public void dragStart(DragSourceEvent event) <br />{<br />  ...<br /><br />  if (!condition.isValid())<br />     event.doit = false;<br /><br />  ...<br />}<br /><br /><font face="宋体"><span lang="zh-CN">我尝试了一下这种状况，一下就搞定了。</span></font><br /><span lang="zh-CN">在我的项目中，由于还有一些数据需要转化。<font size="2"><font face="宋体"><font color="#000000">呵呵，感觉不错。<br /><br />参考文档：<br />http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg15754.html<br /></font></font></font></span></pre><img src ="http://www.blogjava.net/JetGeng/aggbug/80604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-11-11 19:56 <a href="http://www.blogjava.net/JetGeng/archive/2006/11/11/80604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从SWT控件中托拽对象到GEF编辑器中</title><link>http://www.blogjava.net/JetGeng/archive/2006/09/12/69195.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Tue, 12 Sep 2006 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/09/12/69195.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/69195.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/09/12/69195.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/69195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/69195.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" align="center">从<font face="Times New Roman, serif">SWT</font>控件中托拽对象到<font face="Times New Roman, serif">GEF</font>编辑器中</p>
		<p style="margin-bottom: 0cm;" align="left">一般情况下<font face="Times New Roman, serif">GEF</font>程序都是采用如下的界面：</p>
		<br />
		<p style="margin-bottom: 0cm;" align="left">
				<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/gef.jpg" alt="gef.jpg" border="0" height="354" width="462" />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
		</p>
		<p style="margin-bottom: 0cm;" align="left">新建对象的操作时通过拖拽<font face="Times New Roman, serif">Palette</font>中元素到编辑而获得。但是有时候可能需要从<font face="Times New Roman, serif">SWT</font>，操作系统拖一些元素到<font face="Times New Roman, serif">GEF</font>编辑器中来。</p>
		<p style="margin-bottom: 0cm;" align="left">下面我就把创建这样的拖拽过程大概的描述一下：</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">1</font>、定义拖拽源（<font face="Times New Roman, serif"><font size="2"><font face="Courier New, monospace"><font color="#000000">DragSource</font></font></font></font>）。</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">2</font>、定义拖拽目标的监听（<font face="Times New Roman, serif"><font size="2"><font face="Courier New">DropTarget</font></font></font>）。</p>
		<p style="margin-bottom: 0cm;" align="left">到这里对于一般的拖拽其实是可以完工了。</p>
		<p style="margin-bottom: 0cm;" align="left">
				<a name="Header1_HeaderTitle">
				</a>
				<a name="viewpost1_TitleUrl">
				</a>
这个部分可以参考<font face="Times New Roman, serif"><a href="../../weidagang2046/">weidagang2046</a></font><a href="../../weidagang2046/">的专栏的《</a><font face="Times New Roman, serif"><a href="../../weidagang2046/articles/67707.html">DND</a></font><a href="../../weidagang2046/articles/67707.html">入门学习</a><a href="../../weidagang2046/">》</a></p>
		<p style="margin-bottom: 0cm;" align="left">但是要能让<font face="Times New Roman, serif"><font color="#000000"><font size="3"><font face="宋体">GraphicalViewer</font></font></font></font><font color="#000000"><font size="3"><font face="宋体">这个对象扮演起</font></font><font face="Times New Roman, serif"><font size="3"><font face="宋体">DropTarget</font></font></font></font><font color="#000000"><font size="3"><font face="宋体">我们还需要做点其他的工作。</font></font><font face="Times New Roman, serif"><font size="3"><font face="宋体">GraphicalViewer</font></font></font></font><font color="#000000"><font size="3"><font face="宋体">这个类本身提供了一个</font></font><font face="Times New Roman, serif"><font size="2"><font face="Courier New, monospace">addDropTargetListener</font></font><font size="3"><font face="宋体"></font></font></font></font><font color="#000000"><font size="3"><font face="宋体">方法。看到这个方法是不是一阵狂喜啊。如果有也是应该的，因为这个方法就是我们解决前面提出问题的关键。</font></font></font></p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="3">好了看看他的声明吧！</font>
						</font>
				</font>
		</p>
		<pre style="text-align: left;">
				<font color="#000000">
						<font face="宋体">
								<font size="3">public void <b>addDropTargetListener</b>(<a href="http://help.eclipse.org/help31/topic/org.eclipse.gef.doc.isv/reference/api/org/eclipse/gef/dnd/TransferDropTargetListener.html">TransferDropTargetListener</a> listener)</font>
						</font>
				</font>
		</pre>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="3">他这个参数居然不是</font>
						</font>
						<font face="宋体">
								<font size="3">DropTargetListener</font>
						</font>
						<font face="宋体">
								<font size="3">。这个</font>
						</font>
						<font face="宋体">
								<font size="3">TransferDropTargetListener</font>
						</font>
						<font face="宋体">
								<font size="3">是一个什么玩意啊！</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="3">在</font>
						</font>
						<font face="宋体">
								<font size="3">help</font>
						</font>
						<font face="宋体">
								<font size="3">中查到：</font>
						</font>
				</font>
		</p>
		<dl>
				<dt style="text-align: left;">
						<font color="#000000">
								<font face="宋体">
										<font size="3">public
	interface <b>TransferDropTargetListener</b></font>
								</font>
						</font>
				</dt>
				<dt style="margin-bottom: 0.5cm;">
						<font face="Times New Roman, serif">extends
	<a href="http://help.eclipse.org/help31/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/jface/util/TransferDropTargetListener.html">TransferDropTargetListener</a></font>
				</dt>
		</dl>
		<p>
				<font face="Times New Roman, serif">A <code>DropTragetListener</code>
that handles one type of SWT <code><a href="http://help.eclipse.org/help31/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/dnd/Transfer.html">Transfer</a></code>.
The purpose of a TransferDropTargetListener is to: </font>
		</p>
		<ul>
				<li>
						<p style="margin-bottom: 0cm;">
								<font face="Times New Roman, serif">Determine
	enablement for a Drop operation. Enablement is often a function drop
	location, and/or criteria. </font>
						</p>
				</li>
				<li>
						<p style="margin-bottom: 0cm;">
								<font face="Times New Roman, serif">When
	enabled, optionally showing feedback on the DropTarget. </font>
						</p>
				</li>
				<li>
						<p>
								<font face="Times New Roman, serif">Performing the actualy
	Drop </font>
						</p>
				</li>
		</ul>
		<p>
				<font face="Times New Roman, serif">
						<code>
								<a href="http://help.eclipse.org/help31/topic/org.eclipse.gef.doc.isv/reference/api/org/eclipse/gef/dnd/DelegatingDropAdapter.html">DelegatingDropAdapter</a>
						</code>
allows these functions to be implemented separately for unrelated
types of Drags. DelegatingDropAdapter then combines the function of
each TransferDropTargetListener, while allowing them to be
implemented as if they were the only DragSourceListener. </font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="3">偷下懒，就不翻译了。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="3">创建如下类来实现这个接口：</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<b>
												<font color="#7f0055">public</font>
										</b>
										<b>
												<font color="#7f0055">class</font>
										</b>
TreeNodeTransferDropTargetListener <b><font color="#7f0055">extends</font></b></font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">		AbstractTransferDropTargetListener
{</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<b>
												<font color="#7f0055">public</font>
										</b>
TreeNodeTransferDropTargetListener(EditPartViewer editPartViewer) {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#000000">
												<font face="宋体">//</font>
										</font>
								</b>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#000000">
												<font face="宋体">改类默认是处理
</font>
										</font>
								</b>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#000000">
												<font face="宋体">TextTransfer
</font>
										</font>
								</b>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#000000">
												<font face="宋体">类型的拖拽事件</font>
										</font>
								</b>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#000000">
										</font>
										<font color="#7f0055">super</font>
								</b>
								<font color="#000000">(editPartViewer,TextTransfer.<i>getInstance</i>());</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<font color="#3f7f5f">//
</font>
								<b>
										<font color="#7f9fbf">TODO</font>
								</b>
								<font color="#3f7f5f">
Auto-generated constructor stub</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">	}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<font color="#646464">@Override</font>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">protected</font>
								</b>
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">void</font>
								</b>
								<font color="#000000">
updateTargetRequest() {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">	}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font size="2">
						<font face="宋体">
								<font color="#000000">我们这个拖拽想是让他执行一个</font>
						</font>
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">create</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="宋体">
								<font color="#000000">命令。所以下面就是要重载他的</font>
						</font>
				</font>
				<font face="Times New Roman, serif">createTargetRequest()
</font>
				<font size="2">
						<font face="宋体">
								<font color="#000000">用来处理</font>
						</font>
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">create</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="宋体">
								<font color="#000000">对象的请求（</font>
						</font>
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">CreateRequestion</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="宋体">
								<font color="#000000">）。</font>
						</font>
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">CreateRequetion</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="宋体">
								<font color="#000000">需要使用到一个类，帮助我们创建对象的工厂类。</font>
						</font>
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#000000">GEF</font>
								</font>
						</font>
				</font>
				<font size="2">
						<font face="宋体">
								<font color="#000000">给了我们这样的一个接口</font>
						</font>
				</font>
				<font face="Times New Roman, serif">CreationFactory
</font>。下面我们取实现他就好了。</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#7f0055">package</font>
								</b>
								<font color="#000000">
org.eclipse.gef.examples.shapes.rcp.views;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#7f0055">import</font>
								</b>
								<font color="#000000">
org.eclipse.gef.examples.shapes.model.EllipticalShape;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#7f0055">import</font>
								</b>
								<font color="#000000">
org.eclipse.gef.requests.CreationFactory;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<b>
										<font color="#7f0055">public</font>
								</b>
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">class</font>
								</b>
								<font color="#000000">
TypeCreationFactory </font>
								<b>
										<font color="#7f0055">implements</font>
								</b>
								<font color="#000000">
 CreationFactory {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">public</font>
								</b>
								<font color="#000000">
Object getNewObject() {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<font color="#3f7f5f">//
</font>
								<b>
										<font color="#7f9fbf">TODO</font>
								</b>
								<font color="#3f7f5f">
Auto-generated method stub</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">		EllipticalShape
label = </font>
								<b>
										<font color="#7f0055">new</font>
								</b>
								<font color="#000000">
EllipticalShape();</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">return</font>
								</b>
								<font color="#000000">
label;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">	}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">public</font>
								</b>
								<font color="#000000">
Object getObjectType() {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">return</font>
								</b>
								<font color="#000000">
EllipticalShape.</font>
								<b>
										<font color="#7f0055">class</font>
								</b>
								<font color="#000000">;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">	}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="2">注意：这里的</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">getNewObject</font>
						</font>
						<font face="宋体">
								<font size="2">是返回要创建类的一个对象实例。</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">GetObjectType</font>
						</font>
						<font face="宋体">
								<font size="2">需要返回需要创建对象的类。这个可不要搞反了。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="2">这样我们就可以把我们的
</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">TreeNodeTransferDropTargetListener
</font>
						</font>
						<font face="宋体">
								<font size="2">
										<font face="Courier New, monospace">类中的</font>
								</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">createTargetRequest</font>
						</font>
						<font face="宋体">
								<font size="2">
										<font face="Courier New, monospace">方法加上了。</font>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<b>
												<font color="#7f0055">private</font>
										</b>
TypeCreationFactory <font color="#0000c0">factory</font> = <b><font color="#7f0055">new</font></b>
TypeCreationFactory();</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<b>
												<font color="#7f0055">protected</font>
										</b>
Request createTargetRequest() {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">		CreateRequest
request = </font>
								<b>
										<font color="#7f0055">new</font>
								</b>
								<font color="#000000">
CreateRequest();</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">		request.setFactory(</font>
								<font color="#0000c0">factory</font>
								<font color="#000000">);</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">return</font>
								</b>
								<font color="#000000">
request;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="2">好了这个时候不要客气了，加上</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<b>
												<font color="#7f0055">protected</font>
										</b>
										<b>
												<font color="#7f0055">void</font>
										</b> handleDragOver() {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">		getCurrentEvent().</font>
								<font color="#0000c0">detail</font>
								<font color="#000000">
= DND.</font>
								<i>
										<font color="#0000c0">DROP_MOVE</font>
								</i>
								<font color="#000000">|DND.</font>
								<i>
										<font color="#0000c0">DROP_COPY</font>
								</i>
								<font color="#000000">;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">super</font>
								</b>
								<font color="#000000">.handleDragOver();</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">	}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<font color="#646464">@Override</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">protected</font>
								</b>
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">void</font>
								</b>
								<font color="#000000">
handleDrop() {</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<font color="#3f7f5f">//String
s = (String)getCurrentEvent().data;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<font color="#3f7f5f">//factory.setText(s);</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#000000">
								</font>
								<b>
										<font color="#7f0055">super</font>
								</b>
								<font color="#000000">.handleDrop();</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">	}</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="2">这样的方法吧。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="2">这样这个功能就完成了。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="宋体">
								<font size="2">参考文献：</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<a href="../../weidagang2046/archive/2006/09/05/67707.html">http://www.blogjava.net/weidagang2046/archive/2006/09/05/67707.html</a>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
										<br />
								</font>
						</font>
				</font>
		</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/69195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-09-12 17:16 <a href="http://www.blogjava.net/JetGeng/archive/2006/09/12/69195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mylar 简介--开源工作平台续</title><link>http://www.blogjava.net/JetGeng/archive/2006/07/11/57606.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Tue, 11 Jul 2006 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/07/11/57606.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/57606.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/07/11/57606.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/57606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/57606.html</trackback:ping><description><![CDATA[
		<div align="center">
		</div>
		<h1 style="margin-left: 21.25pt; text-indent: -21.25pt;" align="center">Mylar 简介--开源工作平台续<br /><span style="font-size: 12pt;" lang="EN-US"></span></h1>
		<h1 style="margin-left: 21.25pt; text-indent: -21.25pt;">
				<span style="font-size: 12pt;" lang="EN-US">1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     </span></span>
				<!--[endif]-->
				<span style="font-size: 12pt;">引子<span lang="EN-US"><o:p></o:p></span></span>
		</h1>
		<h1>
				<span style="font-size: 12pt;" lang="EN-US">
						<span style="">   </span>
				</span>
				<span style="font-size: 10.5pt; font-weight: normal;">很久很久以前有一个木匠，不但粗心而且还健忘。虽然在每天工作开始前，会考虑以下大概需要做的工作。但是在实施的过程中经常会出现这样的状况。看有一天他需要下一块<span lang="EN-US">1.2m
的料。这个木匠就甩着膀子过来了。在动手前肯定是要量一下得，把手往口袋里一摸。卷尺是摸到，摸到了昨天晚上吃花生时留下得壳（还挺讲究公德，没有到处乱
扔。）。放哪儿呢，放哪儿呢……。经过了半个小时，终于在一个角落找到了卷尺。那个兴奋啊。兴冲冲的跑到木料前，愣了一下骂了一句“tmd锯子又不知道跑
那去了！”。继续去找锯子去了……。<o:p></o:p></span></span>
		</h1>
		<b>
				<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">
						<span style="">       </span>
				</span>
				<span style="font-size: 10.5pt; font-family: 宋体;">其实在我们的软件开发中也会类似的情景。我就不再啰嗦了。<br /></span>
		</b>
		<h1 style="margin-left: 21.25pt; text-indent: -21.25pt;">
				<!--[if !supportLists]-->
				<span style="font-size: 10.5pt;" lang="EN-US">1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
</span></span>
				<!--[endif]-->
				<span style="font-size: 12pt;">解决方案</span>
				<span style="font-size: 10.5pt;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</h1>
		<h1 style="margin-left: 21pt;">
				<span style="font-size: 12pt; font-weight: normal;">我要说的这个解决方案就是<span lang="EN-US">Eclipse + Mylar。Eclipse就不用多说了。但是Mylar却是不得不说。<o:p></o:p></span></span>
		</h1>
		<h1 style="margin-left: 21pt;">
				<span style="font-size: 12pt; font-weight: normal;" lang="EN-US">Mylar
最大的亮点就是让你只关注于你当前的工作（Active
Task）。在整个工作区中只是显示和你工作相关的内容。这样在Mylar中就有了一个核心的概念任务（Task）。这个任务我们完全可以对应到工作中的
一个任务，如你的头给你分配得一个任务、测试组的同仁提交的一个需要你修改得bug等等。<o:p></o:p></span>
		</h1>
		<h1 style="margin-left: 21pt;">
				<span style="font-size: 12pt; font-weight: normal;">我们每天的工作应该由这些任务组成。<span lang="EN-US"><o:p></o:p></span></span>
		</h1>
		<span style="font-size: 12pt; font-family: 宋体;">在</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Mylar</span>
		<span style="font-size: 12pt; font-family: 宋体;">中首先提供了一个对于任务管理的功能。图</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;">
				<span lang="EN-US">– 1</span>
		</span>
		<span style="font-size: 12pt; font-family: 宋体;">显示了一个</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Mylar</span>
		<span style="font-size: 12pt; font-family: 宋体;">的任务管理页面。关于如何创建使用</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Mylar</span>
		<span style="font-size: 12pt; font-family: 宋体;">中的任务可以参考官方提供的一个</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">flash demo</span>
		<span style="font-size: 12pt; font-family: 宋体;">我就不啰嗦了</span>
		<span style="font-size: 12pt; font-family: 宋体;">（</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">http://www.eclipse.org/mylar/doc/demo/mylar-demo-04.html</span>
		<span style="font-size: 12pt; font-family: 宋体;">）</span>
		<span style="font-size: 12pt; font-family: 宋体;">。<br /></span>
		<span style="font-size: 12pt; font-family: 宋体;">
				<img src="../../images/blogjava_net/jetgeng/Eclipse/mylar/Snap1.jpg" alt="Snap1.jpg" border="0" height="304" width="810" />
		</span>
		<br />
		<span style="font-size: 12pt; font-family: 宋体;">有了任务后，就可以把你的工作关注到特定的任务上了。这个部分在上面的提到的那个官方的</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Flash</span>
		<span style="font-size: 12pt; font-family: 宋体;">中也有描述。另外还有一个老外的</span>
		<span style="font-size: 12pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">blog</span>
		<span style="font-size: 12pt; font-family: 宋体;">也作了点说明。<br /></span>
		<b>
				<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">
						<a href="http://weblogs.java.net/blog/kirillcool/archive/2005/11/mylar_a_very_us.html">
								<span style="font-weight: normal;">http://weblogs.java.net/blog/kirillcool/archive/2005/11/mylar_a_very_us.html</span>
						</a>
				</span>
				<span style="font-size: 10.5pt; font-family: 宋体;">。<br /></span>
		</b>
		<span style="font-size: 10.5pt; font-family: 宋体;">说到任务，</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Mylar</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">提供了两种任务。一个是本地任务还有一个就是知识库任务（这个我翻译的不好原文是</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">repository task</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">）。本地任务很好理解就是任务的数据是以文件的形式保存在本地的。一般情况下只有本人可以使用。知识库任务是从</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">BugTrace</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">系统（目前支持</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Bugzilla</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">、</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">JIRA</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">）里面获取</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Task.</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">这样就可以在一个团队中使用了。关于这个功能的使用可以参考</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">
				<a href="http://eclipse.org/mylar/doc/demo/mylar-demo-04-reports.html">http://eclipse.org/mylar/doc/demo/mylar-demo-04-reports.html</a>.</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">从个人角度来说，我是最喜欢这个块的功能。想一想啊，</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">QA</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">组的人测出</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">bug</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">纪录到</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">bug Trace</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">系统中。开发人员可以在他自己的开发环境中。继续想，项目管理人员把</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Project </span>
		<span style="font-size: 10.5pt; font-family: 宋体;">管理软件中的</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">task</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">以</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">bug</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">的形式存放于</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">bugtrace</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">系统中（其实这个时候的</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">BugTrace</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">系统不光管理的是</span>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Bug</span>
		<span style="font-size: 10.5pt; font-family: 宋体;">了，可以把它认为识一个简单的项目管理）。<br /></span>
		<span style="font-size: 10.5pt; font-family: 宋体;">关于这个项目的整体全局的介绍可以参考</span>
		<b>
				<span style="font-size: 10.5pt; font-family: 宋体;">：</span>
		</b>
		<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">
				<a href="http://www.eclipsezone.com/articles/mylar/?source=archives">http://www.eclipsezone.com/articles/mylar/?source=archives</a>
				<br />
				<br />
我想她肯定会有美好的未来的。<br /></span>
		<br />
<img src ="http://www.blogjava.net/JetGeng/aggbug/57606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-07-11 10:12 <a href="http://www.blogjava.net/JetGeng/archive/2006/07/11/57606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Connection以及Router</title><link>http://www.blogjava.net/JetGeng/archive/2006/05/22/47548.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Mon, 22 May 2006 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/05/22/47548.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/47548.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/05/22/47548.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/47548.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/47548.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" lang="zh-CN">今天有幸碰到关于<font face="Times New Roman, serif">Connection</font>以及<font face="Times New Roman, serif">Router</font>使用的问题。觉得有点意思就把它记了下来。以背后查。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">看到一个例子中看到图
<font face="Times New Roman, serif">-- 1</font>所示的功能。</p>
		<br />
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/%E5%9B%BE-1.JPG" alt="图-1.JPG" border="0" height="226" width="498" />
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">其中图<font face="Times New Roman, serif">-1</font>中的连线是自适应的会保持该线段是最短的（其实他是使用的<font face="Times New Roman, serif">ShortestPathConnectionRouter</font>，这个时候我还不知道<font face="Times New Roman, serif">,</font>我是一个新手大家见笑了）。经过一番调查以后发现原来是在<font face="Times New Roman, serif">EditPart</font>中的<font face="Times New Roman, serif">refreshVisuals</font>方法中有如下代码。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">代码<font face="Times New Roman, serif">--1</font></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font face="Times New Roman, serif">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);"> (spRouter </span>
								<span style="color: rgb(0, 0, 0);">==</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">null</span>
								<span style="color: rgb(0, 0, 0);">) {<br />            ConnectionLayer cLayer </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> (ConnectionLayer) getLayer(LayerConstants.CONNECTION_LAYER);<br />            FanRouter router </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">new</span>
								<span style="color: rgb(0, 0, 0);"> FanRouter();<br />            router.setSeparation(</span>
								<span style="color: rgb(0, 0, 0);">30</span>
								<span style="color: rgb(0, 0, 0);">);<br />            spRouter </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">new</span>
								<span style="color: rgb(0, 0, 0);"> ShortestPathConnectionRouter(getFigure());<br />            router.setNextRouter(spRouter);<br />            cLayer.setConnectionRouter(router);<br />        }</span>
						</div>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">当时就猜啊，他肯定是在给一个特定的<font face="Times New Roman, serif">Layer</font>加上一个什么玩意。然后就通过这个玩意来完成对于路径的计算（其实这些东西完全是从代码的字面意思而得到的）。我这些东西加到我的代码中了。但是我运行的效果还是没有起作用。他依旧是以前的那幅得行。我抓，抓也没有用。就是达不到我要的效果。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">抱着试一下的想法我打开了我的<font face="Times New Roman, serif">ConnectionEditPart(</font>就是连线的那个<font face="Times New Roman, serif">EditPart),</font>发现在<font face="Times New Roman, serif">createFigure</font>中我是这么写的。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">代码 <font face="Times New Roman, serif">--
2</font></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font face="Times New Roman, serif">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
								<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
								<span style="color: rgb(0, 0, 0);">PolylineConnection connection </span>
								<span style="color: rgb(0, 0, 0);">=</span>
								<span style="color: rgb(0, 0, 0);"> (PolylineConnection)</span>
								<span style="color: rgb(0, 0, 255);">super</span>
								<span style="color: rgb(0, 0, 0);">.createFigure();<br />       <br />        connection.setConnectionRouter(</span>
								<span style="color: rgb(0, 0, 255);">new</span>
								<span style="color: rgb(0, 0, 0);"> BendpointConnectionRouter(){<br />            </span>
								<span style="color: rgb(0, 0, 255);">public</span>
								<span style="color: rgb(0, 0, 0);"> </span>
								<span style="color: rgb(0, 0, 255);">void</span>
								<span style="color: rgb(0, 0, 0);"> route(Connection conn) {<br />                GraphAnimation.recordInitialState(conn);<br />                </span>
								<span style="color: rgb(0, 0, 255);">if</span>
								<span style="color: rgb(0, 0, 0);"> (</span>
								<span style="color: rgb(0, 0, 0);">!</span>
								<span style="color: rgb(0, 0, 0);">GraphAnimation.playbackState(conn))<br />                    </span>
								<span style="color: rgb(0, 0, 255);">super</span>
								<span style="color: rgb(0, 0, 0);">.route(conn);<br />            }<br />        });</span>
						</div>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">很明显我在这里给<font face="Times New Roman, serif">connection</font>赋了一个<font face="Times New Roman, serif">ConnectionRouter</font>。最终其效果的是这一个<font face="Times New Roman, serif">ConnectionRouter</font>起作用了。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font face="Times New Roman, serif">Md</font>刚掉他就万事大吉了。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">到这里代码部分其实就完了。但是他背后的还有一点故事。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">这里有三个角色：</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font face="Times New Roman, serif">1</font>、<font face="Times New Roman, serif">Connection</font></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font face="Times New Roman, serif">2</font>、<font face="Times New Roman, serif">ConnectionAnchor.</font></p>
		<p style="margin-bottom: 0cm;">
				<font face="Times New Roman, serif">3</font>
				<span lang="zh-CN">、</span>
				<font face="Times New Roman, serif">
						<code>ConnectionRouter</code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<code>
						<span lang="zh-CN">这个类是用来显示两点之间的线段</span>
						<font face="Times New Roman, serif">(Line),</font>
				</code>
				<code>
						<span lang="zh-CN">他的起点和终点是通过</span>
						<font face="Times New Roman, serif">ConnectionAnchor</font>
				</code>
				<code>
						<span lang="zh-CN">来定义的。至于他的其他点<font face="宋体">是通过</font></span>
						<font face="Times New Roman, serif">ConnectionRouter</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">计算设置的。从这个地方来看</font>
						</span>
						<font face="Times New Roman, serif">ConnectionRouter</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">是一个负责计算的工具类。这样完全可以让所有的</font>
						</span>
						<font face="Times New Roman, serif">Connection</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">使用一个</font>
						</span>
						<font face="Times New Roman, serif">ConnectionRouter</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">实例（这就是今天最要记下的部分）。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<code>
						<span lang="zh-CN">
								<font face="宋体">在</font>
						</span>
						<font face="Times New Roman, serif">gef</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">中他就为我们提供了这样的机制。下面的这段话是</font>
						</span>
						<font face="Times New Roman, serif">Gef
help</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">中的一句话。他就说明了这个道理。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font face="Times New Roman, serif">
						<code>A
convenient way to share the router with all connections and to place
connections above the drawing is to use a <code>ConnectionLayer</code>.
The layer has a connection router property which it shares with every
child that's a connection. You can update this property and easily
change every connection's router at once. </code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<code>
						<span lang="zh-CN">
								<font face="宋体">这个道理要转换成代码的话就是代码
– </font>
						</span>
						<font face="Times New Roman, serif">1</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">了。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<code>
						<span lang="zh-CN">
								<font face="宋体">这个东西很简单。希望对像我一样的新手有点帮助。</font>
						</span>
				</code>
		</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/47548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-05-22 22:21 <a href="http://www.blogjava.net/JetGeng/archive/2006/05/22/47548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>八进制推荐代码的功能分析</title><link>http://www.blogjava.net/JetGeng/archive/2006/05/06/44718.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sat, 06 May 2006 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/05/06/44718.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/44718.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/05/06/44718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/44718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/44718.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" lang="zh-CN">特别喜欢那个例子的一点一点添加功能的做法。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">关于这个例子中使用的原理八进制讲的很清楚了。我就不啰嗦了。我就把自己读这部分代码的笔记记下来。</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/gef/GEF%20%E7%BB%83%E4%B9%A0%E5%9B%BE.jpeg" alt="GEF 练习图.jpeg" border="0" height="832" width="1669" />
				<br />
		</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/44718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-05-06 10:34 <a href="http://www.blogjava.net/JetGeng/archive/2006/05/06/44718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmerge的使用初步(二)</title><link>http://www.blogjava.net/JetGeng/archive/2006/05/02/44342.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Tue, 02 May 2006 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/05/02/44342.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/44342.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/05/02/44342.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/44342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/44342.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" align="center">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">Jmerger</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font face="宋体">使用初步</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">(</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">二</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">)</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">前面一篇提到了他基本的概念和能完成的功能。在这一篇里我们来看看他的使用条件和使用方法。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">使用条件：应为</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">org.eclipse.jdt.core</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font face="宋体">（提供基本的语法分析）</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">org.eclipse.core.runtime</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font face="宋体">（提供基本的</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">URI</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">等）</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">org.eclipse.ui</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font face="宋体">（提供进度条，我就看到了这个。其他可能还有）。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">看到他要使用这么多</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Eclipse</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">的东西。我彻底的打消了在</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Eclipse</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">外使用他的打算（如果谁有好的解决方案记得给我发一份。在下感激不尽）。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">我们下面就来看看如何定制他的合并规则是如何定义的吧。我先做法是找了一个例子。看看他是如何工作的。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">我的</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Merge.xml</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">如下：</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">清单</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">2</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">：</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#008080">&lt;?</font>
								<font color="#3f7f7f">xml
</font>
								<font color="#7f007f">version</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"1.0"
</font>
								<font color="#7f007f">encoding</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"UTF-8"</font>
								<font color="#008080">?&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#008080">&lt;</font>
								<font color="#3f7f7f">merge:options
</font>
								<font color="#7f007f">xmlns:merge</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"http://www.eclipse.org/org/eclipse/emf/codegen/jmerge/Options"</font>
								<font color="#008080">&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<br />
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#000000">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#008080">&lt;</font>
								<font color="#3f7f7f">merge:dictionaryPattern</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#3f7f7f">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">name</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"generatedMember"
</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">select</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"Member/getComment"
</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">match</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"\s*@\s*(gen)erated\s*\n"</font>
								<font color="#008080">/&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#000000">
						<font face="Courier New, monospace">
								<font size="2">
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#000000">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#3f5fbf">&lt;!--
if target is generated, transfer --&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#000000">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#3f5fbf">&lt;!--
change to sourceMarkup if the source is the standard --&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#000000">
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#000000">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#008080">&lt;</font>
								<font color="#3f7f7f">merge:pull
</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#3f7f7f">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">targetMarkup</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"^gen$"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">sourceGet</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"Method/getBody"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">targetPut</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"Method/setBody"</font>
								<font color="#008080">/&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<br />
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#008080">&lt;/</font>
										<font color="#3f7f7f">merge:options</font>
										<font color="#008080">&gt;</font>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">运行前的</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Source</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">（</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Java
Source A</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">）
</font>
						</span>
						<code>
								<span lang="zh-CN">
										<font face="宋体">部</font>
								</span>
						</code>
						<span lang="zh-CN">
								<font face="宋体">分源代码为</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">/**</font>
						</code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
Source javadoc 13</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
&lt;!-- begin-user-doc --&gt;</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
Source user javadoc 14</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
&lt;!-- end-user-doc --&gt;</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
Source javadoc 15</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
@return source</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*
@generated</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">*/</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">public
boolean isID()</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">{</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">//
begin-user-code</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">System.out.println("Source
user code 1");</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">//
end-user-code    </font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">System.out.println("Source
code 2");</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">return
id == "source";</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">}</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">运行前</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Target(Java
Source B)</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">部分的源代码为：</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">/**<br />
  * Source javadoc 13<br />   * &lt;!-- begin-user-doc --&gt;<br />   *
Target user javadoc 16<br />   * Target user javadoc 17<br />   * &lt;!--
end-user-doc --&gt;<br />   * Source javadoc 15<br />   * @return source<br />
  * @generated<br />   */<br />  public boolean isID()<br />  {<br />	//This
is my owner code<br />	System.out.print("Will be replace");<br />
   // begin-user-code<br />    System.out.println("Target user
code 2");<br />    // end-user-code<br />   
System.out.println("Source code 2");<br />    return id ==
"source";<br />  }</font>
						</code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">/**<br />
  * Target javadoc 19<br />   * &lt;!-- begin-user-doc --&gt;<br />   *
Target user javadoc 20<br />   * Target user javadoc 21<br />   * &lt;!--
end-user-doc --&gt;<br />   * Target javadoc 22<br />   * @param target<br />
  * @generated NOT<br />   */<br />  public void setID(boolean value)<br />
 {<br />	 //This Jet Code<br />	System.out.println("Not be
replaced!");<br />     id = value ? "target" :
"source";<br />     System.out.println("Target code
4");<br />  }</font>
								<code>
										<font face="宋体">
										</font>
								</code>
						</code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">注意：</font>
						</span>
						<font face="Times New Roman, serif">
								<code>
										<font face="宋体">isID</font>
								</code>
						</font>
				</code>
				<code>
						<code>
								<span lang="zh-CN">
										<font face="宋体">方法</font>
								</span>
						</code>
						<span lang="zh-CN">
								<font face="宋体">注释里有”</font>
						</span>
						<font face="Times New Roman, serif">
								<code>
										<font face="宋体">@generated”</font>
								</code>
						</font>
				</code>
				<code>
						<code>
								<span lang="zh-CN">
										<font face="宋体">这一行。而
</font>
								</span>
								<font face="Times New Roman, serif">
										<code>
												<font face="宋体">setID
</font>
										</code>
								</font>
						</code>
				</code>
				<code>
						<code>
								<code>
										<span lang="zh-CN">
												<font face="宋体">方法的注释中是</font>
										</span>
										<font face="Times New Roman, serif">
												<code>
														<font face="宋体">@generated
NOT</font>
												</code>
										</font>
								</code>
						</code>
				</code>
				<code>
						<code>
								<code>
										<code>
												<span lang="zh-CN">
														<font face="宋体">。</font>
												</span>
										</code>
								</code>
						</code>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">运行后的结果是（</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Result
of merge</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">）为</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">/**<br />
  * Source javadoc 13<br />   * &lt;!-- begin-user-doc --&gt;<br />   *
Target user javadoc 16<br />   * Target user javadoc 17<br />   * &lt;!--
end-user-doc --&gt;<br />   * Source javadoc 15<br />   * @return source<br />
  * @generated<br />   */<br />  public boolean isID()</font>
						</code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">{</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">//
begin-user-code</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">System.out.println("Source
user code 1");</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">//
end-user-code    </font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">System.out.println("Source
code 2");</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">return
id == "source";</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">}</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">//</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font face="宋体">使用了</font>
						</span>
						<font face="Times New Roman, serif">
								<code>
										<font face="宋体">Source</font>
								</code>
						</font>
				</code>
				<code>
						<code>
								<span lang="zh-CN">
										<font face="宋体">部分的代码。</font>
								</span>
						</code>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font face="Times New Roman, serif">
								<font face="宋体">/**<br />
  * Target javadoc 19<br />   * &lt;!-- begin-user-doc --&gt;<br />   *
Target user javadoc 20<br />   * Target user javadoc 21<br />   * &lt;!--
end-user-doc --&gt;<br />   * Target javadoc 22<br />   * @param target<br />
  * @generated NOT<br />   */<br />  public void setID(boolean value)<br />
 {<br />	 //This Jet Code<br />	 System.out.println("Not be
replaced!");<br />     id = value ? "target" :
"source";<br />     System.out.println("Target code
4");<br />  }</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font face="宋体">//</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font face="宋体">维持原来</font>
						</span>
						<font face="Times New Roman, serif">
								<font face="宋体">Target</font>
						</font>
				</code>
				<code>
						<span lang="zh-CN">
								<font face="宋体">中的代码没有变化。</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<span lang="zh-CN">
								<font face="宋体">这样我们就不难看出</font>
						</span>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<font face="Times New Roman, serif">
						<code>
								<font size="2">
										<font face="宋体">
												<font color="#008080">&lt;</font>
												<font color="#3f7f7f">merge:dictionaryPattern
……/&gt;</font>
										</font>
								</font>
						</code>
				</font>
				<code>
						<span lang="zh-CN">
								<font size="2">
										<font face="宋体">
												<font color="#3f7f7f">段</font>
										</font>
								</font>
						</span>
						<code>
								<span lang="zh-CN">
										<font size="2">
												<font face="宋体">
														<font color="#000000">是定义了一个匹配模式。具体的这个匹配模式要做的动作就是在</font>
												</font>
										</font>
								</span>
						</code>
				</code>
		</p>
		<p style="margin-bottom: 0cm;" align="left">
				<code>
						<font color="#000000">
						</font>
						<font face="Times New Roman, serif">
								<font size="2">
										<font face="Courier New, monospace">
												<font color="#008080">&lt;</font>
												<font color="#3f7f7f">merge:pull
</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#3f7f7f">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">targetMarkup</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"^gen$"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">sourceGet</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"Method/getBody"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Times New Roman, serif">
						<font size="2">
								<font face="Courier New, monospace">
										<font color="#7f007f">targetPut</font>
										<font color="#000000">=</font>
										<font color="#2a00ff">"Method/setBody"</font>
										<font color="#008080">/&gt;</font>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font color="#000000">
						<font face="宋体">
								<font size="2">段中定义了。猜想他只是把</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">Source</font>
						</font>
						<font face="宋体">
								<font size="2">部分的内容直接输出到</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">Target</font>
						</font>
						<font face="宋体">
								<font size="2">那里去了。</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font color="#008080">
						<font face="宋体">
								<font size="2">
										<font color="#000000">如果我们觉得需要做点什么过滤。比如说想保留</font>
								</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">
										<font face="宋体">
												<font color="#000000">Target</font>
										</font>
								</font>
						</font>
						<font face="宋体">
								<font size="2">
										<font color="#000000">中一个特定的内容。这一个我们可以通过
 </font>
								</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">
										<code>
												<font size="2">
														<font face="宋体">
																<font color="#000000">merge:pull</font>
														</font>
												</font>
										</code>
								</font>
						</font>
						<font face="宋体">
								<font size="2">
										<code>
												<span lang="zh-CN">
														<font size="2">
																<font face="宋体">
																		<font color="#000000">中</font>
																</font>
														</font>
												</span>
										</code>
								</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">
										<code>
												<font size="2">
														<font face="宋体">
																<font color="#000000">sourceTransfer</font>
														</font>
												</font>
										</code>
								</font>
						</font>
						<font face="宋体">
								<font size="2">
										<code>
												<span lang="zh-CN">
														<font size="2">
																<font face="宋体">
																		<font color="#000000">属性来设置。</font>
																</font>
														</font>
												</span>
										</code>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font color="#008080">
						<font face="宋体">
								<font size="2">
										<code>
												<span lang="zh-CN">
														<font size="2">
																<font face="宋体">
																		<font color="#000000">现在来看一个例子：</font>
																</font>
														</font>
												</span>
										</code>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font color="#008080">
						<font face="宋体">
								<font size="2">
										<code>
												<span lang="zh-CN">
														<font size="2">
																<font face="宋体">
																		<font color="#000000">把</font>
																</font>
														</font>
												</span>
										</code>
								</font>
						</font>
						<font face="Courier New, monospace">
								<font size="2">
										<code>
												<font size="2">
														<font face="宋体">
																<font color="#000000">merge:pull</font>
														</font>
												</font>
										</code>
								</font>
						</font>
						<font face="宋体">
								<font size="2">
										<code>
												<span lang="zh-CN">
														<font size="2">
																<font face="宋体">
																		<font color="#000000">节点修改成</font>
																</font>
														</font>
												</span>
										</code>
								</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<font color="#008080">
						<code>
								<font color="#000000">
								</font>
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">
																<font color="#008080">&lt;</font>
																<font color="#3f7f7f">merge:pull
</font>
														</font>
												</font>
										</font>
								</font>
						</code>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#3f7f7f">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">targetMarkup</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"^gen$"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">sourceTransfer</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"(\s*//\s*begin-user-code.*?//\s*end-user-code\s*)\n"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">sourceGet</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"Method/getBody"</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font color="#2a00ff">
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<font color="#7f007f">targetPut</font>
								<font color="#000000">=</font>
								<font color="#2a00ff">"Method/setBody"</font>
								<font color="#008080">/&gt;</font>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font color="#000000">
														<font face="宋体">注意：添加了一个
</font>
												</font>
										</span>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font color="#000000">
												<font size="2">
														<font face="Courier New, monospace">sourceTransfer,</font>
												</font>
										</font>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font color="#000000">
														<font size="2">
																<font face="Courier New, monospace">他的值</font>
																<font face="宋体">值是一个正则表达式。匹配的是被</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#000000">“<font face="Courier New, monospace"><font size="2"><font size="2"><font face="Courier New, monospace">//
begin-user-code” </font></font></font></font></font>
				</code>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">和“</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<font color="#000000">//
end-user-code”</font>
												</font>
										</font>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">包围住的所有的字符。</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<font color="#000000">Target</font>
												</font>
										</font>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">的代码为<span lang="zh-CN">（<span lang="zh-CN">我们现在只是关注</span></span></font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<code>
																<font face="宋体">
																		<font color="#000000">isID</font>
																</font>
														</code>
												</font>
										</font>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<span lang="zh-CN">
																		<code>
																				<span lang="zh-CN">
																						<font face="宋体">
																								<font color="#000000">方法</font>
																						</font>
																				</span>
																		</code>
																		<font color="#000000">）</font>
																</span>
																<font color="#000000">。</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<br />
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<font color="#7f007f">/**<br />
  * Source javadoc 13<br />   * &lt;!-- begin-user-doc --&gt;<br />   *
Target user javadoc 16<br />   * Target user javadoc 17<br />   * &lt;!--
end-user-doc --&gt;<br />   * Source javadoc 15<br />   * @return source<br />
  * @generated<br />   */<br />  public boolean isID()</font>
												</font>
										</font>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">{</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">//
begin-user-code</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">System.out.println("Source
user code 1");<br /></font>
														<font color="#ff3366">System.out.println("This
will not be replaced!");</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">//
end-user-code    <br /></font>
														<font color="#ff0000">System.out.print("this
will be replaced!");</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">System.out.println("Source
code 2");</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">return
id == "source";</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">}</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<br />
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">请注意看一下红色部分的两行代码。</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">合并后的代码为：</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<font color="#7f007f">/**<br />
  * Source javadoc 13<br />   * &lt;!-- begin-user-doc --&gt;<br />   *
Target user javadoc 16<br />   * Target user javadoc 17<br />   * &lt;!--
end-user-doc --&gt;<br />   * Source javadoc 15<br />   * @return source<br />
  * @generated<br />   */<br />  public boolean isID()</font>
												</font>
										</font>
								</code>
						</font>
				</font>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">{</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">//
begin-user-code</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">System.out.println("Source
user code 1");<br />    System.out.println("This will not be
replaced!");</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">//
end-user-code    <br />    System.out.println("Source code 2");</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">return
id == "source";</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<code>
						<font color="#7f007f">
								<font face="Courier New, monospace">
										<font size="2">
												<font size="2">
														<font face="Courier New, monospace">}</font>
												</font>
										</font>
								</font>
						</font>
				</code>
		</p>
		<p style="margin-bottom: 0cm;">
				<br />
		</p>
		<p style="margin-bottom: 0cm;">
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">在“</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<code>
																<font size="2">
																		<font face="Courier New, monospace">
																				<font color="#000000">//
begin-user-code</font>
																		</font>
																</font>
														</code>
														<font color="#000000">”</font>
												</font>
										</font>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">和“</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<font size="2">
												<font face="Courier New, monospace">
														<code>
																<font size="2">
																		<font face="Courier New, monospace">
																				<font color="#000000">//
end-user-code</font>
																		</font>
																</font>
														</code>
														<font color="#000000">”</font>
												</font>
										</font>
								</code>
						</font>
				</font>
				<font face="Courier New, monospace">
						<font size="2">
								<code>
										<span lang="zh-CN">
												<font size="2">
														<font face="宋体">
																<font color="#000000">外的代码全部被替换成了。这样就起到了过滤的效果。</font>
														</font>
												</font>
										</span>
								</code>
						</font>
				</font>
		</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/44342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-05-02 11:34 <a href="http://www.blogjava.net/JetGeng/archive/2006/05/02/44342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可能是xml editor的一个bug</title><link>http://www.blogjava.net/JetGeng/archive/2006/05/02/44332.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Tue, 02 May 2006 00:24:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/05/02/44332.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/44332.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/05/02/44332.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/44332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/44332.html</trackback:ping><description><![CDATA[
		<p style="margin-bottom: 0cm;" lang="zh-CN">今天使用<font face="Times New Roman, serif">xml
editor </font>发现一个问题。<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/ecclipse%20bug/Snap1.jpg" alt="Snap1.jpg" border="0" height="138" width="674" /><br /></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">如上图：我的目的是想注释掉节点<font face="Times New Roman, serif">merge:pull</font>。于是在<font face="Times New Roman, serif">1</font>和<font face="Times New Roman, serif">3</font>的位置分别加上了注释的开始和关闭的<font face="Times New Roman, serif">tag</font>。但是却发现了一个奇怪的问题。他认为注释到位置<font face="Times New Roman, serif">2</font>就结束了。而位置<font face="Times New Roman, serif">2</font>的”<font face="Times New Roman, serif">--&gt;”</font>是作为一个用引号“引”起来的值存在的啊。我迷糊了。<br /></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">我使用的版本是<font face="Times New Roman, serif">Eclipse
3.2M3<br /><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/ecclipse%20bug/version.jpg" alt="version.jpg" border="0" height="26" width="776" /><br /></font></p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<br />
		</p>
		<p style="margin-bottom: 0cm;" lang="zh-CN">
				<br />
		</p>
<img src ="http://www.blogjava.net/JetGeng/aggbug/44332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-05-02 08:24 <a href="http://www.blogjava.net/JetGeng/archive/2006/05/02/44332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jmerge的使用初步(一)</title><link>http://www.blogjava.net/JetGeng/archive/2006/05/01/44261.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Mon, 01 May 2006 00:01:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/05/01/44261.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/44261.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/05/01/44261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/44261.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/44261.html</trackback:ping><description><![CDATA[
		<div align="center">Jmerge的使用初步(一)<br /><div align="left"><p style="margin-bottom: 0cm;" align="left"><span lang="zh-CN">在</span><font face="Times New Roman, serif">EMF</font><span lang="zh-CN">框架中最终会根据模型生成代码，还可以反复生成。还能使你自己编辑的内容不丢失。够好玩的吧。那么这部分是怎么实现的呢？看过一点</span><font face="Times New Roman, serif">EMF</font><span lang="zh-CN">介绍就可以知道</span><font face="Times New Roman, serif">EMF</font><span lang="zh-CN">是通过</span><font face="Times New Roman, serif">JET</font><span lang="zh-CN">完成代码生成的动作的。在《</span>使用 <font face="Times New Roman, serif">Eclipse Modeling Framework </font>进行建模<span lang="zh-CN">》这个系列的文章就可以了解到这一点。在该系列文章的第三部分还可以了解到使用</span><font face="Times New Roman, serif">JMerge
</font><span lang="zh-CN">可以实现“成的代码插入现有的代码中，或者允许以后的开发人员来定制所生成的代码，而不需要在重新生成代码时重新编写任何内容。”这样的功能。</span></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN">他是通过创建<font face="Times New Roman, serif">Junit
</font>测试类作例子的。他说过的东西我就不啰嗦了。我只是把我个人在看了他文章后的一些东西整理一下。</p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN">好，现在进入正题。</p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN">首先我们来说一说<font face="Times New Roman, serif">JMerge</font>这个名字。<font face="Times New Roman, serif">Merge</font>这个单词是合并的意思。前面加了一个“<font face="Times New Roman, serif">J”</font>不用多说，肯定表示<font face="Times New Roman, serif">Java</font>了（完全是参考<font face="Times New Roman, serif">Junit,log4j……</font>）。那么我就大胆
猜测这个工具是用来合并<font face="Times New Roman, serif">Java</font>代码的。既然是合并就应该符合下图描述的动作。<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Jmerge-Name.jpg" alt="Jmerge-Name.jpg" border="0" height="227" width="488" /><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN">合并肯定是把两个东西和成一个。所以图中的<font face="Times New Roman, serif">Java
Source A </font>和<font face="Times New Roman, serif">Java Source
B</font>就分别代表需要合并的部分了。最后的<font face="Times New Roman, serif">Result
of
Merge</font>就是合并后的那一个结果了。应为我们合并的是<font face="Times New Roman, serif">Java</font>代码。这些代码如何合并，也就是我们期望的合并结果是什么样的。图中的<font face="Times New Roman, serif">Rule
of merge</font>就是代表的这部分信息。</p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN">在下面使用<font face="Times New Roman, serif">Jmerge</font>的代码中<br /></p><p style="margin-bottom: 0.5cm;"><a name="N10073"></a><b>清单 </b><font face="Times New Roman, serif"><b>1.
</b></font><b>调用 </b><font face="Times New Roman, serif"><b>JMerge<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 128);"> 1</span> <span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> <img src="http://www.blogjava.net/images/dot.gif" /></span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 2</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        JMerger merger </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> getJMerger();<br /></span><span style="color: rgb(0, 128, 128);"> 3</span> <span style="color: rgb(0, 0, 0);">        <br /></span><span style="color: rgb(0, 128, 128);"> 4</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> set source</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        merger.setSourceCompilationUnit(<br /></span><span style="color: rgb(0, 128, 128);"> 6</span> <span style="color: rgb(0, 0, 0);">                merger.createCompilationUnitForContents(generated));<br /></span><span style="color: rgb(0, 128, 128);"> 7</span> <span style="color: rgb(0, 0, 0);">        <br /></span><span style="color: rgb(0, 128, 128);"> 8</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> set target</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        merger.setTargetCompilationUnit(<br /></span><span style="color: rgb(0, 128, 128);">10</span> <span style="color: rgb(0, 0, 0);">                merger.createCompilationUnitForInputStream( <br /></span><span style="color: rgb(0, 128, 128);">11</span> <span style="color: rgb(0, 0, 0);">                        </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> FileInputStream(target.getLocation().toFile())));<br /></span><span style="color: rgb(0, 128, 128);">12</span> <span style="color: rgb(0, 0, 0);">        <br /></span><span style="color: rgb(0, 128, 128);">13</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> merge source and target</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">14</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        merger.merge();<br /></span><span style="color: rgb(0, 128, 128);">15</span> <span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">16</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> extract merged contents</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">17</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        InputStream mergedContents </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ByteArrayInputStream(<br /></span><span style="color: rgb(0, 128, 128);">18</span> <span style="color: rgb(0, 0, 0);">                merger.getTargetCompilationUnit().getContents().getBytes());<br /></span><span style="color: rgb(0, 128, 128);">19</span> <span style="color: rgb(0, 0, 0);">                <br /></span><span style="color: rgb(0, 128, 128);">20</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> overwrite the target with the merged contents</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">21</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        target.setContents(mergedContents, </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">, monitor);<br /></span><span style="color: rgb(0, 128, 128);">22</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> <img src="http://www.blogjava.net/images/dot.gif" /><br /></span><span style="color: rgb(0, 128, 128);">23</span> <span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">24</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> <img src="http://www.blogjava.net/images/dot.gif" /></span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">25</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> JMerger getJMerger() {<br /></span><span style="color: rgb(0, 128, 128);">26</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> build URI for merge document</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">27</span> <span style="color: rgb(0, 128, 0);"></span><span style="color: rgb(0, 0, 0);">        String uri </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> <br /></span><span style="color: rgb(0, 128, 128);">28</span> <span style="color: rgb(0, 0, 0);">           Platform.getPlugin(PLUGIN_ID).getDescriptor().getInstallURL().toString();<br /></span><span style="color: rgb(0, 128, 128);">29</span> <span style="color: rgb(0, 0, 0);">        uri </span><span style="color: rgb(0, 0, 0);">+=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">templates/merge.xml</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);">30</span> <span style="color: rgb(0, 0, 0);">                <br /></span><span style="color: rgb(0, 128, 128);">31</span> <span style="color: rgb(0, 0, 0);">        JMerger jmerger </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> JMerger();<br /></span><span style="color: rgb(0, 128, 128);">32</span> <span style="color: rgb(0, 0, 0);">        JControlModel controlModel </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> JControlModel( uri );<br /></span><span style="color: rgb(0, 128, 128);">33</span> <span style="color: rgb(0, 0, 0);">        jmerger.setControlModel( controlModel );<br /></span><span style="color: rgb(0, 128, 128);">34</span> <span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> jmerger;<br /></span><span style="color: rgb(0, 128, 128);">35</span> <span style="color: rgb(0, 0, 0);">}<br /><br /></span></div></b></font></p><p style="margin-bottom: 0cm;" lang="zh-CN">我们可以很容易的找出它们的对应物。</p><p style="margin-bottom: 0cm;" lang="zh-CN">我们先从<font face="Times New Roman, serif">JMerger</font>的创建开始看起吧。</p><p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><code>	
 uri += "templates/merge.xml";</code></font></p><pre><code>        JMerger jmerger = new JMerger();</code><br /><code>        JControlModel controlModel = new JControlModel( uri );</code><br /><code>        jmerger.setControlModel( controlModel );</code></pre><p style="margin-bottom: 0cm;"><code><span lang="zh-CN">这里用一个名为为为为叫</span><font face="Times New Roman, serif">merge.xml</font></code><code><span lang="zh-CN">的文件作为为为为输输输</span><font face="Times New Roman, serif">input</font></code><code><span lang="zh-CN">参数创创窜新建了一个</span><font face="Times New Roman, serif">JControlModel</font></code><code><span lang="zh-CN">对象。传传</span><code><span lang="zh-CN">传给</span><font face="Times New Roman, serif">JMerger</font></code></code><code><code><span lang="zh-CN">对象。做完这些后又调调用了
</span><font face="Times New Roman, serif"><code>setSourceCompilationUnit
</code></font></code></code><code><code><code><span lang="zh-CN">和
</span><font face="Times New Roman, serif"><code>setTargetCompilationUnit
</code></font></code></code></code><code><code><code><code><span lang="zh-CN">方法。他们们们</span><code><span lang="zh-CN">们的类类</span><code><span lang="zh-CN">类型都是</span><font face="Times New Roman, serif">IDOMCompilationUnit</font></code></code></code></code></code></code><code><code><code><code><code><code><span lang="zh-CN">（用</span><code><span lang="zh-CN">过的朋友都会知道他就代表了一个</span><font face="Times New Roman, serif">Java</font></code></code></code></code></code></code></code><code><code><code><code><code><code><code><span lang="zh-CN">文件</span></code><span lang="zh-CN">）。很荣荣</span><code><span lang="zh-CN">容易就会想起他们</span><code><span lang="zh-CN">们肯定就是</span><font face="Times New Roman, serif">Java
Source A </font></code></code></code></code></code></code></code></code><code><code><code><code><code><code><code><code><span lang="zh-CN">和</span><font face="Times New Roman, serif">Java
Source B</font></code></code></code></code></code></code></code></code><code><code><code><code><code><code><code><code><span lang="zh-CN">了至于</span><font face="Times New Roman, serif">Rule
of merge</font></code></code></code></code></code></code></code></code><code><code><code><code><code><code><code><code><span lang="zh-CN">可以通过</span><code><span lang="zh-CN">过调用</span><font face="Times New Roman, serif"><code>merger.merge()</code></font></code></code></code></code></code></code></code></code></code><code><code><code><code><code><code><code><code><code><code><span lang="zh-CN">后的</span><font face="Times New Roman, serif"><code>getContents</code></font></code></code></code></code></code></code></code></code></code></code><code><code><code><code><code><code><code><code><code><code><code><span lang="zh-CN">（）方法获</span><code><span lang="zh-CN">获得</span></code></code><span lang="zh-CN">。</span></code></code></code></code></code></code></code></code></code></code></p><p style="margin-bottom: 0cm;"><br /></p><p style="margin-bottom: 0cm;"><code><span lang="zh-CN">除了这种调用</span><code><span lang="zh-CN"></span></code><span lang="zh-CN">方式外还有一个更</span><code><span lang="zh-CN">简单</span></code><span lang="zh-CN">的调用方式：</span></code></p><p style="margin-bottom: 0cm;"><font face="Times New Roman, serif"><code>String
contents = merger.execute(null, new String[] { mergeXML,
source,target });</code></font></p><p style="margin-bottom: 0cm;"><br /></p><p style="margin-bottom: 0cm;"><code><span lang="zh-CN">看了 </span><font face="Times New Roman, serif"><code>execute
</code></font></code><code><code><span lang="zh-CN">实现后就</span><code><span lang="zh-CN">不难</span><code><span lang="zh-CN">发现他的还</span><code><span lang="zh-CN">是使用的第一</span><code><span lang="zh-CN">种。<br /></span></code></code></code></code></code></code></p><p style="margin-bottom: 0cm;"><code><span lang="zh-CN">关于具体如何定制合并规则</span><code><span lang="zh-CN">和使用条件打算在下一篇中写。<br /></span></code></code></p><p style="margin-bottom: 0cm;"><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"><br /></p><p style="margin-bottom: 0cm;" align="left" lang="zh-CN"></p></div></div>
<img src ="http://www.blogjava.net/JetGeng/aggbug/44261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-05-01 08:01 <a href="http://www.blogjava.net/JetGeng/archive/2006/05/01/44261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在eclipse rcp中使用spring框架</title><link>http://www.blogjava.net/JetGeng/archive/2006/03/23/37096.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Thu, 23 Mar 2006 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/03/23/37096.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/37096.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/03/23/37096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/37096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/37096.html</trackback:ping><description><![CDATA[                                
在eclipse rcp中使用spring框架<br /><p class="MsoNormal"><span style="font-family: 宋体;">很久就想了如何在</span><span lang="EN-US">Rcp</span><span style="font-family: 宋体;">程序中使用</span><span lang="EN-US">Spring</span><span style="font-family: 宋体;">。让</span><span lang="EN-US">Spring</span><span style="font-family: 宋体;">容器来管理我们</span><span lang="EN-US">rcp</span><span style="font-family: 宋体;">程序中的</span><span lang="EN-US">Beans</span><span style="font-family: 宋体;">。看到</span><span lang="EN-US">web</span><span style="font-family: 宋体;">项目中使用了</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">后带来的好处（最直接的就是看到代码量少了）就一脸的憧憬。想我的好日子什么时候才会来啊。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">有这个憧憬后我就开始考虑改如何做了。大家肯定都知道如果在</span><span lang="EN-US">eclipse rcp</span><span style="font-family: 宋体;">程序中使用直接使用</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">的</span><span lang="EN-US">beanfactory</span><span style="font-family: 宋体;">无论你是使用方式都会说找不到配置文件的。这个其中的原因是</span><span lang="EN-US">Eclipse </span><span style="font-family: 宋体;">的每个插件都使用他们自己的类加载器（</span><span lang="EN-US">class load</span><span style="font-family: 宋体;">）</span></p><p class="MsoNormal"><span style="font-family: 宋体;">说明：</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中类的详细的装载过程可以产考《</span><span lang="EN-US">Contributing to
eclipse </span><span style="font-family: 宋体;">中文版》</span><span lang="EN-US">p44</span><span style="font-family: 宋体;">。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">所以说能够正确的找到</span><span lang="EN-US">bean</span><span style="font-family: 宋体;">的配置文件成了一个难题。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">还有一个问题就是如何管理</span><span lang="EN-US">BeanFactory</span><span style="font-family: 宋体;">也是一个问题。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">既然提出了这两个问题，那就的一个一个的面对啊。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">第一个问题的解决方式。只要通过一个插件中的类就可以获得。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">我试了一下通过如下代码可以切换</span><span lang="EN-US">class load</span></p><p class="MsoNormal"><span style="font-family: 宋体;">最头疼的问题就是如何来管理</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">的</span><span lang="EN-US">BeanFactory</span><span style="font-family: 宋体;">。如果在每个</span><span lang="EN-US">Plugin</span><span style="font-family: 宋体;">类的继承类里都加上对</span><span lang="EN-US">beanfactory</span><span style="font-family: 宋体;">的创建。想想都是很恶心的事情。就为这个事情一直停滞不前。搞的我快郁闷死掉了。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">就在快死还没有死的时候看到了一个叫</span><span lang="EN-US">EclipseSpring</span><span style="font-family: 宋体;">项目（</span><span lang="EN-US">http://sourceforge.net/projects/eclipse-spring/</span><span style="font-family: 宋体;">）。一看超爽。他直接把我想做的事情直接给做了。</span></p><span style="font-size: 10.5pt; font-family: 宋体;">下面我们就来看看一下他的发布包里代的那个例子。这个例子很简单。就只是提供了一个</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">view</span><span style="font-size: 10.5pt; font-family: 宋体;">。</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">View</span><span style="font-size: 10.5pt; font-family: 宋体;">里显示一个条问候语。<br /><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/simple%20view.jpg" alt="simple view.jpg" border="0" height="162" width="377" /><br /></span><p class="MsoNormal"><span style="font-family: 宋体;">呵呵，是不是很界面太简单了。这个我们就不说了。我们来说说他这个示例中到底是怎么实现的。</span></p><span style="font-size: 10.5pt; font-family: 宋体;">先看看他的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">plugin.xml</span><span style="font-size: 10.5pt; font-family: 宋体;">文件把。<br /><br /><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/pluginxml.jpg" alt="pluginxml.jpg" border="0" height="306" width="846" /><br /></span><p class="MsoNormal"><span style="font-family: 宋体;">看看那个</span><span lang="EN-US">org.eclipse.ui.view</span><span style="font-family: 宋体;">那个扩展点。是不是有点奇怪啊。他的类是</span><span lang="EN-US">net.sourceforge.eclipsespring.SpringExtensionFactory:example/userNameView</span><span style="font-family: 宋体;">这个样子的。一言看上去就不是一个类。而是一个类代了点参数。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">不过可以断定他就是上图显示的</span><span lang="EN-US">view</span><span style="font-family: 宋体;">了。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">在看看上面那个扩展点</span></p><p class="MsoNormal"><span lang="EN-US">&lt;extension</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">        
</span>point="net.sourceforge.eclipsespring.beanFactoryContributors"&gt;</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">     
</span>&lt;beanFactoryContributor</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">           
</span>class="net.sourceforge.eclipsespring.example.spring.BeanFactoryContributor"</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">           
</span>id="example"/&gt;</span></p><p class="MsoNormal"><span lang="EN-US"><span style="">  
</span>&lt;/extension&gt;</span></p><p class="MsoNormal"><span style="font-family: 宋体;">这个扩展点干吗用的啊。嗯是一个问题。</span></p><span style="font-size: 10.5pt; font-family: 宋体;">插件文件下面除了一个</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">plugin.xml</span><span style="font-size: 10.5pt; font-family: 宋体;">文件外。还有一个</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">bean.xml</span><span style="font-size: 10.5pt; font-family: 宋体;">的文件。<br /><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/springdiagram.jpg" alt="springdiagram.jpg" border="0" height="247" width="488" /><br /></span><p class="MsoNormal"><span style="font-family: 宋体;">这下一看，明白了她就一个</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">需要的配置文件。并包括了对</span><span lang="EN-US">view</span><span style="font-family: 宋体;">的申明。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">从</span><span lang="EN-US">net.sourceforge.eclipsespring.beanFactoryContributors</span><span style="font-family: 宋体;">这个名字可以看出他是对</span><span lang="EN-US">beanFactory</span><span style="font-family: 宋体;">做了一个扩展。</span></p><p class="MsoNormal"><span style="font-family: 宋体;">去这个类看一下，是怎么回事。</span></p><span style="font-size: 10.5pt; font-family: 宋体;">只是发现了<br /><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/getresource.jpg" alt="getresource.jpg" border="0" height="141" width="665" /><br /></span><span style="font-size: 10.5pt; font-family: 宋体;">一看可以知道。它在这里初始化了</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">spring</span><span style="font-size: 10.5pt; font-family: 宋体;">的配置文件。<br /></span><span style="font-size: 10.5pt; font-family: 宋体;">这个插件项目的整个类图为<br /><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/classes.jpg" alt="classes.jpg" border="0" height="375" width="635" /><br /></span><p class="MsoNormal"><span style="font-family: 宋体;">稍微回顾一下。在一个</span><span lang="EN-US">plugin</span><span style="font-family: 宋体;">中要有</span><span lang="EN-US">BeanFactoryContributor</span><span style="font-family: 宋体;">，</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">配置文件合上</span><span lang="EN-US">net.sourceforge.eclipsespring</span><span style="font-family: 宋体;">插件就可以使用</span><span lang="EN-US">spring</span><span style="font-family: 宋体;">了。</span></p><span style="font-size: 10.5pt; font-family: 宋体;">关于在这个过程中</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">beanFactory</span><span style="font-size: 10.5pt; font-family: 宋体;">如何创建，和扩展点如何被调用。我会在下一篇里说明。今天想睡了,虽然有点早。呵呵</span><br /><img src ="http://www.blogjava.net/JetGeng/aggbug/37096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-03-23 22:18 <a href="http://www.blogjava.net/JetGeng/archive/2006/03/23/37096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ship Manager的界面 ――我的第一个RCP程序</title><link>http://www.blogjava.net/JetGeng/archive/2006/03/12/34892.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sun, 12 Mar 2006 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/03/12/34892.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/34892.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/03/12/34892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/34892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/34892.html</trackback:ping><description><![CDATA[<div align="center"><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Ship Manager</span><span style="font-size: 10.5pt; font-family: 宋体;">的界面</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;"> <br>
</span><span style="font-size: 10.5pt; font-family: 宋体;">――我的第一个</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">RCP</span><span style="font-size: 10.5pt; font-family: 宋体;">程序<br>
</span>
<div align="left"><span style="font-size: 10.5pt; font-family: 宋体;"></span>

<p class="MsoNormal"><span style="font-family: 宋体;">前一段时间说画出把给朋友做的程序</span><span lang="EN-US">ui</span><span style="font-family: 宋体;">画出来的。一直拖到现在。真是有点不好意思。好了闲话就不说了。</span></p>


<span style="font-size: 10.5pt; font-family: 宋体;">下图就是我做出来的界面。现在看起来还很粗糙。<br>
<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/shipmanager/mainui.jpg" alt="mainui.jpg" border="0" height="474" width="1012"><br>
<br>
</span>

<p class="MsoNormal"><span style="font-family: 宋体;">这个程序主要任务就是维护一些船只的资料。然后能够迅速的查询出这些资料。这样就会出现了维护和查询这两大块。根据这样的情况设计出了上图的界面。</span></p>


<span style="font-size: 10.5pt; font-family: 宋体;">上图的界面包括三个部分：<br>
</span>

<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: Wingdings;" lang="EN-US">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><!--[endif]--><span style="font-family: 宋体;">功能导航（一个</span><span lang="EN-US">View</span><span style="font-family: 宋体;">）。呵呵，很基本的一个功能导航。</span></p>


<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: Wingdings;" lang="EN-US">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><!--[endif]--><span style="font-family: 宋体;">船舶搜索（一个</span><span lang="EN-US">View</span><span style="font-family: 宋体;">）。提供船舶查询功能。</span></p>


<p class="MsoNormal" style="margin-left: 21pt; text-indent: -21pt;"><!--[if !supportLists]--><span style="font-family: Wingdings;" lang="EN-US">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><!--[endif]--><span style="font-family: 宋体;">船舶维护（一个</span><span lang="EN-US">Editors</span><span style="font-family: 宋体;">）。用于添加和修改船舶信息。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">这里布局部分在</span><span lang="EN-US">createInitialLayout</span><span style="font-family: 宋体;">中完成的。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">这个在前几天的</span><span lang="EN-US">blog</span><span style="font-family: 宋体;">中就可以找到代码。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">不过有一点还是要提一下就是</span><span lang="EN-US">IfolderLayout</span><span style="font-family: 宋体;">中的</span><span lang="EN-US">createFolder</span><span style="font-family: 宋体;">方法中的各个参数。</span></p>


<pre><span lang="EN-US">public void <b>addView</b>(<a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html" title="class or interface in java.lang">String</a></span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span lang="EN-US">viewId,</span></pre>
<pre><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>int</span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span lang="EN-US">relationship,</span></pre>
<pre><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>float</span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span lang="EN-US">ratio,</span></pre>
<pre><span lang="EN-US"><span style="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html" title="class or interface in java.lang">String</a></span><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">&nbsp;</span><span lang="EN-US">refId)</span></pre>


<p class="MsoNormal" style="margin-left: 36pt;"><code><span style="font-size: 10pt; font-family: 黑体;" lang="EN-US">refId</span></code><span lang="EN-US"> -
the id of the reference part; either a view id, a folder id, or the special
editor area id returned by </span><code><span style="font-size: 10pt; font-family: 黑体;" lang="EN-US">getEditorArea<o:p></o:p></span></code></p>


<p class="MsoNormal" style="margin-left: 36pt;"><code><span style="font-size: 10pt; font-family: 黑体;">最后一个参数表示我们添加的那个<span lang="EN-US">View相对于part的id。<o:p></o:p></span></span></code></p>


<code><span style="font-size: 10pt; font-family: 黑体;">如果我的代码是：<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">add&nbsp;navigate&nbsp;view</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFolderLayout&nbsp;left&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.createFolder(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">left</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IPageLayout.LEFT,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.3f</span><span style="color: rgb(0, 0, 0);">,&nbsp;editorArea);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left.addView(View.ID);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">Add&nbsp;Search&nbsp;part</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFolderLayout&nbsp;button&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.createFolder(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">button</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IPageLayout.BOTTOM,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.6f</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">left</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addView(SearchView.ID);<br></span></div>效果会是<br>
<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/shipmanager/left.jpg" alt="left.jpg" border="0" height="370" width="400"><br>
</span></code><span style="font-size: 10.5pt; font-family: 宋体;">如果代码写成<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">Add&nbsp;Search&nbsp;part</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFolderLayout&nbsp;button&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.createFolder(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">button</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IPageLayout.BOTTOM,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.6f</span><span style="color: rgb(0, 0, 0);">,&nbsp;editorArea);<br><br></span></div>效果会成为：<br>
<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/shipmanager/button.jpg" alt="button.jpg" border="0" height="310" width="421"><br>
</span>

<p class="MsoNormal"><span style="font-family: 宋体;">呵呵，大家不要见笑。我刚开始学，这部分的内容。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">还有就是找了一个</span><span lang="EN-US">DatePicker</span><span style="font-family: 宋体;">控件</span></p>


<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US"><a href="http://sourceforge.net/projects/swt-datepicker">http://sourceforge.net/projects/swt-datepicker</a>
</span><span style="font-size: 10.5pt; font-family: 宋体;">这个控件使用起来挺容易的。只要一句话就可以了。<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">DatePickerCombo&nbsp;datePick&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;DatePickerCombo(shell,SWT.BORDER&nbsp;</span><span style="color: rgb(0, 0, 0);">|</span><span style="color: rgb(0, 0, 0);">&nbsp;SWT.READ_ONLY);<br><br></span></div></span><span style="font-size: 10.5pt; font-family: 宋体;">他默认的日期格式是</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">DateFormat.SHORT.</span><span style="font-size: 10.5pt; font-family: 宋体;">如果你不想使用这个日期格式你只要调用一下</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">setFormat</span><span style="font-size: 10.5pt; font-family: 宋体;">方法就好了。<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">datePick.setFormat(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;SimpleDateFormat(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">yyyy-MM-dd</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">));<br><br></span></div></span><span style="font-size: 10.5pt; font-family: 宋体;">呵呵，个人还是比较喜欢</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">"yyyy-MM-dd"</span><span style="font-size: 10.5pt; font-family: 宋体;">。不过我建议不要像我这么写。最好能够在整个项目中统一一个地方来创建</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">SimpleDateFormat</span><span style="font-size: 10.5pt; font-family: 宋体;">。如：<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 0);">comboBuildDate.setFormat(SystemConfig.getDateFormat());<br><br></span></div><br>
<br>
这样，整个项目就可以保证有一个统一的日期格式。更要紧的是如果以后有修改日期格式的需求的时候只要修改一处就好了。<br>
<br>
<br>
<br>
</span>
<span style="font-size: 10.5pt; font-family: 宋体;"></span></div>
</div>
<img src ="http://www.blogjava.net/JetGeng/aggbug/34892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-03-12 09:19 <a href="http://www.blogjava.net/JetGeng/archive/2006/03/12/34892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始学习RCP编程</title><link>http://www.blogjava.net/JetGeng/archive/2006/02/23/32215.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Thu, 23 Feb 2006 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/02/23/32215.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/32215.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/02/23/32215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/32215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/32215.html</trackback:ping><description><![CDATA[
<p class="MsoNormal" align="center"><font size="4"><span style="font-family: 宋体;">开始学习</span><span lang="EN-US">RCP</span><span style="font-family: 宋体;">编程</span></font></p>


<p class="MsoNormal"><span style="font-family: 宋体;">很早很早就听说</span><span lang="EN-US">RCP</span><span style="font-family: 宋体;">了。也很想来玩玩，但是一直没有找到好的点子来练手。不过近段时间有个老朋友要求帮他做个小东西。他现在的需求很简单。我怕他以后有要加什么内容。所以就想用</span><span lang="EN-US">RCP</span><span style="font-family: 宋体;">来做。刚好用他来好好学习一下，要不都不好意思在</span><span lang="EN-US">bbs.rcp.cn</span><span style="font-family: 宋体;">混了。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">找了本书（《</span><span lang="EN-US">Eclipse Rich
Client Platform Designing Coding and Packaging Java Applications</span><span style="font-family: 宋体;">》）按照书中的例子看了起来。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">了解基本的：</span></p>


<p class="MsoNormal"><span lang="EN-US">AbstractUIPlugin</span><span style="font-family: 宋体;">，</span></p>


<p class="MsoNormal"><span lang="EN-US">WorkbenchWindowAdvisor</span><span style="font-family: 宋体;">，</span></p>


<p class="MsoNormal"><span lang="EN-US">WorkbenchAdvisor</span><span style="font-family: 宋体;">，</span></p>


<p class="MsoNormal"><span lang="EN-US">ActionBarAdvisor</span><span style="font-family: 宋体;">，</span></p>


<p class="MsoNormal"><span lang="EN-US">IperspectiveFactory</span><span style="font-family: 宋体;">和</span><span lang="EN-US">ViewPart</span><span style="font-family: 宋体;">几个类。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">收获最大的就是看到</span><span lang="EN-US">yipsilon</span><span style="font-family: 宋体;">在</span><span lang="EN-US">bbs.rcp.cn</span><span style="font-family: 宋体;">中关于布局的帖子。</span><b><span style="font-size: 7.5pt; font-family: Gulim; color: rgb(0, 0, 102);" lang="EN-US"><o:p></o:p></span></b></p>


<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US"><a href="http://www.eclipseworld.org/bbs/read.php?tid=1312&amp;page=e#a">http://www.eclipseworld.org/bbs/read.php?tid=1312&amp;page=e#a</a><br>
<br>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;MGRPerspective&nbsp;</span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);">&nbsp;IPerspectiveFactory&nbsp;{<br><br></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;createInitialLayout(IPageLayout&nbsp;layout)&nbsp;{<br><br>&nbsp;&nbsp;Plugin&nbsp;plugin&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Plugin.getDefault();<br><br>&nbsp;&nbsp;LSEmployee&nbsp;employee&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;plugin.getEmployee();<br><br>&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">只有在用户登陆后才能画界面</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(employee&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;editorArea&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.getEditorArea();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;layout.setEditorAreaVisible(</span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;主要界面</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;IFolderLayout&nbsp;main&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.createFolder(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">main</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IPageLayout.TOP,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.95f</span><span style="color: rgb(0, 0, 0);">,&nbsp;editorArea);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;属性界面</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;IFolderLayout&nbsp;property&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.createFolder(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">property</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IPageLayout.RIGHT,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.75f</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">main</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;字典界面</span><span style="color: rgb(0, 128, 0);"><br></span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;IFolderLayout&nbsp;dictionary&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;layout.createFolder(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">dictionary</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IPageLayout.BOTTOM,&nbsp;</span><span style="color: rgb(0, 0, 0);">0.95f</span><span style="color: rgb(0, 0, 0);">,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">property</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;LSPosition&nbsp;position&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;employee.getPosition();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);">&nbsp;isManager&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;position.getManager().booleanValue();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(isManager)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(EmployeeTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(PositionPropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(EmployeePropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(position.getBuyer().booleanValue()&nbsp;</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">&nbsp;isManager)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(ProviderTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(JHInvoiceTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(ProviderPropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(JHInvoicePropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(position.getKeeper().booleanValue()&nbsp;</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">&nbsp;isManager)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDRepositoryView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(DBInvoiceTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(DBInvoicePropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(position.getSeller().booleanValue()&nbsp;</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">&nbsp;isManager)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(MemberTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(YDInvoiceTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;main.addView(XSInvoiceTableView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(MemberPropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(YDInvoicePropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;property.addView(XSInvoicePropertyView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(position.getMaintainer().booleanValue()&nbsp;</span><span style="color: rgb(0, 0, 0);">||</span><span style="color: rgb(0, 0, 0);">&nbsp;isManager)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDAreaView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDBrandView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDColorView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDCompView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDLevelView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDSizeView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDSortView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;dictionary.addView(DDDescriptionView.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>}<br>}<br>
<br></span></div></span>

<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: 宋体; color: black;">根据这段代码做出如下界面：</span><span style="font-size: 8.5pt; font-family: Verdana; color: black;" lang="EN-US"><o:p></o:p></span></p>

<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/rcp/rcp%20ui.bmp" alt="rcp ui.bmp" border="0" height="402" width="512"><br>
<span style="font-size: 10.5pt; font-family: 宋体;">很简单。大家见笑了。呵呵。<br>
我的代码就不贴了。看</span><span style="font-family: 宋体;"></span><span lang="EN-US">yipsilon的代码就可以搞定布局了。再次感谢</span><span style="font-family: 宋体;"></span><span lang="EN-US">yipsilon。<br>
今天就写到这儿了。争取周末能把ui全部画好。<br>
</span><img src ="http://www.blogjava.net/JetGeng/aggbug/32215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-02-23 23:06 <a href="http://www.blogjava.net/JetGeng/archive/2006/02/23/32215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>定位Eclipse源码</title><link>http://www.blogjava.net/JetGeng/archive/2006/01/22/28970.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sun, 22 Jan 2006 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2006/01/22/28970.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/28970.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2006/01/22/28970.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/28970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/28970.html</trackback:ping><description><![CDATA[<div align="center"><span style="font-size: 10.5pt; font-family: 宋体;">定位</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Eclipse</span><span style="font-size: 10.5pt; font-family: 宋体;">源码<br>
</span>
<div align="left"><span style="font-size: 10.5pt; font-family: 宋体;"></span>

<p class="MsoNormal"><span style="font-family: 宋体;">前两天在网上看到一个需要把</span><span lang="EN-US">outline</span><span style="font-family: 宋体;">最大化的需求。我就想啊这个</span><span lang="EN-US">Ctrl +M</span><span style="font-family: 宋体;">不就的了（呵呵，这个快捷我经常用。快成了条件反射了）。在往下看发现他的需求要求用编程实现。唉这个时候我的</span><span lang="EN-US">Ctrl + M</span><span style="font-family: 宋体;">就用不上了。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">然后我就想</span><span lang="EN-US">tmd</span><span style="font-family: 宋体;">，这个功能既然</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体;">本身已经实现了，那么肯定就回有这样的代码。我需要做的就是把这段代码找出来。好了，确定这个目标就好办了。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">下面就得想办法怎么把这个功能地位到</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体;">源码中了。我现在知道得就只是</span><span lang="EN-US">Ctrl + M</span><span style="font-family: 宋体;">可以唤醒这部分得功能。其他的就什么都不知道了。那我怎么定位到这部分的源码呢。天哪。我该怎么办啊。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">后来理了一理想起来</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体;">中对于快捷键的实现。他们都是通过</span><span lang="EN-US">accelerator</span><span style="font-family: 宋体;">来定义的。而</span><span lang="EN-US">accelerator</span><span style="font-family: 宋体;">后面一般回对应到一个</span><span lang="EN-US">action</span><span style="font-family: 宋体;">。这个</span><span lang="EN-US">action</span><span style="font-family: 宋体;">会真真的来完成这个快捷键所要完成的功能。这样一想，心里有了一点底。那么现在就把目标锁定到找到相应的</span><span lang="EN-US">action</span><span style="font-family: 宋体;">的实现就算完成了。对于找出相应的</span><span lang="EN-US">action</span><span style="font-family: 宋体;">的方法是通过找到</span><span lang="EN-US">Ctrl+M</span><span style="font-family: 宋体;">向对应的</span><span lang="EN-US">accelerator</span><span style="font-family: 宋体;">。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">那么这个</span><span lang="EN-US">action</span><span style="font-family: 宋体;">会在什么地方实现呢。我就打开了</span><span lang="EN-US">Plug-in Registry</span><span style="font-family: 宋体;">视图来随便看看。看看能有什么意外收获。<br>
</span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Command/plug-in.jpg" alt="plug-in.jpg" border="0" height="612" width="501"></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;"><br>
</span><span style="font-size: 10.5pt; font-family: 宋体;">还真巧在发现了有</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">org.eclipse.ui</span><span style="font-size: 10.5pt; font-family: 宋体;">这个插件。再点进去看到他的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Extensions</span><span style="font-size: 10.5pt; font-family: 宋体;">。</span></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: 宋体;"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Command/extends.jpg" alt="extends.jpg" border="0" height="591" width="477"><br>
</span><span style="font-size: 10.5pt; font-family: 宋体;">居然有</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Maximize Active view or
Editor</span><span style="font-size: 10.5pt; font-family: 宋体;">这个扩展点。大胆猜测</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">org.eclipse.ui</span><span style="font-size: 10.5pt; font-family: 宋体;">会提供一个关于“</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Maximize Active View or
Editor</span><span style="font-size: 10.5pt; font-family: 宋体;">”的实现。为了证实我的猜想，我打开了</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">org.eclipse.ui</span><span style="font-size: 10.5pt; font-family: 宋体;">的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">plugin.xml</span><span style="font-size: 10.5pt; font-family: 宋体;">文件。看到有下面这一段。<br>
<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Command/command.jpg" alt="command.jpg" border="0" height="151" width="490"><br>
</span>

</p>

<p class="MsoNormal"><span style="font-family: 宋体;">这一段证实了我的猜想。</span></p>


<span style="font-size: 10.5pt; font-family: 宋体;">下面如果能找到那各类实现了这个</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">command</span><span style="font-size: 10.5pt; font-family: 宋体;">就</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">ok</span><span style="font-size: 10.5pt; font-family: 宋体;">了。找这个就比较容易了。呵呵。只要看看那各类里面有<br>
</span>

<p class="MsoNormal"><span lang="EN-US">setActionDefinitionId("org.eclipse.ui.window.maximizePart");</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">这样的代码就可以搞定了。</span></p>


<span style="font-size: 10.5pt; font-family: 宋体;">最后查得</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">org.eclipse.ui.internal.
MaximizePartAction</span><span style="font-size: 10.5pt; font-family: 宋体;">在他的构造函数你发现了这样的代码。<br>
<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Command/control.jpg" alt="control.jpg" border="0" height="233" width="705"><br>
</span><span style="font-size: 10.5pt; font-family: 宋体;">不用多想了，他肯定是实现了这个使视图最大化的功能了。看了他的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">run</span><span style="font-size: 10.5pt; font-family: 宋体;">函数的内容更加确定就是他了。<br>
<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Command/run.jpg" alt="run.jpg" border="0" height="331" width="713"><br>
</span><span style="font-size: 10.5pt; font-family: 宋体;">而且就是</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">toggleZoom</span><span style="font-size: 10.5pt; font-family: 宋体;">搞定这一切。自己写了测试小测了一下。果然是他。呵呵，这样就完成一次代码定位的过程。爽了一把。离</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Eclipse</span><span style="font-size: 10.5pt; font-family: 宋体;">宝库又近了一点点。</span><br>
<p class="MsoNormal"><br>
</p>


<br>
<span style="font-size: 10.5pt; font-family: 宋体;"></span></div>
</div>
<img src ="http://www.blogjava.net/JetGeng/aggbug/28970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2006-01-22 23:00 <a href="http://www.blogjava.net/JetGeng/archive/2006/01/22/28970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Eclipse3.2中为项目切换Jdk</title><link>http://www.blogjava.net/JetGeng/archive/2005/12/17/24325.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sat, 17 Dec 2005 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2005/12/17/24325.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/24325.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2005/12/17/24325.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/24325.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/24325.html</trackback:ping><description><![CDATA[

<p class="MsoNormal"><span style="font-family: 宋体;">由于开发项目要求</span><span lang="EN-US">jdk</span><span style="font-family: 宋体;">配置比较低，所以</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体;">中的</span><span lang="EN-US">WorkSpace default </span><span style="font-family: 宋体;">的</span><span lang="EN-US">jre</span><span style="font-family: 宋体;">设得比较低。如果自己想测试一下高版本得</span><span lang="EN-US">jdk</span><span style="font-family: 宋体;">内容得话，就需要切换</span><span lang="EN-US">jdk</span><span style="font-family: 宋体;">得配置。</span></p>


<p class="MsoNormal"><span style="font-family: 宋体;">在</span><span lang="EN-US">3.2</span><span style="font-family: 宋体;">中我发现了一个很有方便功能，用来完成这个功能。<br>
</span><span style="font-family: 宋体;">选中项目中的</span><span lang="EN-US">jre,</span><span style="font-family: 宋体;">通过右键带回菜单：</span><br>
</p>


<p class="MsoNormal"><span style="font-family: 宋体;"></span><span style="font-family: 宋体;"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Tips/jrealert1.gif" alt="jrealert1.gif" border="0" height="300" width="400"><br>
</span><span style="font-size: 10.5pt; font-family: 宋体;">选中</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Configure</span><span style="font-size: 10.5pt; font-family: 宋体;">后就会有如下的对话框：<br>
</span></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: 宋体;"><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/Eclipse/Tips/jrealert2.gif" alt="jrealert2.gif" border="0" height="443" width="438"><br>
</span>

</p>
<p class="MsoNormal"><span style="font-family: 宋体;">通过</span><span lang="EN-US">Alernate jar</span><span style="font-family: 宋体;">就可以达到为该项目设定</span><span lang="EN-US">jre</span><span style="font-family: 宋体;">了。</span></p>

这样是不是很爽啊。呵呵。
<p class="MsoNormal"><br>
</p>

<img src ="http://www.blogjava.net/JetGeng/aggbug/24325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2005-12-17 10:23 <a href="http://www.blogjava.net/JetGeng/archive/2005/12/17/24325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RCP学习笔记（一） Viewer合作类的模式</title><link>http://www.blogjava.net/JetGeng/archive/2005/12/11/23319.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sun, 11 Dec 2005 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/JetGeng/archive/2005/12/11/23319.html</guid><wfw:comment>http://www.blogjava.net/JetGeng/comments/23319.html</wfw:comment><comments>http://www.blogjava.net/JetGeng/archive/2005/12/11/23319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JetGeng/comments/commentRss/23319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JetGeng/services/trackbacks/23319.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span lang="EN-US">&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;  RCP学习笔记（一） Viewer合作类的模式<br></span></p><p class="MsoNormal"><span lang="EN-US">Viewer</span><span style="font-family: 宋体;">是逻辑对象（或叫做领域模型）和显示对象之间的一个桥梁。他的主要的任务就是根据逻辑对象来填充窗体组件。一般需要三个类来完成</span><span lang="EN-US">Business Object </span><span style="font-family: 宋体;">在窗体组件中的显示。我们这里同过使用</span><span lang="EN-US">TableView</span><span style="font-family: 宋体;">来演示这部分的功能。</span></p>

<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableViewer</span><span style="font-size: 10.5pt; font-family: 宋体;">的责任是用特定的对象填充到</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Table</span><span style="font-size: 10.5pt; font-family: 宋体;">窗体组件中。是我们最终在窗体要看到的对象。如下图所示的一部分：<br><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/tableviewer.gif" alt="tableviewer.gif" border="0" height="400" width="500"><br></span>

<p class="MsoNormal"><span style="font-family: 宋体;">而</span><span lang="EN-US">IStructuredContentProvider</span><span style="font-family: 宋体;">和</span><span lang="EN-US">ITableLabelProvider</span><span style="font-family: 宋体;">的实现类是用来帮助</span><span lang="EN-US">TableViewer</span><span style="font-family: 宋体;">来完成这个任务的。</span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US">1、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span><!--[endif]--><span lang="EN-US">IStructuredContentProvider</span><span style="font-family: 宋体;">的任务是“根据给定的对象，返回一个对应的领域对象”</span><sup><span lang="EN-US">1</span></sup><span style="font-family: 宋体;">。是通过：</span><span lang="EN-US">public Object[] getElements(Object arg0)<sup>2</sup></span><span style="font-family: 宋体;">方法实现的。</span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US">2、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span><!--[endif]--><span lang="EN-US">ITableLabelProvider </span><span style="font-family: 宋体;">的任务是“返回展现领域对象的所需的图标和文字”。这两个任务分别是通过</span><span lang="EN-US">public Image getColumnImage(Object element, int columnIndex);</span><span style="font-family: 宋体;">和</span></p>

<p class="MsoNormal" style="margin-left: 18pt;"><span lang="EN-US">public String
getColumnText(Object element, int columnIndex);</span><span style="font-family: 宋体;">这两个方法实现的。他们的传入参数都是：</span><span lang="EN-US">Object element, int columnIndex</span><span style="font-family: 宋体;">。</span><span lang="EN-US">Element</span><span style="font-family: 宋体;">表示当前行所要展现的数据对象，</span><span lang="EN-US">columnIndex</span><span style="font-family: 宋体;">表示的当前处理的列号，他是从零开始记的。</span></p>

<span style="font-size: 10.5pt; font-family: 宋体;">知道了他们之间分配的职能后，我们就可以看看他们是怎么协作的了。在</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableView</span><span style="font-size: 10.5pt; font-family: 宋体;">的需要显示的输入对象改变了（调用了</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">setInput</span><span style="font-size: 10.5pt; font-family: 宋体;">方法可以触发待显示领域对象的改变），这就会触发</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableView</span><span style="font-size: 10.5pt; font-family: 宋体;">的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">InputChange</span><span style="font-size: 10.5pt; font-family: 宋体;">事件，这时候</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableView</span><span style="font-size: 10.5pt; font-family: 宋体;">就会去调用他本身的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">refresh<sup>3</sup></span><span style="font-size: 10.5pt; font-family: 宋体;">方法。最终会在</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">getRawChildren</span><span style="font-size: 10.5pt; font-family: 宋体;">方法中调用</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">IStructuredContentProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">实现类中的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">getElements</span><span style="font-size: 10.5pt; font-family: 宋体;">方法或的一个</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Object[]</span><span style="font-size: 10.5pt; font-family: 宋体;">。供以后创建</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Item</span><span style="font-size: 10.5pt; font-family: 宋体;">时使用。整个调用过程可以用下面的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">strack</span><span style="font-size: 10.5pt; font-family: 宋体;">图来表示：<br><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/gettreetrack.gif" alt="gettreetrack.gif" border="0" height="337" width="542"><br></span><span style="font-size: 10.5pt; font-family: 宋体;">通过调用</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">IStructuredContentProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">获的了一个对象数组后，就会根据对象数组来创建显示的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Item</span><span style="font-size: 10.5pt; font-family: 宋体;">。我们可以先看一下</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">ITableLabelProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">（</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableLabelProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">是</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">ITableLabelProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">的一个实现类）。<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/createItem.gif" alt="createItem.gif" border="0" height="398" width="550"><br></span>

<p class="MsoNormal"><span style="font-family: 宋体;">在更新</span><span lang="EN-US">Item</span><span style="font-family: 宋体;">的时候提供每个</span><span lang="EN-US">TableView</span><span style="font-family: 宋体;">需要的</span><span lang="EN-US">Text</span><span style="font-family: 宋体;">和</span><span lang="EN-US">Image</span><span style="font-family: 宋体;">就好了。他们最终在</span><span lang="EN-US">TableViewer</span><span style="font-family: 宋体;">的</span><span lang="EN-US">doUpdateItem</span><span style="font-family: 宋体;">方法中调用</span><span lang="EN-US">ITableLabelProvider</span><span style="font-family: 宋体;">的</span><span lang="EN-US">getColumnText</span><span style="font-family: 宋体;">和</span><span lang="EN-US">getColumnImage</span><span style="font-family: 宋体;">方法。</span></p>

<p class="MsoNormal"><span lang="EN-US"><!--[if !supportEmptyParas]-->&nbsp;<!--[endif]--><o:p></o:p></span></p>

<span style="font-size: 10.5pt; font-family: 宋体;">要实现一个在</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableView</span><span style="font-size: 10.5pt; font-family: 宋体;">中显示特定对象只需要实现</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">IStructuredContentProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">实现类的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">getElements</span><span style="font-size: 10.5pt; font-family: 宋体;">方法。和</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">ITableLabelProvider</span><span style="font-size: 10.5pt; font-family: 宋体;">的</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">getColumnText</span><span style="font-size: 10.5pt; font-family: 宋体;">方法。</span>

<p class="MsoNormal"><span style="font-family: 宋体;">下面是我示例中的代码：</span></p>

<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableLabelPrivate</span><span style="font-size: 10.5pt; font-family: 宋体;">：<img src="http://www.blogjava.net/images/blogjava_net/jetgeng/tablelable.gif" alt="tablelable.gif" border="0" height="359" width="895"></span><br><span style="font-size: 10.5pt; font-family: 宋体;"><br></span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">TableContentPrivate</span><span style="font-size: 10.5pt; font-family: 宋体;">：<br><img src="http://www.blogjava.net/images/blogjava_net/jetgeng/contentprivate.gif" alt="contentprivate.gif" border="0" height="289" width="849"><br><br><br><br><br></span>

<p class="MsoNormal"><span lang="EN-US">Viewer</span><span style="font-family: 宋体;">也都是采用</span><span lang="EN-US">ContentProvide</span><span style="font-family: 宋体;">和</span><span lang="EN-US">LabelProvide</span><span style="font-family: 宋体;">的协作方式来工作。</span></p>

<p class="MsoNormal"><span style="font-family: 宋体;">其他的</span></p>

<p class="MsoNormal"><span style="font-family: 宋体;">参考文献：</span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US">1、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span><!--[endif]--><span lang="EN-US">Contributing to Eclipse </span><span style="font-family: 宋体;">中文版</span><span lang="EN-US"> Page 290</span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US">2、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span><!--[endif]--><span lang="EN-US">org.eclipse.jface.viewers. IStructuredContentProvider.java</span></p>

<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--[if !supportLists]--><span lang="EN-US">3、<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp; </span></span><!--[endif]--><span style="font-family: 宋体;">这个方法继承自</span><span lang="EN-US">StructuredViewer</span><span style="font-family: 宋体;">。可参考</span><span lang="EN-US">StructuredViewer.java</span></p>

<br><br><img src ="http://www.blogjava.net/JetGeng/aggbug/23319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JetGeng/" target="_blank">Jet Geng</a> 2005-12-11 11:24 <a href="http://www.blogjava.net/JetGeng/archive/2005/12/11/23319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>