顯示具有 RCP 標籤的文章。 顯示所有文章
顯示具有 RCP 標籤的文章。 顯示所有文章

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 的執行專案為自行建立的專案