+ All Categories
Home > Documents > First Steps in RCP - · PDF file» Action bar advisor: ... » Enter...

First Steps in RCP - · PDF file» Action bar advisor: ... » Enter...

Date post: 21-Mar-2018
Category:
Upload: lyquynh
View: 216 times
Download: 2 times
Share this document with a friend
41
First Steps in RCP Jan Blankenhorn, WeigleWilczek GmbH, Stuttgart, Germany February 19th, 2009
Transcript

First Steps in RCP

Jan Blankenhorn, WeigleWilczek GmbH,

Stuttgart, Germany

February 19th, 2009

Agenda

» About us

» RCP Architecture and Bundles

» Extension Points and Views

» Bundle Dependencies

2

» Software engineer at WeigleWilczek GmbH

» 3 years of Java development:

» 1 year of Eclipse RCP development

» Involved in 3 ongoing RCP projects

» JEE and JSF on JBoss AS

» 3 years of Eclipse IDE

» [email protected]

3

Jan Blankenhorn

» Founded December 2005 by WeigleWilczek and Innoopract

» WeigleWilczek now drives the initiative

» Offerings:

» International one-stop delivery of high quality Eclipse training classes

» Certificates

» Coaching and consulting

» www.eclipse-training.net

4

About the Eclipse Training Alliance

We share expertise

Please contact us for details:

Eclipse Training Alliancec/o Weigle Wilczek GmbHHeiko SeebergerMartinstrasse 42-44D-73728 Esslingen

Phone +49 711 45 99 98 0Fax +49 711 45 99 98 29www.eclipse-training.net

5

Contact Europe

Agenda

» About us

» RCP Architecture and Bundles

» Extension Points and Views

» Bundle Dependencies

6

» Very powerful platform for rich client applications

» Available for all major operating systems

» All sources provided

» Large and active community

» Commercial-friendly open source license: EPL

7

Why Eclipse RCP?

And: Eclipse RCP is fun!

8

High-level RCP Architecture

JB11

Slide 8

JB11 NotizenJan Blankenhorn, 2/17/2009

» Eclipse is not a monolithic system but an open platform

» Eclipse is based on an modular and extensible architecture:

» Minimal runtime

» Applications are composed of modules called bundles or plug-ins

» Plug-ins can be added, updated or removed

9

Modular Architecture

Runtime

Plug-in Plug-in Plug-in Plug-in

» Bundles are components:

» Execution in a runtime container → Eclipse Equinox

» Well defined deployment format → JAR file

» Declared public API → exported packages

» Declared dependencies → imported packages or required bundles

» Well defined life cycle → installed, resolved, active, uninstalled

» Plug-ins may offer extension points

» RCP applications are built from plug-ins

10

What is a Bundle/Plug-in?

Plug-in Plug-in Plug-in Plug-in

Ext. point

» Plug-ins are common JAR archives,

» ... contain a bundle manifest (MANIFEST.MF) and

» ... may contain a plug-in manifest (plugin.xml).

11

How does a Plug-in look like?

» Located at : META-INF/MANIFEST.MF

» Text file with property-like syntax: Manifest headers with values

» Declares metadata, public API, dependencies etc.

12

The Bundle Manifest (MANIFEST.MF)

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: Contacts Core

Bundle-SymbolicName: net.eclipsetraining.contacts.core

Bundle-Version: 1.0.0

Bundle-Vendor: WeigleWilczek

Bundle-RequiredExecutionEnvironment: J2SE-1.5

Export-Package: net.eclipsetraining.contacts.core;version="1.0.0"

» PDE supports plug-in development:

» Plug-in projects: Build path derived from MANIFEST.MF

» Manifest editor for MANIFEST.MF and plugin.xml manifest files

» Run/launch configurations for Eclipse applications and OSGi

» ...

13

The Plug-in Development Environment (PDE)

14

The Workbench Window

Source: Eclipse Help,

Eclipse Public License

Version 1.0

Perspective

» The workbench is created internally by RCP

» You can advise this process

» Workbench advisor

» Workbench window advisor

» Action bar advisor: Since 3.3 better use commands!

15

How can the Workbench be configured?

» ... defines the default perspective for the workbench:

» ... activates the save-and-restore behavior of the workbench:

» Window size, position etc. are restored on reopening

» The data is persisted between sessions in the applcation’s workspace

data dir (see in run configuration, „Main“ tab)

16

The Workbench Advisor ...

@Override

public String getInitialWindowPerspectiveId() { ...

@Override

public void initialize(final IWorkbenchConfigurer configurer) {

super.initialize(configurer);

configurer.setSaveAndRestore(true);

}

» ... configures the workbench window:

» Window size

» Window title

» Visibility of menu bar, toolbars, status bar etc.

17

The Workbench Window Advisor ...

@Override

public void preWindowOpen() {

getWindowConfigurer().setInitialSize(new Point(400, 300));

getWindowConfigurer().setShowCoolBar(false);

getWindowConfigurer().setShowStatusLine(false);

getWindowConfigurer().setTitle("Contacts");

}

Task: Create a “Hello world!” RCP application

Demonstration

» Step 1:

» Use the “New” wizard to create a new “Plug-in Project”

» Enter “net.eclipsetraining.webinar.core” as project name

» Uncheck “Generate an activator ...”

» Select “Yes” for “Would you like ... rich client application?”

» Select the “Hello RCP” template

» Enter “Hello world!” as the “Application window title” and click “Finish”

» Step 2:

» The manifest editor will open: Click the icon or the link “Launch an

Eclipse application”

19

Task: Create a “Hello world!” RCP application

Agenda

» About us

» RCP Architecture and Bundles

» Extension Points and Views

» Bundle Dependencies

20

» A Perspective arranges workbench parts (Views and Editors)

» Perspectives are typically used for "bundling" of role-specific functionalities, e.g. end user mode, administration mode etc.

» Perspectives can optionally be switched by the user

» There has to be a default perspective!

21

What is a Perspective?

» Can be moved and docked “anywhere” on the workbench window

» Can be stacked one over another:

» Can have their own menu and toolbars:

22

View Features (1)

23

View Features (2)

» Can be detached from the workbench window:

» Extension points let a plug-in be extended by new functionality, e.g.:

» Menus (UI)

» File types (editors)

» Products, own business domain classes etc.

» New functionality is contributed by extensions

» Plug-ins declaring extension points are called enablers,these declaring extensions are called extenders

24

What are Extension Points and Extensions?

Extender Enabler

Ext. point

» Extension points and extensions are declared in the plug-in manifest (plugin.xml)

» The extension registry scans the declarations on startup

» Extensions are matched to extension points

» Only declarative information is used, no classes are loaded so far

» Sometime the enabler queries the extension registry for extensions:

» The extenders' declarative information is used, e.g. menu labels

» If needed, the extender(s) is/are asked for an executable extension

(Java class) and program flow is delegated to the extender(s)

25

Background: The Extension Registry

Extender Enabler

Ext. point

use

call

» Extensions are declared in the plug-in manifest (plugin.xml):

» The extension-element is used

» Extension points are referenced by ID and namespace

» Extensions have to stick to the given extension point schema

26

Contributing Extensions (1)

<extension id="application"

point="org.eclipse.core.runtime.applications">

<application>

<run

class="net...application.internal.application.Application">

</run>

</application>

</extension>

» The PDE tooling for plugin.xml is providing an “Extensions” tab for displaying and editing the extensions:

27

Contributing Extensions (2)

» ... through the extension point org.eclipse.ui.views:

» The “class” attribute specifies an IViewPart-implementation

» The “id” attribute is later used to reference the view

» The “name” attribute defines the label shown in the workbench

28

Views are contributed ...

<extension point="org.eclipse.ui.views">

<view

class="net...listview.internal.ListView"

id="net...listview.views.listview"

name="Contact List">

... >

</view>

</extension>

» Views have to implement IViewPart

» Tip: Extend the base class ViewPart!

29

View Implementations

public class ListView extends ViewPart {

@Override

public void createPartControl(final Composite parent) {

...

}

@Override

public void setFocus() {

...

}

Task: Add a View to the Application

Demonstration

» Step 1: Create a new plug-in project

» Project name: net.eclipsetraining.webinar.ui.view

» Do generate an Activator (check): net.eclipsetraining.

webinar.ui.view.internal.Activator

» Do contribute to the UI (check)

» Do NOT create a rich client application or use any templates

» Step 2: Contribute a view for a Person

» ID: net.eclipsetraining.webinar.ui.view. views.personview

» Extension Point “org.eclipse.ui.views”

» Name: “Person View”

» Class: net.eclipsetraining.webinar.ui.view.

internal.PersonView

» Extend ViewPart with empty method skeletons or trace output

31

Task: Add a View to the Application (1)

» Step 3: Contribute a perspective extension

» Create an Extension Point for org.eclipse.ui.perspectiveExtensions

» Add the “Person View” view to the default perspective

» org.eclipse.ui.editorss

» Step 4: Run the updated application

» Take care to update the run configuration(s) correctly!

» Try some of the view features, e.g. docking and detaching

32

Task: Add a View to the Application (2)

Agenda

» About us

» RCP Architecture and Bundles

» Extension Points and Views

» Bundle Dependencies

33

» Classes and resources are not visible from other bundles by default

» A bundle has to declare its public API explicitly:

» The manifest header Export-Package is used

» All listed packages are made visible to other bundles

» Packages are separated by comma

» Package version should be specified!

34

Declaring the public API

Export-Package: net.eclipsetraining.contacts.core;version="1.0.0"

» A bundle has to declare its dependencies explicitly

» One way is to declare dependent packages:

» The manifest header Import-Package is used

» All listed packages are made available for the bundle

» Packages are separated by comma

» A package version or version range may be used

» A package can be required optionally

35

Declaring Bundle Dependencies (1)

Import-Package:

net.eclipsetraining.contacts.core;version="[1.0.0,2.0.0)"

» Another way is to declare required bundles:

» The manifest header Require-Bundle is used

» All exported packages from the listed bundles are made available

» Bundles are separated by comma

» A bundle version or version range can be used

» A bundle can be required optionally

36

Declaring Bundle Dependencies (2)

Require-Bundle: org.eclipse.core.runtime;bundle-version="3.4.0",

org.eclipse.ui;bundle-version="3.4.0"

Task: Display Data from Core Plugin in UI Plugin

Demonstration

» Step 1: Create an Entity Class in .core Plugin

» Create the package: net.eclipsetraining.webinar.core.data

» Create an interface Person

» Add setters and getters for name and firstname

» Create the package: net.eclipsetraining.webinar.core.data.internal

» Create a class PersonImpl

» Add the properties name and firstname

» Step 2: Create a Dummy Person Factory

» Create a class DummyPersonFactory

» Add the static Method getPerson()

» Return a Person

38

Task: Display Data from Core Plugin in UI Plugin

» Step 3: Export API

» Export-Package net.eclipsetraining.webinar.core.data

» Notice that ..internal Package is not exported

» Step 4: Add dependencies:

» Require-Bundle is already there for org.eclipse.ui and

org.eclipse.core.runtime: Use version 3.4.0

» Import-Package for net.eclipsetraining.webinar.core.data

» Step 5: Display Person from Core in the Person View

» Add 2 Labels in createPartControl()

» Set Text of the Labels to Person.getName() andPerson.getFirstName()

39

Task: Display Data from Core Plugin in UI Plugin

The End

Thank You !!

We will answer your Questions now !

40


Recommended