<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Eclipse PlugIns&RCP&OSGI</title>
    <description>讨论Eclipse架构, PlugIn开发, RCP, OSGI模型等</description>
    <link>http://EclipseRCPForum.group.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>【转】Eclipse CVS _ HOW TO</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/210447" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/210447</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1 class="firstHeading">CVS Howto</h1>
<div id="bodyContent">
<h3 id="siteSub">From Eclipsepedia</h3>
<div id="jump-to-nav">Jump to: <a href="#column-one">navigation</a>
, <a href="#searchInput">search</a>
</div>
<!--  start content -->
<p>There are several ways to get the source for the Eclipse projects. Most 
developers are actually developing their own plug-ins and are interested in 
browsing the Eclipse source and using it during debugging. For this, you can 
either browse the <a href="http://dev.eclipse.org/viewcvs/" title="http://dev.eclipse.org/viewcvs/" class="external text" rel="nofollow">CVS repository online</a>
 or 
use the source included in the Eclipse Classic download featured on the <a href="http://www.eclipse.org/downloads" title="http://www.eclipse.org/downloads" class="external text" rel="nofollow">Eclipse downloads page</a>
. 
The download contains source zips which can be attached to jars in the SDK's 
Java tooling and used for browsing and debugging. </p>
<p>&nbsp;</p>
<table class="toc" border="0" id="toc" summary="Contents">
<tbody>
<tr>
<td>
<div id="toctitle">
<h2>Contents</h2>
<span class="toctoggle">[<a href="javascript:toggleToc()" class="internal" id="togglelink">hide</a>
]</span>
</div>
<ul>
<li class="toclevel-1"><a href="#Anonymous_CVS"><span class="tocnumber">1</span>
 
<span class="toctext">Anonymous CVS</span>
</a>
 
</li>
<li class="toclevel-1"><a href="#Committer_access_to_CVS"><span class="tocnumber">2</span>
 <span class="toctext">Committer access to CVS</span>
</a>
 
</li>
<li class="toclevel-1"><a href="#CVS_Repository_Paths"><span class="tocnumber">3</span>
 <span class="toctext">CVS Repository Paths</span>
</a>
 
</li>
<li class="toclevel-1"><a href="#Using_Eclipse_and_CVS"><span class="tocnumber">4</span>
 <span class="toctext">Using Eclipse and CVS</span>
</a>
 
</li>
<li class="toclevel-1"><a href="#Other_CVS_Clients"><span class="tocnumber">5</span>
 
<span class="toctext">Other CVS Clients</span>
</a>
 
</li>
<li class="toclevel-1"><a href="#CVS_and_firewalls"><span class="tocnumber">6</span>
 
<span class="toctext">CVS and firewalls</span>
</a>
 
<ul>
<li class="toclevel-2"><a href="#Anonymous_CVS_Setup_using_a_Firewall"><span class="tocnumber">6.1</span>
 <span class="toctext">Anonymous CVS Setup using a 
Firewall</span>
</a>
 
</li>
<li class="toclevel-2"><a href="#extssh_CVS_Setup_using_a_Firewall"><span class="tocnumber">6.2</span>
 <span class="toctext">extssh CVS Setup using a 
Firewall</span>
</a>
 </li>
</ul>
</li>
<li class="toclevel-1"><a href="#CVS_tarball_snapshots"><span class="tocnumber">7</span>
 <span class="toctext">CVS tarball snapshots</span>
</a>
 
</li>
<li class="toclevel-1"><a href="#See_also"><span class="tocnumber">8</span>
 <span class="toctext">See also</span>
</a>
 </li>
</ul>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript"> if (window.showTocToggle) { var tocShowText = &quot;show&quot;; var tocHideText = &quot;hide&quot;; showTocToggle(); } </script>
<a name="Anonymous_CVS"></a>
<h2><span class="mw-headline">Anonymous CVS </span>
</h2>
<p>For people actually want to change Eclipse code but who do not have the 
required commit rights in that area, all elements of the Eclipse projects are 
available via anonymous access to the development CVS repository. Using 
anonymous access you can checkout code and modify it locally, but cannot write 
it back to the repository. This is handy if you would like to fix a bug or add a 
feature. Get the code via anonymous access, do your work and then pass the work 
on to a committer (in a patch attached to a bug report) for inclusion in the 
repository. Committers love to have bugs fixed for them! </p>
<p>To use anonymous access from a running Eclipse platform, simply go to a 
Repository View and add a new CVS repository location. Use the following 
information to connect: </p>
<table border="0" cellpadding="2" style="width: 60%;">
<caption>Anonymous CVS Connection Information </caption>

<tbody>
<tr>
<td><strong>Host</strong>
 </td>
<td>dev.eclipse.org </td>
</tr>
<tr>
<td><strong>Repository Paths</strong>
 </td>
<td>(See &quot;Repository paths&quot;, below) </td>
</tr>
<tr>
<td><strong>User</strong>
 </td>
<td>anonymous </td>
</tr>
<tr>
<td><strong>Password</strong>
 </td>
<td>(leave blank) </td>
</tr>
<tr>
<td><strong>Connection Type</strong>
 </td>
<td>pserver </td>
</tr>
</tbody>
</table>
<p>From there you can browse the repository and add projects to your workspace. 
If you do some changes that you'd like to contribute, rather than committing the 
changes to the repository (which you can't do as the anonymous user), you should 
save a diff file and either mail it to a committer or post it on the relevant 
mailing list. Note that large files cannnot be posted to the mailing lists. </p>
<p>Note that the pserver protocol is only available to the anonymous user. All 
committers must use SSH to access the CVS repository if they wish to use their 
user id and password (i.e., if they want to write to the repository). </p>
<p>The repository is also made available for browsing at <a href="http://dev.eclipse.org/viewcvs/" title="http://dev.eclipse.org/viewcvs/" class="external free" rel="nofollow">http://dev.eclipse.org/viewcvs/</a>
. </p>
<a name="Committer_access_to_CVS"></a>
<h2><span class="mw-headline">Committer access to CVS </span>
</h2>
<p>Developers with commit rights have individual user ids and passwords in the 
Eclipse project development repository. As a committer you can use SSH (Secure 
SHell) to connect to the CVS repository as follows. Go to a Repository View and 
add a new CVS repository location. When asked for the repository location enter 
the following: </p>
<table border="0" cellpadding="2" style="width: 60%;">
<caption>Committer CVS Connection Information </caption>

<tbody>
<tr>
<td><strong>Host</strong>
 </td>
<td>dev.eclipse.org </td>
</tr>
<tr>
<td><strong>Repository Paths</strong>
 </td>
<td>(See &quot;Repository paths&quot;, below) </td>
</tr>
<tr>
<td><strong>User</strong>
 </td>
<td>(your committer user id, supplied by the webmaster) </td>
</tr>
<tr>
<td><strong>Password</strong>
 </td>
<td>(your committer password) </td>
</tr>
<tr>
<td><strong>Connection Type</strong>
 </td>
<td>extssh </td>
</tr>
</tbody>
</table>
<p>Once your information is authenticated, you can browse the repository and add 
projects to your workspace. If you do some changes that you'd like to 
contribute, after testing and ensuring that you have followed the contribution 
guidelines, you are free to release your changes to the repository. Of course, 
you can only release changes to projects for which you have commit rights. </p>
<p>Note that you can use the SSH protocol and your Eclipse user id to access 
projects for which you are not a committer but you will not be able to release 
changes. </p>
<p>&nbsp;</p>
<a name="CVS_Repository_Paths"></a>
<h2><span class="mw-headline">CVS Repository Paths </span>
</h2>
<p>Use the following repository paths to connect to the Eclipse projects: </p>
<table border="0" cellpadding="2" style="width: 60%;">
<tbody>
<tr>
<td><strong>/cvsroot/eclipse</strong>
 </td>
<td>The Eclipse platform project </td>
</tr>
<tr>
<td><strong>/cvsroot/tools</strong>
 </td>
<td>Tools project </td>
</tr>
<tr>
<td><strong>/cvsroot/webtools</strong>
 </td>
<td>Web Tools Platform project </td>
</tr>
<tr>
<td><strong>/cvsroot/birt</strong>
 </td>
<td>BIRT project </td>
</tr>
<tr>
<td><strong>/cvsroot/technology</strong>
 </td>
<td>Technology project </td>
</tr>
<tr>
<td><strong>/cvsroot/rt</strong>
 </td>
<td>Runtime project </td>
</tr>
<tr>
<td><strong>/cvsroot/tptp</strong>
 </td>
<td>TPTP project </td>
</tr>
<tr>
<td><strong>/cvsroot/dsdp</strong>
 </td>
<td>DSDP project </td>
</tr>
<tr>
<td><strong>/cvsroot/datatools</strong>
 </td>
<td>Data Tools project </td>
</tr>
<tr>
<td><strong>/cvsroot/stp</strong>
 </td>
<td>STP SOA tools project </td>
</tr>
<tr>
<td><strong>/cvsroot/modeling</strong>
 </td>
<td>Modeling project </td>
</tr>
</tbody>
</table>
<p>Other repository paths: </p>
<table border="0" cellpadding="2" style="width: 60%;">
<tbody>
<tr>
<td><strong>/cvsroot/org.eclipse</strong>
 </td>
<td>eclipse.org web sites </td>
</tr>
</tbody>
</table>
<a name="Using_Eclipse_and_CVS"></a>
<h2><span class="mw-headline">Using Eclipse and CVS </span>
</h2>
<p>In general, each Eclipse plug-in corresponds to a CVS module of the same name 
in the repository. These modules are further grouped using CVS module aliases. A 
module alias is a virtual module which stands in for several other modules. In 
the Eclipse repository, each component has a module alias which references the 
plug-in projects/modules which are part of the component. For example, the 
Platform's Core component has an alias called platform-core which references all 
of the Core's plug-in projects/modules (e.g., org.eclipse.core.runtime, 
org.eclipse.core.resourses,...). There are also module aliases for each 
component's tests and examples. The module aliases have been elided if there is 
nothing to reference (e.g, if there are no examples). The CVS support in Eclipse 
supports loading and filtering using these module aliases. </p>
<p>Most open source CVS repositories do not enable the history file mechanism 
for recording repository operations since it is too costly. As a result, users 
must explicitly know and state the CVS tags they wish to use when looking at the 
repository. Eclipse manifests CVS tags in two ways; as version labels and as 
stream (CVS branch) labels. Rather than having to remember and manually enter 
these values, Eclipse can discover them for you. </p>
<p>Users can choose a specific file in the repository and then ask Eclipse to 
add all of the version or stream labels on that file to the repository 
explorer's view. Users can then select a stream or version and navigate to other 
resources which are simiarly tagged. </p>
<p>The auto-discovery mechanism can be costly in some situations so Eclipse also 
supports the explicit declaration of version and stream (CVS branch) tags. Again 
using the repository explorer users can define a project version label or a 
stream name (both of which correspond to CVS tags). The repository explorer will 
then use these as the context in which to browse the repository. </p>
<p>For more details on these mechanisms, please see the online help 
documentation included in the Eclipse SDK. </p>
<p>&nbsp;</p>
<a name="Other_CVS_Clients"></a>
<h2><span class="mw-headline">Other CVS Clients </span>
</h2>
<p>The Eclipse CVS repository is a standard CVS implementation. As such, you can 
use just about any CVS client to read/write resources from/to the repository. 
There are however a number of files maintained in the workspace which contain 
Eclipse metadata (e.g., project definitions, Java classpath information). These 
files are written locally by Eclipse tools and then persisted in the the CVS 
repository. If you are using third party CVS clients, these resources may get 
out of date or inconsistent. </p>
<p>A checkout of a CVS repository created by Eclipse with the <tt>extssh</tt>
 
protocol is, however, in nonstandard format. Not all CVS clients understand the 
reference to the <tt>extssh</tt>
 protocol in the <tt>CVS/Root</tt>
 files. In 
particular, the <a href="http://www.nongnu.org/cvs/" title="http://www.nongnu.org/cvs/" class="external text" rel="nofollow">Unix CVS client</a>
 (<a href="http://ftp.gnu.org/non-gnu/cvs/" title="http://ftp.gnu.org/non-gnu/cvs/" class="external text" rel="nofollow">download</a>
), in its 
versions 1.11.22 and 1.12.13, gives an error message <tt>Unknown method 
(`extssh') in CVSROOT.</tt>
 This is a problem for you if you want to monitor and 
update a checkout with both Eclipse and the command-line <tt>cvs</tt>
 program. 
To get a version of <tt>cvs</tt>
 that supports the <tt>extssh</tt>
 protocol 
notation, you need this <a href="http://lists.gnu.org/archive/html/bug-cvs/2005-11/msg00058.html" title="http://lists.gnu.org/archive/html/bug-cvs/2005-11/msg00058.html" class="external text" rel="nofollow">patch for the 1.11.x series</a>
 or this <a href="http://lists.gnu.org/archive/html/bug-cvs/2008-01/msg00007.html" title="http://lists.gnu.org/archive/html/bug-cvs/2008-01/msg00007.html" class="external text" rel="nofollow">patch for the 1.12.x series</a>
 or the newest sources from the 
<tt>cvs</tt>
 CVS. Alternatively, you can use distinct checkouts: one for use 
with Eclipse, and one for use with the command-line tool. </p>
<a name="CVS_and_firewalls"></a>
<h2><span class="mw-headline">CVS and firewalls </span>
</h2>
<p>Since some developers are behind firewalls which block access to hosts on tcp 
port 22 (ssh) or cvs pserver (2401), eclipse.org provides a redirection host 
which may be used in some cases to work around these restrictions. This host may 
be used if your firewall passes traffic on ports 80 or 443. This host cannot be 
used if you are behind a transparent proxy. </p>
<p>Host access may be tested in the following manner, by using a command prompt 
(Start/Run/CMD on Windows) </p>
<p>For committer extssh access: </p>
<pre>   telnet proxy.eclipse.org 443 
</pre>
<p><br />
For anonymous CVS services: </p>
<pre>   telnet proxy.eclipse.org 80  
</pre>
<p><br />
A successful connection will look similar to the following; any 
connection log that shows a mangled response or doesn't allow a connection would 
be considered a failure: </p>
<p>&nbsp;</p>
<pre>   bash-3.00$ telnet proxy.eclipse.org 80
   Trying 206.191.52.48...
   Connected to proxy.eclipse.org.
   Escape character is '^]'.
</pre>
<p>&nbsp;</p>
<a name="Anonymous_CVS_Setup_using_a_Firewall"></a>
<h3><span class="mw-headline">Anonymous CVS Setup using a Firewall </span>
</h3>
<p><a href="/Image:CVS_pserver_proxy_connection.jpg" title="Image:CVS_pserver_proxy_connection.jpg" class="image"><img src="/images/1/12/CVS_pserver_proxy_connection.jpg" border="0" height="588" alt="Image:CVS_pserver_proxy_connection.jpg" width="453" />
</a>
 </p>
<p>&nbsp;</p>
<a name="extssh_CVS_Setup_using_a_Firewall"></a>
<h3><span class="mw-headline">extssh CVS Setup using a Firewall </span>
</h3>
<p><a href="/Image:CVS_extssh_proxy_connection1.jpg" title="Image:CVS_extssh_proxy_connection1.jpg" class="image"><img src="/images/d/d0/CVS_extssh_proxy_connection1.jpg" border="0" height="588" alt="Image:CVS_extssh_proxy_connection1.jpg" width="453" />
</a>
 </p>
<p>&nbsp;</p>
<a name="CVS_tarball_snapshots"></a>
<h2><span class="mw-headline">CVS tarball snapshots </span>
</h2>
<p>We now provide weekly snapshots of the entire CVS repositories. These 
tarballed files are the raw RCS-encoded files (,v), intended for those who need 
the entire CVS repository. If you're only looking for the latest source, or a 
specific version, <strong>THIS IS NOT WHAT YOU WANT</strong>
. Connect to our pserver CVS 
server (above) instead. </p>
<p>The snapshots are available on our <a href="http://archive.eclipse.org/arch/" title="http://archive.eclipse.org/arch/" class="external text" rel="nofollow">archives site</a>
. </p>
<p>&nbsp;</p>
<a name="See_also"></a>
<h2><span class="mw-headline">See also </span>
</h2>
<ul>
<li><a href="/SVN_Howto" title="SVN Howto">SVN Howto</a>
 </li>
</ul>
<!--  Saved in parser cache with key wikidb:pcache:idhash:1460-0!1!0!!en!2!edit=0 and timestamp 20080701183523 -->
<div class="printfooter">Retrieved from &quot;<a href="http://wiki.eclipse.org/CVS_Howto">http://wiki.eclipse.org/CVS_Howto</a>
&quot;</div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/210447#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 11:12:31 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/210447</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/210447</guid>
      </item>
      <item>
        <title>RAP[2] RAP应用的Session问题</title>
        <author>lggege</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lggege.javaeye.com">lggege</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/209023" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/209023</a>&nbsp;
          发表时间: 2008年06月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          由于RAP是服务器端的应用，在这点上与一般的WEB应用没有什么区别。所以，RAP应用也需要解决Session问题。<br /><br />[1]. 传统的单件模式<br /><pre name="code" class="java">public class UserSession {
	private Integer number = 0;
	private static UserSession instance = new UserSession();
	public static getInstance() {
		return instance ;
	}
	public Integer getNumber() {
		this.number++; // 取一次值，就++
		return this.number;
	}
}</pre><br />开着多个IE测试，你将会发现，多个IE任一调用getNumber(),那么，这个值会一直加。这说明普通的单件模式在RAP上要小心应用。<br /><br /><br />还好RAP提供了一个很简单的解决方案。就是：SessionSingletonBase.<br /><br />SessionSingletonBase是抽象类，需要自定义的Session类去继承它。它的子类能提供针对一个user 上下文的唯一实体，也就是在一个user context中调用getInstance(Class)将会一直得到同一个对象实体，但对于不同user的context却会得到不同的对象实体。<br /><br />[1]. 定义具体的Session类<br /><pre name="code" class="java">public class UserSession extends SessionSingletonBase {
	private Integer number = 0; // 只是一个简单的针对单个用户的计数器

        // User currentUser;  你需要的也许是这样有意义的属性
        // Date loginTime;	

	private UserSession() { }

	public static UserSession getInstance() {
		return (UserSession) SessionSingletonBase.getInstance(UserSession.class);
	}
	
	public Integer getNumber() {
		this.number++; // 取一次值，就++. 当然，你也可以改成一个setNumber方法。
		return this.number;
	}
}</pre><br /><br />请注意中间的这段代码，这就是关键.SessionSingletonBase.getInstance(UserSession.class)如果值存在就一直返回这个，如果不存在将会new一个UserSession返回。<br /><pre name="code" class="java">public static UserSession getInstance() {
	return (UserSession) SessionSingletonBase.getInstance(UserSession.class);
}</pre><br /><br />[2]. 自定义Session类的使用<br />// 拿值<br />UserSession.getInstance().getNumber();<br /><br />好了，你可以开多个IE去测试，看看，每个UserSession的number是否只与单个IE相关联。<br /><br /><br />###################<br /><a href="http://lggege.javaeye.com/blog/207286" target="_blank">RAP[1]RAP环境的安装</a>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/209023#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 28 Jun 2008 22:42:27 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/209023</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/209023</guid>
      </item>
      <item>
        <title>RAP[1] RAP开发环境的安装</title>
        <author>lggege</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lggege.javaeye.com">lggege</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/207286" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/207286</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我的环境：<br />jdk1.5.0_11<br />eclipse-jee-ganymede-RC5 eclipse4.0<br /><br />官网下载：<br />rap-sdk-1.1.0-RC4-site-20080613-1119.zip<br />rap-1.1.0-RC4-target-3.4-20080613-1055.zip<br /><br />当然，记得要下载和你的Eclipse匹配的SDK和Target。<br /><br /><span style="color: red"><strong>1.安装Rap SDK</strong></span><br />rap-sdk-1.1.0-RC4-site-20080613-1119.zip解压。<br />Help->SoftWare Update->Available Software->Add Site->Local<br />指向rap-sdk-1.1.0-RC4-site-20080613-1119.zip的解压目录，确认后，Eclipse自动安装Rap SDK。<br /><img src="http://lggege.javaeye.com/upload/picture/pic/16517/0952f091-e19a-3a02-840e-98e19b13d767.jpg " /><br /><br /><br /><span style="color: red"><strong>2. 设置Target Platform</strong></span><br />解压rap-1.1.0-RC4-target-3.4-20080613-1055.zip。<br />Window->Preference->Plug-in Development->Target Platform<br />设置Location为rap-1.1.0-RC4-target-3.4-20080613-1055.zip的解压目录。点击Apply->OK<br /><img src="http://lggege.javaeye.com/upload/picture/pic/16519/fc6171c2-4b42-343f-b505-0fce9a8a8403.jpg " /><br /><br /><br /><span style="color: red"><strong>3.创建RAP项目</strong></span><br />新建一个Plug-in Project<br /><img src="http://lggege.javaeye.com/upload/picture/pic/16521/a4bc9d65-21ef-38a4-9494-cf430bc30ad8.jpg" /><br /><br />在Rich Client Applicent<br />Would you like to create a rich client application ? 要选择No<br /><img src="http://lggege.javaeye.com/upload/picture/pic/16523/9f772801-475c-30e9-9585-5f9078956faf.jpg " /><br /><br />Next后，在Available Tamplates列表内，就可以看到RAP Application With a View和RAP Hello World和RAP Mail Template了。<br />[img]Next后，<br />在Available Tamplates列表内，就可以看到RAP Application With a View<br />和RAP Hello World<br />和RAP Mail Template<br />了。[/img]<br /><br /><br /><span style="color: red"><strong>4.运行</strong></span><br />在.lunch文件上ＲＵＮ　ＡＳ<br /><img src="http://lggege.javaeye.com/upload/picture/pic/16527/2a6e2c48-6971-3b03-b981-f8d9cfb1a257.jpg " /><br /><br />好了，看到效果了<br /><img src="http://lggege.javaeye.com/upload/picture/pic/16529/bdf98d90-a70a-3cb5-a340-f524ce9ee1d9.jpg " /><br /><br /><br />################################################<br /><a href="http://lggege.javaeye.com/blog/209023" target="_blank">RAP[二] RAP的Session问题</a>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/207286#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 00:37:13 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/207286</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/207286</guid>
      </item>
      <item>
        <title>Java传值还是传引用终极解释，还是看老外解释的清楚啊。</title>
        <author>sunway</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sunway.javaeye.com">sunway</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/202512" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/202512</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>by http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html <br /><br /><span style="font-size: x-large;">Does Java pass by reference or pass by value?</span> <br /><span style="font-size: large;">Why can't you swap in Java?</span> <br />By Tony Sintes, JavaWorld.com, 05/26/00 <br /><span style="font-size: large;">Q:If Java uses the pass-by reference, why won't a swap function work?</span> <br /><span style="font-size: large;">A</span>:Your question demonstrates a common error made by Java language newcomers. Indeed, even seasoned veterans find it difficult to keep the terms straight. <br /><br />Java does manipulate objects by reference, and all object variables are references. However, Java doesn't pass method arguments by reference; it passes them by value. <br /><br />Take the badSwap() method for example:</p>
<pre name="code" class="java"> public void badSwap(int var1, int var2)
{
  int temp = var1;
  var1 = var2;
  var2 = temp;
}</pre>
<p>&nbsp;</p>
<p>When badSwap() returns, the variables passed as arguments will still hold their original values. The method will also fail if we change the arguments type from int to Object, since Java passes object references by value as well. Now, here is where it gets tricky: </p>
<pre name="code" class="java"> public void tricky(Point arg1, Point arg2)
{
  arg1.x = 100;
  arg1.y = 100;
  Point temp = arg1;
  arg1 = arg2;
  arg2 = temp;
}
public static void main(String [] args)
{
  Point pnt1 = new Point(0,0);
  Point pnt2 = new Point(0,0);
  System.out.println("X: " + pnt1.x + " Y: " +pnt1.y); 
  System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);
  System.out.println(" ");
  tricky(pnt1,pnt2);
  System.out.println("X: " + pnt1.x + " Y:" + pnt1.y); 
  System.out.println("X: " + pnt2.x + " Y: " +pnt2.y);  
}

                   </pre>
<p>&nbsp;If we execute this main() method, we see the following output: </p>
<pre name="code" class="java"> X: 0 Y: 0
X: 0 Y: 0
X: 100 Y: 100
X: 0 Y: 0</pre>
<p>&nbsp;The method successfully alters the value of pnt1, even though it is passed by value; however, a swap of pnt1 and pnt2 fails! This is the major source of confusion. In the main() method, pnt1 and pnt2 are nothing more than object references. When you pass pnt1 and pnt2 to the tricky() method, Java passes the references by value just like any other parameter. This means the references passed to the method are actually copies of the original references. Figure 1 below shows two references pointing to the same object after Java passes an object to a method. <br /><img src="http://www.javaworld.com/javaworld/javaqa/2000-05/images/03-qa-0512-pass1.gif" height="120" alt="Figure 1. After being passed to a method, an object will have at least two references" style="vertical-align: bottom;" width="201" />&nbsp;</p>
<p><strong><span style="font-size: x-small;">Figure 1. After being passed to a method, an object will have at least two references</span></strong></p>
<p>&nbsp;</p>
<p>Java copies and passes the reference by value, not the object. Thus, method manipulation will alter the objects, since the references point to the original objects. But since the references are copies, swaps will fail. As Figure 2 illustrates, the method references swap, but not the original references. Unfortunately, after a method call, you are left with only the unswapped original references. For a swap to succeed outside of the method call, we need to swap the original references, not the copies. <br /><img src="http://www.javaworld.com/javaworld/javaqa/2000-05/images/03-qa-0512-pass2b.gif" height="409" alt="" width="323" /></p>
<p><span style="font-size: x-small;"><strong>Figure 2. Only the method references are swapped, not the original ones</strong></span></p>
<p>Author Bio</p>
<p>Tony Sintes is a principal consultant at BroadVision. Tony, a Sun-certified Java 1.1 programmer and Java 2 developer, has worked with Java since 1997.<strong><span style="font-size: small;">O'Reilly's Java in a Nutshell by David Flanagan (see Resources) puts it best: "Java manipulates objects 'by reference,' but it passes object references to methods 'by value.'" As a result, you cannot write a standard swap method to swap objects. </span></strong></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/202512#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 15:39:10 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/202512</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/202512</guid>
      </item>
      <item>
        <title>Object *** is not contained in a resource.</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/202241" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/202241</a>&nbsp;
          发表时间: 2008年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3> <span class="mw-headline">I get a DanglingHREFException: e.g.,
&quot;org.eclipse.emf.ecore.xmi.DanglingHREFException: The object
'com.example.Foo@2f5dda ()' is not contained in a resource.&quot; What do I
need to do?</span>
</h3>
<p>All objects need to be contained by a resource in order to be
serialized. That implies that for EObject x to be serialized, it must
be the case that x.eResource()&nbsp;!= null. The resource will be non-null
if either x is directly contained by a resource, i.e., if for Resource
r, r.getContents().contains(x), or if x has a container that in turn is
contained by a resource, i.e., if for Resource r,
r.getContents().contains(x.eContainer()). This definition is recursive.
So an object must be contained by a resource directly, or indirectly by
virtue of being part of a containment reference where, recursively, the
container too must be contained by a resource.
</p>
<p>So if you get the above exception, that means you have some
object x contained by a resource r that refers to another object y,
that is not directly or indirectly contained by any resource. It's
possible to make the EReference feature used by x to refer to y be
transient, so that it's not saved at all, or to make it a containment
reference, so that y is contained by the same resource as x, but
barring changes to the Ecore model itself, the one and only way to
solve this problem is to add y to some resource, i.e.,
r.getContents().add(y), or to add/set it to some containment reference
of an object z, i.e., z.getYs().add(y), where z is already contained by
a resource, i.e., z.eResource()&nbsp;!= null</p>
<p>&nbsp;</p>
<p>转自：http://wiki.eclipse.org/index.php/EMF-FAQ#I_get_a_DanglingHREFException:_e.g..2C_.22org.eclipse.emf.ecore.xmi.DanglingHREFException:_The_object_.27com.example.Foo.402f5dda_.28.29.27_is_not_contained_in_a_resource..22_What_do_I_need_to_do.3F</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/202241#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jun 2008 17:27:57 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/202241</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/202241</guid>
      </item>
      <item>
        <title>【转】Open an editor on something that is not a file</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200690" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/200690</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>转自EclipseFAQ</p>
<p>Since 3.3 you can use the new EFS support to open an text editor on a file store that's backed by any kind of EFS using <code>IDE.openEditorOnFileStore(page, fileStore)</code>. </p>
<p>Most editors will accept as input either an <tt>IFileEditorInput</tt> or an <tt>IStorageEditorInput</tt>. The former can be used only for opening files in the workspace, but the latter can be used to open a stream of bytes from anywhere. If you want to open a file on a database object, remote file, or other data source, <tt>IStorage</tt> is the way to go. The only downside is that this is a read-only input type, so you can use it only for viewing a file, not editing it. To use this approach, implement <tt>IStorage</tt> so that it returns the bytes for the file you want to display. Here is an <tt>IStorage</tt> that returns the contents of a string: </p>
<pre> <div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6 0% 50%; padding-bottom: 4px; width: 95%; padding-top: 4px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; border: windowtext 0.5pt solid;"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000;">  </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> StringStorage </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> PlatformObject 
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_70_534_Open_Image" onclick="this.style.display='none'; document.getElementById('_70_534_Open_Text').style.display='none'; document.getElementById('_70_534_Closed_Image').style.display='inline'; document.getElementById('_70_534_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_70_534_Closed_Image" onclick="this.style.display='none'; document.getElementById('_70_534_Closed_Text').style.display='none'; document.getElementById('_70_534_Open_Image').style.display='inline'; document.getElementById('_70_534_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />    </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> IStorage </span><span id="_70_534_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_70_534_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />      </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String string;
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_135_156_Open_Image" onclick="this.style.display='none'; document.getElementById('_135_156_Open_Text').style.display='none'; document.getElementById('_135_156_Closed_Image').style.display='inline'; document.getElementById('_135_156_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_135_156_Closed_Image" onclick="this.style.display='none'; document.getElementById('_135_156_Closed_Text').style.display='none'; document.getElementById('_135_156_Open_Image').style.display='inline'; document.getElementById('_135_156_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      StringStorage(String input) </span><span id="_135_156_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_135_156_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.string </span><span style="color: #000000;">=</span><span style="color: #000000;"> input;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_218_287_Open_Image" onclick="this.style.display='none'; document.getElementById('_218_287_Open_Text').style.display='none'; document.getElementById('_218_287_Closed_Image').style.display='inline'; document.getElementById('_218_287_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_218_287_Closed_Image" onclick="this.style.display='none'; document.getElementById('_218_287_Closed_Text').style.display='none'; document.getElementById('_218_287_Open_Image').style.display='inline'; document.getElementById('_218_287_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> InputStream getContents() </span><span style="color: #0000ff;">throws</span><span style="color: #000000;"> CoreException </span><span id="_218_287_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_218_287_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ByteArrayInputStream(string.getBytes());
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />      }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_322_335_Open_Image" onclick="this.style.display='none'; document.getElementById('_322_335_Open_Text').style.display='none'; document.getElementById('_322_335_Closed_Image').style.display='inline'; document.getElementById('_322_335_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_322_335_Closed_Image" onclick="this.style.display='none'; document.getElementById('_322_335_Closed_Text').style.display='none'; document.getElementById('_322_335_Open_Image').style.display='inline'; document.getElementById('_322_335_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> IPath getFullPath() </span><span id="_322_335_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_322_335_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_367_480_Open_Image" onclick="this.style.display='none'; document.getElementById('_367_480_Open_Text').style.display='none'; document.getElementById('_367_480_Closed_Image').style.display='inline'; document.getElementById('_367_480_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_367_480_Closed_Image" onclick="this.style.display='none'; document.getElementById('_367_480_Closed_Text').style.display='none'; document.getElementById('_367_480_Open_Image').style.display='inline'; document.getElementById('_367_480_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getName() </span><span id="_367_480_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_367_480_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />         </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> len </span><span style="color: #000000;">=</span><span style="color: #000000;"> Math.min(</span><span style="color: #000000;">5</span><span style="color: #000000;">, string.length());
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> string.substring(</span><span style="color: #000000;">0</span><span style="color: #000000;">, len).concat(</span><span style="color: #000000;">"</span><span style="color: #000000;">...</span><span style="color: #000000;">"</span><span style="color: #000000;">);
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />      }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_516_529_Open_Image" onclick="this.style.display='none'; document.getElementById('_516_529_Open_Text').style.display='none'; document.getElementById('_516_529_Closed_Image').style.display='inline'; document.getElementById('_516_529_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_516_529_Closed_Image" onclick="this.style.display='none'; document.getElementById('_516_529_Closed_Text').style.display='none'; document.getElementById('_516_529_Open_Image').style.display='inline'; document.getElementById('_516_529_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">boolean</span><span style="color: #000000;"> isReadOnly() </span><span id="_516_529_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_516_529_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />   }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div></div>
</pre>
<p>The class extends <tt>PlatformObject</tt> to inherit the standard implementation of <tt>IAdaptable</tt>, which <tt>IStorage</tt> extends. The <tt>getName</tt> and <tt>getFullPath</tt> methods can return <tt>null</tt> if they are not needed. In this case, we've implemented <tt>getName</tt> to return the first five characters of the string. </p>
<p>The next step is to create an <tt>IStorageEditorInput</tt> implementation that returns your <tt>IStorage</tt> object: </p>
<pre><div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6 0% 50%; padding-bottom: 4px; width: 95%; padding-top: 4px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; border: windowtext 0.5pt solid;"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000;">   </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> StringInput </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> PlatformObject 
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_80_605_Open_Image" onclick="this.style.display='none'; document.getElementById('_80_605_Open_Text').style.display='none'; document.getElementById('_80_605_Closed_Image').style.display='inline'; document.getElementById('_80_605_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_80_605_Closed_Image" onclick="this.style.display='none'; document.getElementById('_80_605_Closed_Text').style.display='none'; document.getElementById('_80_605_Open_Image').style.display='inline'; document.getElementById('_80_605_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />    </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> IStorageEditorInput </span><span id="_80_605_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_80_605_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />      </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> IStorage storage;
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_150_174_Open_Image" onclick="this.style.display='none'; document.getElementById('_150_174_Open_Text').style.display='none'; document.getElementById('_150_174_Closed_Image').style.display='inline'; document.getElementById('_150_174_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_150_174_Closed_Image" onclick="this.style.display='none'; document.getElementById('_150_174_Closed_Text').style.display='none'; document.getElementById('_150_174_Open_Image').style.display='inline'; document.getElementById('_150_174_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      StringInput(IStorage storage) </span><span id="_150_174_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_150_174_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.storage </span><span style="color: #000000;">=</span><span style="color: #000000;"> storage;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_206_219_Open_Image" onclick="this.style.display='none'; document.getElementById('_206_219_Open_Text').style.display='none'; document.getElementById('_206_219_Closed_Image').style.display='inline'; document.getElementById('_206_219_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_206_219_Closed_Image" onclick="this.style.display='none'; document.getElementById('_206_219_Closed_Text').style.display='none'; document.getElementById('_206_219_Open_Image').style.display='inline'; document.getElementById('_206_219_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">boolean</span><span style="color: #000000;"> exists() </span><span id="_206_219_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_206_219_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">true</span><span style="color: #000000;">;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_271_284_Open_Image" onclick="this.style.display='none'; document.getElementById('_271_284_Open_Text').style.display='none'; document.getElementById('_271_284_Closed_Image').style.display='inline'; document.getElementById('_271_284_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_271_284_Closed_Image" onclick="this.style.display='none'; document.getElementById('_271_284_Closed_Text').style.display='none'; document.getElementById('_271_284_Open_Image').style.display='inline'; document.getElementById('_271_284_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> ImageDescriptor getImageDescriptor() </span><span id="_271_284_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_271_284_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_316_359_Open_Image" onclick="this.style.display='none'; document.getElementById('_316_359_Open_Text').style.display='none'; document.getElementById('_316_359_Closed_Image').style.display='inline'; document.getElementById('_316_359_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_316_359_Closed_Image" onclick="this.style.display='none'; document.getElementById('_316_359_Closed_Text').style.display='none'; document.getElementById('_316_359_Open_Image').style.display='inline'; document.getElementById('_316_359_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getName() </span><span id="_316_359_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_316_359_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> storage.getName();
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />      }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_411_424_Open_Image" onclick="this.style.display='none'; document.getElementById('_411_424_Open_Text').style.display='none'; document.getElementById('_411_424_Closed_Image').style.display='inline'; document.getElementById('_411_424_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_411_424_Closed_Image" onclick="this.style.display='none'; document.getElementById('_411_424_Closed_Text').style.display='none'; document.getElementById('_411_424_Open_Image').style.display='inline'; document.getElementById('_411_424_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> IPersistableElement getPersistable() </span><span id="_411_424_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_411_424_Open_Text"><span style="color: #000000;">{</span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">;}</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_461_494_Open_Image" onclick="this.style.display='none'; document.getElementById('_461_494_Open_Text').style.display='none'; document.getElementById('_461_494_Closed_Image').style.display='inline'; document.getElementById('_461_494_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_461_494_Closed_Image" onclick="this.style.display='none'; document.getElementById('_461_494_Closed_Text').style.display='none'; document.getElementById('_461_494_Open_Image').style.display='inline'; document.getElementById('_461_494_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> IStorage getStorage() </span><span id="_461_494_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_461_494_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> storage;
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />      }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_533_600_Open_Image" onclick="this.style.display='none'; document.getElementById('_533_600_Open_Text').style.display='none'; document.getElementById('_533_600_Closed_Image').style.display='inline'; document.getElementById('_533_600_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_533_600_Closed_Image" onclick="this.style.display='none'; document.getElementById('_533_600_Closed_Text').style.display='none'; document.getElementById('_533_600_Open_Image').style.display='inline'; document.getElementById('_533_600_Open_Text').style.display='inline';" align="top" alt="" style="display: none;" />      </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String getToolTipText() </span><span id="_533_600_Closed_Text" style="display: none; background-color: #ffffff; border: #808080 1px solid;">...</span><span id="_533_600_Open_Text"><span style="color: #000000;">{
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />         </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">String-based file: </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> storage.getName();
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />      }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />   }</span></span><span style="color: #000000;">
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div></div>
</pre>
<p>Again, many of the methods here are optional. The <tt>getPersistable</tt> method is used for implementing persistence of your editor input, so the platform can automatically restore your editor on start-up. Here, we've implemented the bare essentials: the editor name, and a tool tip. </p>
<p>The final step is to open an editor with this input. This snippet opens the platform's default text editor on a given string: </p>
<pre><div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6 0% 50%; padding-bottom: 4px; width: 95%; padding-top: 4px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; border: windowtext 0.5pt solid;"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000;">   IWorkbenchWindow window </span><span style="color: #000000;">=</span><span style="color: #000000;"> ...;
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />   String string </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">This is the text file contents</span><span style="color: #000000;">"</span><span style="color: #000000;">;
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />   IStorage storage </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> StringStorage(string);
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />   IStorageEditorInput input </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> StringInput(storage);
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />   IWorkbenchPage page </span><span style="color: #000000;">=</span><span style="color: #000000;"> window.getActivePage();
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />   </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (page </span><span style="color: #000000;">!=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">null</span><span style="color: #000000;">)
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />      page.openEditor(input, </span><span style="color: #000000;">"</span><span style="color: #000000;">org.eclipse.ui.DefaultTextEditor</span><span style="color: #000000;">"</span><span style="color: #000000;">);
<img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div></div></pre>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 21:17:14 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/200690</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/200690</guid>
      </item>
      <item>
        <title>【转】GMF Labels</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200689" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/200689</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1 class="firstHeading">GMF Labels</h1>
<h3 id="siteSub">From Eclipsepedia</h3>
<div id="jump-to-nav">Jump to: <a href="http://wiki.eclipse.org/GMF_Labels#column-one">navigation</a>, <a href="http://wiki.eclipse.org/GMF_Labels#searchInput">search</a></div>
<!-- start content -->
<p>Labels represent pieces of text possibly associated with icons on diagram surface. Text may be edited using inplace facility. There are many possibilities to construct labels but all of them are grouped in four usecases: </p>
<p><strong>1. "feature based label"</strong> </p>
<p>Label is always defined in context of a diagram node or a link. If it's based on <em>EClass</em> from domain model then label may be used to represent attribute(s) of this class. Tooling will generate code that constructs label text and converts user input to the new value for attribute(s). </p>
<p><strong>2. "design label"</strong> </p>
<p>It may be desirable to have a label that is not stored in domain model. Tooling may generate code that will use notation style (<em>DescriptionStyle</em> for example) to store label text in notation model. </p>
<p><strong>3. "default label"</strong> </p>
<p>This is a read-only label with fixed text. </p>
<p><strong>4. "custom label"</strong> </p>
<p>GMF runtime defines <em>IParser</em> interface that is responsible to provide label text and editing support. In this usecase toolsmith is supposed to provide his own <em>IParser</em> implementation. </p>
<div>
<table class="toc" border="0" id="toc" summary="Contents">
<tbody>
<tr>
<td>
<div id="toctitle">
<h2>Contents</h2>
<span class="toctoggle">[<a href="javascript:toggleToc()" class="internal" id="togglelink">hide</a>]</span></div>
<ul>
<li class="toclevel-1"><a href="http://wiki.eclipse.org/GMF_Labels#Graphical_Definition"><span class="tocnumber">1</span> <span class="toctext">Graphical Definition</span></a></li>
<li class="toclevel-1"><a href="http://wiki.eclipse.org/GMF_Labels#Mapping"><span class="tocnumber">2</span> <span class="toctext">Mapping</span></a></li>
<li class="toclevel-1"><a href="http://wiki.eclipse.org/GMF_Labels#Generator_Model"><span class="tocnumber">3</span> <span class="toctext">Generator Model</span></a> 
<ul>
<li class="toclevel-2"><a href="http://wiki.eclipse.org/GMF_Labels#GenLabel"><span class="tocnumber">3.1</span> <span class="toctext">GenLabel</span></a></li>
<li class="toclevel-2"><a href="http://wiki.eclipse.org/GMF_Labels#LabelModelFacet"><span class="tocnumber">3.2</span> <span class="toctext">LabelModelFacet</span></a></li>
</ul>
</li>
<li class="toclevel-1"><a href="http://wiki.eclipse.org/GMF_Labels#Pending_Requests"><span class="tocnumber">4</span> <span class="toctext">Pending Requests</span></a></li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
<p>
<script type="text/javascript"></script>
<a name="Graphical_Definition"></a></p>
<h2><span class="mw-headline">Graphical Definition</span></h2>
<p>The only possible label figure is <em>Label</em>. In generated diagram editor the actual figure may be <em>Label</em> from Draw2D or <em>WrapLabel</em> from GMF runtime. Attribute "text" of the figure is a text shown on diagram when parser is not available. </p>
<p>Position of label figure within the model is important; it's used to determine whether label should be inner or external. Link labels are always external but node labels may be located whether inside node figure or "float" near it. If label figure is contained within parent node figure (directly or indirectly) it's inner label. </p>
<p><em>DiagramLabel</em> element refers to the label figure and is being referenced by <em>LabelMapping</em> from mapping models. If "elementIcon" attribute is set then label uses icon from EMF item providers. The following visual facets are recognized by tooling in <em>DiagramLabel</em>: </p>
<div>
<ul>
<li><em>AlignmentFacet</em> - specifies link label position relative to the link figure; in generator model alignment is copied to "alignment" property of <em>GenLinkLabel</em> </li>
<li><em>LabelOffsetFacet</em> - initial distance between the label and node / link figure; in generator model represented by <em>LabelOffsetAttributes</em> instance in label viewmap </li>
</ul>
</div>
<p><a name="Mapping"></a></p>
<h2><span class="mw-headline">Mapping</span></h2>
<p><em>LabelMapping</em> and its subclasses define label within the mapping model. </p>
<p>Basic <em>LabelMapping</em> instance supports 3<sup>rd</sup> and 4<sup>th</sup> usecases. It has "diagramLabel" reference to graphical definition and "readOnly" flag. </p>
<p><em>FeatureLabelMapping</em> extends <em>LabelMapping</em> to support 1<sup>st</sup> usecase by referencing domain attributes and providing format options: </p>
<ul>
<li>"features" reference: at least one attribute from domain model; all attributes should be defined within <em>EClass</em> of parent node / link </li>
<li>"viewPattern": pattern to construct label text from feature value(s) </li>
<li>"editorPattern": pattern to construct text for inplace editor from feature value(s) </li>
<li>"editPattern": pattern to parse text entered by user in new feature value(s) </li>
<li>"viewMethod": method to produce text from feature value(s) by pattern; used with "viewPattern" and "editorPattern" </li>
<li>"editMethod": method to parse text entered by user in new feature value(s); used with "editPattern" </li>
</ul>
<p>Currently supported methods are: </p>
<ul>
<li>MESSAGE_FORMAT uses java.text.MessageFormat class </li>
<li>NATIVE only one attribute should be specified; calls EcoreUtil.convertToString(...) / EcoreUtil.createFromString(...) methods </li>
<li>REGEXP calls String.split(...) method </li>
<li>PRINTF calls String.format(...) method </li>
</ul>
<p><em>DesignLabelMapping</em> is a <em>LabelMapping</em> flavour to handle 2<sup>nd</sup> usecase. Now it's empty but there should be a way to define view style used to store label text in notation model <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=161593" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=161593" class="external autonumber" rel="nofollow">[1]</a>. </p>
<p><a name="Generator_Model"></a></p>
<h2><span class="mw-headline">Generator Model</span></h2>
<p>Two hierarchies describe labels in generator model: descendants of <em>GenLabel</em> used to express label presentation in context of parent node / link and descendants of <em>LabelModelFacet</em> that denote label semantic. <em>GenLabel</em> references <em>LabelModelFacet</em> by "modelFacet" reference thus linking them together. </p>
<p><a name="GenLabel"></a></p>
<h3><span class="mw-headline">GenLabel</span></h3>
<p>Basic <em>GenLabel</em> has "elementIcon" flag copied from graphical definition and "readOnly" flag from the mapping model. <em>GenNodeLabel</em> and <em>GenExternalNodeLabel</em> are concrete classes that should be used to represent inner and external node labels respectively. <em>GenLinkLabel</em> is for the link labels and has "alignment" attribute derived from respective visual facet. <em>GenChildLabelNode</em> provides the same attributes as <em>GenLabel</em> but prefixed with "label" word; this class is used for nodes within list compartments. </p>
<p><a name="LabelModelFacet"></a></p>
<h3><span class="mw-headline">LabelModelFacet</span></h3>
<p>Model facet reflects label usecase: </p>
<ul>
<li><strong>"feature label"</strong>: <em>FeatureLabelModelFacet</em> instance; properties "features", "viewPattern" and "editPattern" are taken from <em>FeatureLabelMapping</em> </li>
<li><strong>"design label"</strong>: <em>DesignLabelModelFacet</em> instance </li>
<li><strong>"default label" and "custom label"</strong>: no model facet (<em>null</em>) </li>
</ul>
<p>In fact during mapping model to generator model transformation the following rules are obeyed: </p>
<ul>
<li><em>FeatureLabelMapping</em> -&gt; <em>FeatureLabelModelFacet</em> </li>
<li><em>DesignLabelMapping</em> -&gt; <em>DesignLabelModelFacet</em> </li>
<li><em>LabelMapping</em> -&gt; <em>null</em> </li>
</ul>
<p><a name="Pending_Requests"></a></p>
<h2><span class="mw-headline">Pending Requests</span></h2>
<p>This is a list of enhancements related to GMF labels; hopefully future versions of GMF will implement them: </p>
<ul>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150816" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=150816" class="external text" rel="nofollow">Support "design" labels for nodes backed up with domain element</a> </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=138179" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=138179" class="external text" rel="nofollow">Allow to define labels based on attributes of referenced objects</a> </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=161593" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=161593" class="external text" rel="nofollow">Allow to specify notation style for design label mapping</a> </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=149429" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=149429" class="external text" rel="nofollow">It should be possible to specify whether empty string should be written in domain model when user provides emty string for the label</a> </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=146818" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=146818" class="external text" rel="nofollow">Provide user feedback when invalid value is provided for the diagram label via direct editing</a> </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=146789" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=146789" class="external text" rel="nofollow">Generate resizable labels (optionally)</a> </li>
</ul>
<p>原文地址：<a href="http://wiki.eclipse.org/GMF_Labels">http://wiki.eclipse.org/GMF_Labels</a></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200689#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 21:14:46 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/200689</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/200689</guid>
      </item>
      <item>
        <title>【转】eclipse.ini说明</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200687" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/200687</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M <br />这里有几个问题：<br />1. 各个参数的含义什么？<br />2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动，而有些机器无法启动？<br />3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置？<br /><br />下面我们一一进行回答<br /><br />1. 各个参数的含义什么？<br /><br />参数中-vmargs的意思是设置JVM参数，所以后面的其实都是JVM的参数了，我们首先了解一下JVM内存管理的机制，然后再解释每个参数代表的含义。<br /><br />堆(Heap)和非堆(Non-heap)内存<br />按照官方的说法：&ldquo;Java 虚拟机具有一个堆，堆是运行时数据区域，所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。&rdquo;&ldquo;在JVM中堆之外的内存称为非堆内存(Non-heap memory)&rdquo;。可以看出JVM主要管理两种类型的内存：堆和非堆。简单来说堆就是Java代码可及的内存，是留给开发人员使用的；非堆就是JVM留给自己用的，所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。 <br />堆内存分配<br />JVM初始分配的内存由-Xms指定，默认是物理内存的1/64；JVM最大分配的内存由-Xmx 指定，默认是物理内存的1/4。默认空余堆内存小于40%时，JVM就会增大堆直到-Xmx的最大限制；空余堆内存大于70%时，JVM会减少堆直到- Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。 <br />非堆内存分配<br />JVM使用-XX:PermSize设置非堆内存初始值，默认是物理内存的1/64；由XX:MaxPermSize设置最大非堆内存的大小，默认是物理内存的1/4。 <br />JVM内存限制(最大值)<br />首先JVM内存限制于实际的最大物理内存(废话！呵呵)，假设物理内存无限大的话，JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制，这个限制一般是2GB-3GB（一般来说Windows系统下为1.5G-2G，Linux系统下为2G-3G），而64bit以上的处理器就不会有限制了。 <br />2. 为什么有的机器我将-Xmx和-XX:MaxPermSize都设置为512M之后Eclipse可以启动，而有些机器无法启动？<br /><br />通过上面对JVM内存管理的介绍我们已经了解到JVM内存包含两种：堆内存和非堆内存，另外JVM最大内存首先取决于实际的物理内存和操作系统。所以说设置VM参数导致程序无法启动主要有以下几种原因：<br /><br />1) 参数中-Xms的值大于-Xmx，或者-XX:PermSize的值大于-XX:MaxPermSize；<br /><br />2) -Xmx的值和-XX:MaxPermSize的总和超过了JVM内存的最大限制，比如当前操作系统最大内存限制，或者实际的物理内存等等。说到实际物理内存这里需要说明一点的是，如果你的内存是1024MB，但实际系统中用到的并不可能是1024MB，因为有一部分被硬件占用了。 <br /><br />3. 为何将上面的参数写入到eclipse.ini文件Eclipse没有执行对应的设置？<br /><br />那为什么同样的参数在快捷方式或者命令行中有效而在eclipse.ini文件中是无效的呢？这是因为我们没有遵守eclipse.ini文件的设置规则：<br /><br />参数形如&ldquo;项 值&rdquo;这种形式，中间有空格的需要换行书写，如果值中有空格的需要用双引号包括起来。比如我们使用-vm C:\Java\jre1.6.0\bin\javaw.exe参数设置虚拟机，在eclipse.ini文件中要写成这样：<br /><br />-vm <br />C:\Java\jre1.6.0\bin\javaw.exe <br />按照上面所说的，最后参数在eclipse.ini中可以写成这个样子：<br /><br />-vmargs <br />-Xms128M <br />-Xmx512M <br />-XX:PermSize=64M <br />-XX:MaxPermSize=128M <br />实际运行的结果可以通过Eclipse中&ldquo;Help&rdquo;-&ldquo;About Eclipse SDK&rdquo;窗口里面的&ldquo;Configuration Details&rdquo;按钮进行查看。<br /><br />另外需要说明的是，Eclipse压缩包中自带的eclipse.ini文件内容是这样的：<br /><br />-showsplash <br />org.eclipse.platform <br />--launcher.XXMaxPermSize <br />256m <br />-vmargs <br />-Xms40m <br />-Xmx256m <br />其中&ndash;launcher.XXMaxPermSize（注意最前面是两个连接线）跟-XX:MaxPermSize参数的含义基本是一样的，我觉得唯一的区别就是前者是eclipse.exe启动的时候设置的参数，而后者是eclipse所使用的JVM中的参数。其实二者设置一个就可以了，所以这里可以把 &ndash;launcher.XXMaxPermSize和下一行使用#注释掉。</p>
<p>3. 其他的启动参数。 如果你有一个双核的CPU，也许可以尝试这个参数:</p>
<p><code>-XX:+UseParallelGC</code></p>
<p>让GC可以更快的执行。（只是JDK 5里对GC新增加的参数）</p>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200687#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 21:12:25 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/200687</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/200687</guid>
      </item>
      <item>
        <title>GMF学习笔记</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200686" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/200686</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3>1.为不对应模型的链接添加标签的方式。</h3>
<p><br /><span style="font-weight: bold;">在gmfGraph里：</span><br />&nbsp;&nbsp; a.首先新建一个Figure descriptor(取名ConnectionLabelFigure),并添加一个child label，设置其默认Text。<br />&nbsp;&nbsp; b.新建一个DiagramLabel(取名ConnectionDiagramLabel)；在这个节点下，可以添加<em>AlignmentFacet和</em><em>LabelOffsetFacet</em>控制Label和Link的相对位置。<br />在gmfMap里：<br />&nbsp;&nbsp; c.找到原来定义的LinkMaping节点，在下面新建一个Desing Label Maping，选择b步骤中定义的DiagramLabel作为其DiagramLabel，设置其ReadOnly属性为true。（根据你的需求可选）<br /><br />其他GMF常见问题，比如可拖放的多边形等，参考<a href="http://www.cnblogs.com/bjzhanghao/category/48143.html">八进制博客</a>。</p>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/200686#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 21:07:23 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/200686</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/200686</guid>
      </item>
      <item>
        <title>swt、eclipse RCP与“Java All in One”</title>
        <author>lgx522</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lgx522.javaeye.com">lgx522</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/175676" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/175676</a>&nbsp;
          发表时间: 2008年03月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          近年来的eclipse与netbeans之争日趋激烈，并不只是IDE争斗那么简单（反正都是免费）。其背后是swt与swing之争，更是IBM所主导的开源Java与Sun所主导的官方Java之争。<br /><br />搞了四五年Web，冷静下来发觉企业内部应用还是Rich Client好（交互性好、状态管理容易、客户端资源利用度高、易开发等等）。这个事实其实很多做企业开发的同道以至于客户都意识到了，于是出现了很多团队被迫用winform，甚至回头啃Delphi这类无奈的事情。可惜异构调用还是不爽啊，不仅仅是协议转换的问题，还有语法习惯的问题，更要命的是开发思路不同的问题。既然Java是大而全的体系，难道我们就不能始终如一地解决问题吗？<br />这个问题，其实IBM和Sun也都看出来了，所以不论是eclipse还是netbeans，都不仅仅是单纯的IDE，而是力求“平台化”，争的就是Rich Client的标准问题。<br />可惜Swing始终是慢，慢到让人心烦，慢到让老一点的机器无法忍受，慢到难以让客户接受（甚至JDK1.6也好不到哪里去）。<br /><br />好在我们还有swt可用。经过本人多次测试，swt的运行效率其实与winform是不相上下的。<br />以前由于VE实在难用，而NB嫌慢，Swing和swt笔者以前一直是做手工编码。这一点上说句实在话，Swing的代码是超级优美，扩展类库和控件简直可说是一种享受，可惜还是慢（包括JDK1.6）。<br />最近由于一个项目要求，要用到swt，于是迫不得以用了一把swt designer（毕竟是D版啊）。这才发觉swt开发原来可以如此之快，几乎达到某些人吹嘘的近似Delphi的程度。而swt designer本身，可说是eclipse RCP的经典范例，功能如此之强、速度如此之快，操作如此便捷，彻底颠覆了笔者过去对Java Rich Client那种“恨铁不成钢”的成见。<br />回头想起myeclipse、Flex Builder这类精品，这才体会到多年前很多同道对eclipse平台的“野望”。eclipse的确是有实力、有希望成为Rich Client的通用标准开发平台。在此向企业应用开发的同道们进行推荐，希望大家共同努力，让国内swt尽快走出“叫好不叫座”的尴尬局面，尽快赶上国外同行们在此领域取得的成绩。大家可以看一看国外很多利用eclipse RCP搞定的复杂软件，甚至很多项目以前普遍认为是MFC的专属领域；而IBM公司更是把各类软件转向eclipse平台；甚至近日MS都打算染指。eclipse之野望正一步步成为现实。<br /><br />企业应用“All in One”，不仅是开发者之福，更是企业用户之福。笔者近来年接触的企业应用，大多数都面临孤岛集成的痛苦。主要原因当然是规划不到位、系统分析散乱、数据不统一所造成，但各个时期技术体系不能“大而全”地解决问题也是技术层面的主因。<br />WS嚷了好多年，至今复杂低效难用，历史一再证明企业内部异构集成不可取。现在我们有了Java这种“平衡至上”且开源主导的技术，有swt能够补上Java一直以来的缺憾，能够做到“All in One”。作为企业应用开发者，我们的确是应该认真考虑并实施“Java All in One”。
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/175676#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 25 Mar 2008 10:13:08 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/175676</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/175676</guid>
      </item>
      <item>
        <title>一用subclipse 就导致eclipse莫名奇妙的退出（crash）</title>
        <author>jelly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jelly.javaeye.com">jelly</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/172884" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/172884</a>&nbsp;
          发表时间: 2008年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前几天碰到一个非常郁闷的问题，eclipse突然不能使用svn的插件subclipse了，只要跟svn相关的操作，比如更新，上传，同步都执行不了，而且导致eclipse 崩溃。<br /><br />开始我怀疑是eclipse 的版本跟svn客户端的版本不兼容，使用了新版的eclipse，还是同样存在，使用新版的TortoisSVN ，问题依旧。使用新版的subclipse，问题依旧，简直郁闷死了。<br /><br />在网上终于找到的解决的办法，答案简直太出人意料之外了，原来跟我在本机上新安装的subvesion服务器有关系，安装这个服务器只不过是为了试试最新版的subversion的安装，但是项目的subversion服务器还是没有改动的。所以没有想到问题会处在这里。安装subversion服务器的时候会注册环境变量APR-ICONV， 可能subclipse会用到这个环境变量，而这个环境变量配置和subclipse所需要使用的APR-ICONV 在版本上是不兼容的。<br /><br />长话短说，解决办法就是在windows的环境变量的设置里面将所有的APR_ICONV_PATH  改为 APR_ICONV1_PATH 。<br /><br /><br />官方的参考文档：<br />As soon as I do something with Subclipse on Windows, Eclipse just crashes. Why does this happen? <br /><br />http://subclipse.tigris.org/faq.html#win32-crash
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/172884#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 17 Mar 2008 11:46:07 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/172884</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/172884</guid>
      </item>
      <item>
        <title>在RCP中集成DB4O遇到的问题</title>
        <author>zhangcheng</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhangcheng.javaeye.com">zhangcheng</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/170122" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/170122</a>&nbsp;
          发表时间: 2008年03月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在最近的一个RCP项目中，需要使用到DB4O,但是我却遇到了一个很奇怪的问题。<br />问题如下：<br />我把数据库的文件context.yap放在项目目录下边，显示自己谢了个带有main方法的测试类，测试时候很顺利，无论是存数据还是写数据都能够正常进行。但是当RCP程序启动的时候，无论如何也读不出数据，也没有任何异常。<br />问题分析：<br />经过我的调试，我发现运行RCP的时候是执行了正确的操作的，就是context.yap么有数据，但是我在测试的时候明明有数据的啊？我此时已怀疑是RCP的路径的问题，但是试了各种方法，也没有读出数据。也不是找不到数据库文件，找到了，但是为空！<br />问题解决;<br />最后，我查找了DB4O的文档，终于找到问题在那里了。DB4O在执行下面这句的时候：<br /><pre name="code" class="java">
ObjectContainer db = Db4o.openFile("context.yap");
</pre><br />如果，如果DB4O找不到数据库的文件，就会自己新建一个，而在RCP的环境下，新建的数据库文件就在Eclipse的安装目录下，新建的为空，当然取不出任何数据了。<br /><br />问题已经解决，希望能对大家有所帮助。而且有不正确的地方希望大家指正！
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/170122#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 11 Mar 2008 12:21:59 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/170122</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/170122</guid>
      </item>
      <item>
        <title>使用Eclipse自带的PropertySheet</title>
        <author>zhangcheng</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhangcheng.javaeye.com">zhangcheng</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/168729" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/168729</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近在做一些GEF相关的项目，在项目中遇到一些小问题，现在记录下来，备忘，也能帮助初学者。<br />     在自己的RCP应用中使用PropertySheet大概有两种方法，我现在只介绍一种方法。这种方法我觉得要简单一点。<br />     首先，自己定义的model要继承org.eclipse.ui.views.properties.IPropertySource接口，这个接口中有几个方法要实现：<br />     第一个：<br /><pre name="code" class="java">
        @Override
	public Object getEditableValue() {
		//返回模型自身作为可编辑的属性
		return this;
	}
</pre><br />       这个方法如代码中所示，返回model自身就可以了。<br />       第二个：<br /><pre name="code" class="java">
@Override
  	public IPropertyDescriptor[] getPropertyDescriptors() {

		IPropertyDescriptor[] descriptors = new IPropertyDescriptor[] { 
				new TextPropertyDescriptor(P_TEXT, "Name"),
				new ComboBoxPropertyDescriptor(P_TYPE, "Type", new String[] { "True"，"False"}),
				
		};
		return descriptors;

	}
</pre><br />        这个方法返回一个IPropertyDescriptor数组，它包括了在属性视图中要显示的项。<br />        第三个：<br /><pre name="code" class="java">
@Override
	public Object getPropertyValue(Object id) {
		if(id.equals(P_TEXT)) {
			
			return this.getName();
			
		} else if(id.equals(P_TYPE)) {
			
			return this.getType().equals("Real") ? new Integer(0) : new Integer(1);
	
		} 
		return null;
	}
</pre><br />       在实现这个方法的时候要注意，在上面那个方法中的：<pre name="code" class="java">new ComboBoxPropertyDescriptor(P_TYPE, "Type", new String[] { "True"，"False"}),</pre>所对应的在这个方法中的返回值是Integer的，而不是String，这一点一定要注意，要不然显示出来的属性视图是无法编辑的。<br />        第四个：<br /><pre name="code" class="java">
       @Override
	public boolean isPropertySet(Object id) {
		return true;
	}
</pre><br />         这个方法返回true就可以了。<br />         最后一个要我么实现的方法：<br /><pre name="code" class="java">
@Override
	public void setPropertyValue(Object id, Object value) {
		
		if(id.equals(P_TEXT)) {
			
			this.setName(value.toString());
			
		} else if(id.equals(P_TYPE)) {
			
			this.setType(((Integer)value).equals(new Integer(0)) ? "Real" : "Integer");
			
		}
		
	}
</pre><br />          这个方法中也要注意第三个方法中说道的问题，这时参数实际上对Type而言是Integer类型的，而不是String处理的时候要做以一下转换。<br />         然后，就在Perspective中加入PropertySheet视图就可以了。PropertySheet的ID为：org.eclipse.ui.views.PropertySheet。<br />         希望对初学者能有帮助，不妥的地方还请大家指出，偶也初学。
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/168729#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 12:44:46 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/168729</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/168729</guid>
      </item>
      <item>
        <title>OSGI TIPS</title>
        <author>puroc</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puroc.javaeye.com">puroc</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/164376" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/164376</a>&nbsp;
          发表时间: 2008年02月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.在bundle和component中必须得有一个无参的构造函数。否则bundle将抛出异常，component不抛出异常，但是该component不能启动。 <br /><br /><pre name="code" class="java">Caused by: java.lang.InstantiationException: b.Activator
	at java.lang.Class.newInstance0(Class.java:335)
	at java.lang.Class.newInstance(Class.java:303)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:136)
	... 14 more</pre><br />2.在一个bundle中有多个component的。 <br />为每个component定义个配置文件，然后在MANIFEST.MF中进行配置如下： <br />Service-Component: OSGI-INF/component.xml,OSGI-INF/component2.xml <br /><br />3.在一个component的service中，提供多个interface，如下： <br />&lt;component name=&quot;comeImpl&quot;&gt; <br />&lt;implementation class=&quot;impl2.ComeImpl&quot;/&gt; <br />&lt;service&gt; <br />&lt;provide interface=&quot;intf2.Come&quot;/&gt; <br />&lt;provide interface=&quot;intf3.Third&quot;/&gt; <br />&lt;/service&gt; <br />&lt;/component&gt; <br /><br />4.提供的service，一定要被其他bundle引用，否则提供service的component不会被加载。 <br /><br />5.当一个component被加载的时候，先调用构造函数，再调用注入(set)方法，然后是activate方法。 <p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/164376#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 22 Feb 2008 23:26:53 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/164376</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/164376</guid>
      </item>
      <item>
        <title>在OSGi应用中使用统一classloader</title>
        <author>windspy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://windspy.javaeye.com">windspy</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/156882" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/156882</a>&nbsp;
          发表时间: 2008年01月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近在开发OSGi的应用，由于各个bundle在运行时使用各自的classloader，一些需要共享的库文件如libawt.so等不能被share，导致运行时报so已经被其他classloader加载的错误。其实只要在configuration的config.ini中加入osgi.java.profile.bootdelegation=override就可以让各个bundle使用统一的classloader来装载库文件。
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/156882#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jan 2008 13:59:47 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/156882</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/156882</guid>
      </item>
      <item>
        <title>为RCP程序添加帮助支持</title>
        <author>Dollyn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dollyn.javaeye.com">Dollyn</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/150896" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/150896</a>&nbsp;
          发表时间: 2007年12月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          为RCP程序添加帮助支持<br />本文大量参考了EclipseCorner的文章<br />《Adding Help Support to a Rich Client Platform (RCP) Application》，<br />特表示感谢。英语好的朋友可以直接看这篇文章。<br />v1.0.0<br />2007-12-26<br />友好、易用的帮助系统是一个好的软件必备的部分，很少有软件能做到不需要任何文档。Eclipse的帮助系统是基于浏览器的，因此能够完全支持HTML，并且自动支持了搜索功能；而且可以支持上下文帮助和关键字索引。<br />帮助系统是RCP的一个可选的组件，它不是最小RCP的一部分，但是可以将其添加到RCP中为RCP程序提供帮助支持。<br /><br />下面就以一个例子为基础说明为RCP程序添加帮助支持的过程。<br /><br />在继续之前，首先确定你已经具有了一定的RCP方面的支持，了解了如何创建一个项目，以及如何产品配置。这些都不是本文的主题，需要了解这些内容，可以参考其他资料。本文下面内容假定读者已经了解并基本掌握了这方面的内容。<br /><br /><strong>一、创建RCP程序。</strong><br />PDE本身带了几个RCP程序的模板，我们就以其中的RCP Mail模板为例，这个不是本文的主题，根据模板创建一个RCP程序也比较简单，所以这里不再赘述。本例的项目名为org.example.rcp，其他都取默认值。<br /><br /><strong>二、创建产品配置</strong><br />一个产品配置是RCP程序必备的（虽然不会编译错误，也可以运行，但产品配置是RCP程序发布的基础）。我们的产品配置文件名为rcp.product,其他取默认值。<br /><br /><strong>三、添加代码</strong><br /> 首先，在RCP项目中找到AppllicationiActionBarAdvisor这个类，按照下面模板修改：<br /><pre name="code" class="java">
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {

    // Actions - important to allocate these only in makeActions, and then use them
    // in the fill methods.  This ensures that the actions aren't recreated
    // when fillActionBars is called with FILL_PROXY.
    private IWorkbenchAction exitAction;
    private IWorkbenchAction aboutAction;
    private IWorkbenchAction newWindowAction;
    private OpenViewAction openViewAction;
    private Action messagePopupAction;
    
	private IAction helpContentAction = null;	  //帮助,此处添加三个Action用做菜单
	private IAction helpSerchAction = null;
	private IAction helpDynamicAction = null;


    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
        super(configurer);
    }
    
    protected void makeActions(final IWorkbenchWindow window) {
        // Creates the actions and registers them.
        // Registering is needed to ensure that key bindings work.
        // The corresponding commands keybindings are defined in the plugin.xml file.
        // Registering also provides automatic disposal of the actions when
        // the window is closed.

        exitAction = ActionFactory.QUIT.create(window);
        register(exitAction);
        
        aboutAction = ActionFactory.ABOUT.create(window);
        register(aboutAction);
        
        newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
        register(newWindowAction);
        
        openViewAction = new OpenViewAction(window, "Open Another Message View", View.ID);
        register(openViewAction);
        
        messagePopupAction = new MessagePopupAction("Open Message", window);
        register(messagePopupAction);
        
    	//帮助
    	helpContentAction = ActionFactory.HELP_CONTENTS.create(window);
    	register(helpContentAction);
    	helpSerchAction = ActionFactory.HELP_SEARCH.create(window);
    	register(helpSerchAction);
    	helpDynamicAction = ActionFactory.DYNAMIC_HELP.create(window);
    	register(helpDynamicAction);

    }
    
    protected void fillMenuBar(IMenuManager menuBar) {
        MenuManager fileMenu = new MenuManager("&File", IWorkbenchActionConstants.M_FILE);
        MenuManager helpMenu = new MenuManager("&Help", IWorkbenchActionConstants.M_HELP);
        
        menuBar.add(fileMenu);
        // Add a group marker indicating where action set menus will appear.
        menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
        menuBar.add(helpMenu);
        
        // File
        fileMenu.add(newWindowAction);
        fileMenu.add(new Separator());
        fileMenu.add(messagePopupAction);
        fileMenu.add(openViewAction);
        fileMenu.add(new Separator());
        fileMenu.add(exitAction);
        
        // Help
        helpMenu.add(aboutAction);
    	helpMenu.add(helpContentAction);
    	helpMenu.add(helpSerchAction);
    	helpMenu.add(helpDynamicAction);
    }
    
    protected void fillCoolBar(ICoolBarManager coolBar) {
        IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
        coolBar.add(new ToolBarContributionItem(toolbar, "main"));   
        toolbar.add(openViewAction);
        toolbar.add(messagePopupAction);
    }
}
</pre><br /><br /><strong>四、测试一下</strong><br />为RCP程序添加帮助系统，需要至少添加以下插件：<br />org.apache.lucene<br />org.eclipse.help.appserver<br />org.eclipse.help.base<br />org.eclipse.help.ui<br />org.eclipse.help.webapp<br />org.eclipse.tomcat<br />org.eclipse.ui.forms。<br />打开产品配置文件，在编辑器的“配置”页面，点击添加，添加上述插件，然后再点击一“添加必须插件”。<br />在添加了所有必需插件以后，在“概述”页面点击启动产品，查看运行情况，可以看到在帮助菜单下，有了三个帮助相关的菜单。点击“帮助内容”会报一个未安装文档的错，其他两个菜单不会有错。<br /><br /><strong>五、添加简单的帮助内容</strong><br />上面报的错误，是因为没有任何帮助内容可以使用，下面我们就提供一个简单的帮助内容，帮助内容一般也以一个独立的插件的形式存在，按照下面的步骤创建一个帮助内容插件：<br />1.	"File > New > Project > Plug-in project".<br />2.	在弹出的向导第一个页面中，保证复选框“Create a Java Project”处于未选中的状态。（当然，这个不是必须的）。<br />3.	输入项目名称”org.example.rcp.content”，并点击下一步。<br />4.	在模板选择页面选择Plug-in with sample help content"来使用模板创建一个帮助内容插件。<br />如果你和我一样使用3.2的中文版的话，那么你可能需要手动修改一下toc.xml文件，因为里面有个地方使用中文出现了乱码，打开这个文件，可以明显看到，把它改成任何符合xml规定的代码即可。如不做此不后面会出现错误。<br />5.	在产品配置文件编辑器的配置页面中，添加这个插件。<br />6.	在产品配置文件编辑器的概述页面中，点击启动产品，查看运行情况。<br /><br /><strong>六、添加上下文帮助</strong><br />上下文帮助是用户在任何界面下，点击F1（windows）或者单击菜单中的动态帮助，出现和当前界面相关联的帮助提示等。在Eclipse框架下，添加上下文帮助也是比较简单的。<br />首先，你需要为上下文指定一个ID，这个ID在后面会匹配到帮助内容的某一项或者几项。我们这里为RCP示例的“Message”视图创建一个上下文帮助，这需要修改View.java 这个文件，在这个类的createPartControl方法中添加：<br />PlatformUI.getWorkbench().getHelpSystem().setHelp(top, "org.example.rcp.content.context");<br /><br />注意这里的第二个参数，是由文档插件ID+下面xml中id组成。<br />然后指定了上下文ID以后，就需要在帮助内容中添加与之相应的内容了。 在上面创建的org.example.rcp.ocntent项目下，创建一个文件”contexts.xml”，内容如下：<br /><pre name="code" class="xml">
&lt;contexts>
&lt;context id="message">
&lt;description>This is the sample context-sensitive help. &lt;/description>
&lt;topic href="html/subtopic.html" label="Subtopic" />
&lt;/context>
&lt;/contexts>
</pre><br />然后需要把这个内容和上面的ID联系起来，这需要用到org.eclipse.help.context扩展点，这个扩展点需要指定的值就是刚刚创建的那个文件。 在扩展页面中<br />1.	点击添加，选择org.eclipse.help.context 这个扩展点（注意需要把下面的复选框取消选中才能看到这个扩展点），然后会提示是否添加到依赖项，选否。<br />2.	在file一项中，选择刚才创建的那个文件。<br /><br />另外，在View.java文件中，做如下修改，即在setFocus()方法中，保证使top获得焦点，以使系统把正确的上下文传递给帮助系统，需要的修改参考下面代码：<br /><pre name="code" class="java">
	private Composite top;
	public void createPartControl(Composite parent) {
		top = new Composite(parent, SWT.NONE);
		...
	}

	public void setFocus() {
		top.setFocus();
	}
</pre><br />再次点击启动产品，并在焦点在Message视图上的情况下，按F1或者选菜单动态帮助查看效果，如果上面步骤都正确执行了，那么应该会在右边自动出现指定的帮助内容。
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/150896#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 26 Dec 2007 11:33:57 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/150896</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/150896</guid>
      </item>
      <item>
        <title>Eclipse在石油行业的表现</title>
        <author>wislin</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://outwey.javaeye.com">wislin</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/150371" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/150371</a>&nbsp;
          发表时间: 2007年12月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本人就是中国石油工业的一分子，非常热爱计算技术，特别是eclipse的所有相关技术，今天发现了一个用eclipse开发的物探软件IPE (Interactive Processing Environment)。下面的是一些图。<br /><img src="http://outwey.javaeye.com/upload/picture/pic/6532/93169a18-29cd-4662-8b21-62a3f88d0cd2.png" /><br /><img src="http://outwey.javaeye.com/upload/picture/pic/6533/fe5151d0-6e31-4456-af14-1abf7944d6a1.png" />
          <br/>
          <span style="color:red;">
            <a href="http://EclipseRCPForum.group.javaeye.com/group/blog/150371#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Dec 2007 09:01:32 +0800</pubDate>
        <link>http://EclipseRCPForum.group.javaeye.com/group/blog/150371</link>
        <guid>http://EclipseRCPForum.group.javaeye.com/group/blog/150371</guid>
      </item>
      <item>
        <title>遍历扩展点ExtensionPoint</title>
        <author>yoyozy</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yoyozy.javaeye.com">yoyozy</a>&nbsp;
          链接：<a href="http://EclipseRCPForum.group.javaeye.com/group/blog/149533" style="color:red;">http://EclipseRCPForum.group.javaeye.com/group/blog/149533</a>&nbsp;
          发表时间: 2007年12月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;IExtensionRegistry&nbsp;extensionRegistry&nbsp;=&nbsp;Platform&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getExtensionRegistry();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;IExtensionPoint&nbsp;extensionPoint&nbsp;=&nbsp;extensionRegistry&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getExtensionPoint(<span class="string">&quot;org.eclipse.ui&quot;</span><span>,&nbsp;</span><span class="string">&quot;actionSets&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(extensionPoint&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IConfigurationElement[]&nbsp;ic=extensionPoint.getConfigurationElements();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(ic&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;ic.length;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(<span class="string">&quot;-----&quot;</span><span>+i+</span><span class="string">&quot;-----&quot;</span><span>);&nbsp;&nbsp;</s