2010年1月28日 星期四

Eclipse RCP (Rich Client Platform) Life Cycle

Eclipse RCP (Rich Client Platform) life cycle
我們可以從What is the Eclipse RCP (Rich Client Platform)?明白application class會來實做(implements)具bootstrap功能的介面(interface) IApplication。 指定應用程式的執行進入點。而RCP就是實作IApplication的開發平台,因為我們可以在只被平台呼叫的而不可以直接程叫的start function 中(圖一),了解RCP application說穿了就是一個一直在workbench中執行的事件。
生命週期:(圖一)
1. 建立display (SWT):圖形系統的實作,負責接收事件傳給RCP的listen來完成事件處理。
2. 建立workbench advisor:控制workbench 的生命週期,異常處理,傳遞重要參數給Workbench。
3. 執行workbench:一個RCP應用程式,只能有一個Workbench
4. 回覆中斷碼
5. 結束display

(圖一) start function

Workbench是Eclipse 最上層的user interface,所以一個RCP應用程式,只能有一個Workbench,用由管理workbench windows, dialogs, wizards, 和其他的workbench-related windows。而PlatformUI是一個核心的class,它利用Workbench class來Create display (createDisplay)及create work bench advisor(ApplicationWorkbenchAdvisor),存取Eclipse platform user interface(createAndRunWorkbench); (1)Workbench.createAndRunWorkbench(Display display, WorkbenchAdvisor advisor)建創一個workbench且結合display 和workbench advisor(new Workbench(display, advisor)), 再執行workbench UI ((2)workbench.runUI())進行開啟應用程式的主視窗,等待且處理按鍵,滑鼠等視窗事件,直到主視窗關閉,是屬於一個持繼處理event 的loop。
而workbench.runUI()會先初始化Workbench包括JFace, window manager, service order, default services, activity support, fonts, colors, applicationColorss等等所有的初始化,接下來會先對workbench做充分的初始化,才會turn on advisor ( 2-1)WorkbenchAdvisor.initialize -> (2-2)WorkbenchAdvisor.preStartup(只有在第一個workbench window被open或被restore 之前被執行特別的code,一般是不會被override實作的,除了特別需求) -> (2-3) WorkbenchAdvisor.openWindows(流程是先讀取以前設定的workbench狀態(IWorkbenchConfigurer.restoreWorkbenchState)會參考workbench.xml檔,當讀取失敗了才會執行IWorkbenchConfigurer.openFirstTimeWindow來取得不是儲存的值而是初始化的workbench值, 不管是否讀取成功最後才開啟一個特別的perspective pag和一個新建的workbench window (2-3-1) WorkbenchWindow.WorkbenchWindow以及初始化的(2-3-1-3)shell style和(2-3-1-4)action bars(WorkbenchWindow.fillActionBars)
(新建的workbench window (2-3-1) WorkbenchWindow.WorkbenchWindow的流程:為新的workbench window初始化command-based服務, addMenuBar, addCoolBar, addStatusLine 等基本地設定以及一些更多的設定於(2-3-1-1)WorkbenchWindowAdvisor.preWindowOpen(在window被open之前被執行特別的code,一般是不會被override實作的,除了特別需求 -> (2-3-1-2) WorkbenchWindowAdvisor. createWorkbenchWindowAdvisor(新建立Work bench Window Advisor用於控管實體視窗的樣式及生命週期和事件(new ApplicationWorkbenchWindowAdvisor)))
(2-3-2) ApplicationWorkbenchWindowAdvisor.createWindowContents(Shell shell) 用來建立window的內量物,預設值有a menu bar, a cool bar, a status line, a perspective bar, and a fast view bar.
(2-3-3) WorkbenchWindowAdvisor.postWindowRestore(在window被restore之後還沒運作之前被執行特別的code,一般是不會被override實作的,除了特別需求)
(2-3-4)Workbench.openWindowsAfterRestore 在workbench開啟windows
(2-3-4-1)WorkbenchWindowAdvisor.postWindowCreate(在window被restore及create之後還沒運作之前被執行特別的code,一般是不會被override實作的,除了特別需求)
(2-3-4-2) WorkbenchWindowAdvisor.openIntro() 在第一次打開時要看到的內容,之後不要,則可以在這裡設計,因為這方法的IWorkbenchPreferences.SHOW_INTRO預計是true, 第一次打開視窗後,這值會設成false,只有在WorkbenchConfigurer.getSaveAndRestore() 方法返回True,以及關閉視窗後這值才會被更改為true,否則不會被執行設計在第一次打開的時候執行的code。
(2-3-4-3).ApplicationWindow.open開啟main window, ps:最高層級的應用程式視窗的主視窗是嵌入一個非必要的標準menus, 一個非必要的toolbar , 一個非必要的status line。
(2-3-4-4)Workbench.fireWindowOpened開啟listening 去監聽window lifecycle events(ex: part lifecycle events)
(2-3-4-5)WorkbenchWindowAdvisor.postWindowOpen(在window被開啟之後被執行特別的code)

(loop)WorkbenchAdvisor.eventLoopIdle(Display display)


參考:
http://wiki.eclipse.org/images/d/d9/EclipseCon_RCP_Tutorial_2006.pdf
http://www.eclipsecon.org/2005/presentations/EclipseCon2005_Tutorial26.pdf
http://chenying.blog.51cto.com/614874/123516
http://internet.hk/doc-view-24799.html

2010年1月21日 星期四

What is the Eclipse RCP (Rich Client Platform)?

定義:
Eclipse RCP就是運用許多內建功能來進行開發Client應用程式的一個開發平台


元件架構:
一個minimal standalone RCP application一定包含最基本的三個元件
  •  主程式 - 由org.eclipse.core.runtime.applications來定義RCP main application class(參考圖二)的擴充進入點,這application class會來實做(implements)具bootstrap功能的介面(interface) IApplication。也就是說,要執行一個Eclipse RCP 程式,必須先定義application,它就如同是一個程式的main()function,application會控制整個RCP的生命週期。 
  •  perspective(透視圖) - 由org.eclipse.ui.perspectives來定義perspective class(參考圖二)的擴充進入點,這perspective class會來實做(implements) IPerspectiveFactory介面(interface),在Workbench範圍中可被視覺化物件的操控與呈現。也就是說,perspective是一個可視的容器,收集著許多可視物件和編輯器。 
  •  workbench advisor(工作台顧問)-由application class建構(new)出來的,它是控制workbench的外觀配置。

基本檔案:
我們可以從How to create the new Eclipse Rich Client Platform (RCP)? 得知如何快速建構RCP的eclipse application project。

建構完成後,會自動產生:
  •  程式檔:
    Activator.java,
    Application.java,
    ApplicationActionBarAdvisor.java,
    ApplicationWorkbenchAdvisor.java,
    ApplicationWorkbenchWindowAdvisor.java
    Perspective.java等

  • 其他project資訊檔案: 
    MANIFEST.MF,
    build.properties,
    plugin.XML 等


圖一 RCP基本檔案


我們可以從MANIFEST.MF in META-INF folder得知project資訊和更改其設定值,只要點擊MANIFEST.MF就會出現Eclipse圖視化設定界面視窗,可在Eclipse圖視化界面視窗進行設定project資訊及extension points,Eclipse圖視化界面視窗會自動更改MANIFEST.MF, plugin.xml, build.properties檔案。

可從plugin.xml檔中了解有關插件的擴充進入點和所有擴充點清單,換言之,所有的plugins一定會被列入plugin.xml清單中,也就是我們是可以從plugin.xml檔中得知application 的 runtime applications 擴充進入點,如同main function,當application結束時,整個程式會中止。

圖二 org.eclipse.core.runtime.applications擴充進入點的設定


從plugin.xml檔中得知perspectives的擴充進入點,這class 實做了(implements) IperspectiveFactory介面的page layout的初始化。perspective是一個可視的容器,收集著許多在Workbench範圍中的可視物件和編輯器。


圖三 org.eclipse.ui.perspectives擴充進入點的設定


總結一下什麼是Eclipse RCP application,它是用來開發Client應用程式的平台,擁有許多豐富的功能,主要keyword是利用application控制整個RCP程式的生命週期, 建立了workbench advisor(工作台顧問)來配置workbench的外觀以及使用perspective class來實做在Workbench範圍中的可視物件和編輯器等元件。

2010年1月14日 星期四

How to create the new Eclipse Rich Client Platform (RCP)?

Create new RCP application project //建立新的RCP專案
  1. Create a plug-in Project //新建一個Plug-in 專案
  2. Key Project name //輸入專案名稱
  3. Select “Yes” with Rich Client Application //選取建立一個Rich client application 
  4. Select “RCP application with a view” available templates
  5. Select “Add branding”
  6. Run Configurations in Run menu //在run configurations 中建立新的eclipse application 的執行專案為自行建立的專案