eclipse.dk - eclipse rcp under the hood

33
PR0031 - 2010-11-01 Redistribution and other use of this material requires written permission from The RCP Company. Eclipse RCP Under the Hood Denne event er en kombination af en tutorial day og en live demonstration af en "full featured" Eclipse RCP applikation hvor udviklingen kommenteres on-the-fly. Medbring din laptop og prøv selv hvordan man forholdsvis let kan starte en Eclipse RCP applikation. Det er meget vigtigt at du allerede har Eclipse 3.6 installeret på maskinen. Følgende emner vil blive demonstreret / omtalt Eclipse RCP Arkitektur Konfiguration (OSGi console, plugin.xml, manifest.mf...) Packaging Extension Points UI / SWT / JFace Editors / Views Building and Testing

Upload: tonny-madsen

Post on 07-Dec-2014

3.157 views

Category:

Education


1 download

DESCRIPTION

Denne event er en kombination af en tutorial day og en live demonstration af en "full featured" Eclipse RCP applikation hvor udviklingen kommenteres on-the-fly. Medbring din laptop og prøv selv hvordan man forholdsvis let kan starte en Eclipse RCP applikation. Det er meget vigtigt at du allerede har Eclipse 3.6 installeret på maskinen. Følgende emner vil blive demonstreret / omtalt Eclipse RCP Arkitektur Konfiguration (OSGi console, plugin.xml, manifest.mf...) Packaging Extension Points UI / SWT / JFace Editors / Views Building and Testing

TRANSCRIPT

Page 1: eclipse.dk - Eclipse RCP Under the Hood

PR0031 - 2010-11-01

Redistribution and other use of this material requires written permission from The RCP Company.

Eclipse RCP Under the Hood

Denne event er en kombination af en tutorial day og en live demonstration af en "full featured" Eclipse RCP applikation hvor udviklingen kommenteres on-the-fly.

Medbring din laptop og prøv selv hvordan man forholdsvis let kan starte en Eclipse RCP applikation. Det er meget vigtigt at du allerede har Eclipse 3.6 installeret på maskinen.

Følgende emner vil blive demonstreret / omtalt

Eclipse RCP ArkitekturKonfiguration (OSGi console, plugin.xml, manifest.mf...)PackagingExtension PointsUI / SWT / JFaceEditors / ViewsBuilding and Testing

Page 2: eclipse.dk - Eclipse RCP Under the Hood

PR0029 - 2010-05-31

2

About Me

Tonny Madsen, Founder and Owner of The RCP Company

20 years of experience in system development in major companies 9 years experience as the Systems Architect of an 20+ MLoC project 8 years of experience with Eclipse and Eclipse RCP

Solutions Member of the Eclipse Foundation Chairman of Eclipse.dk Extern Lecturer at IT-University on Model Driven Development and

Domain Specific Languages Regular speaker at EclipseCon, Eclipse Summit, etc

Page 3: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

3

Eclipse Architecture

Goals for the Eclipse architecture Be able to host any number of 3rd party applications Scalability in terms of size and complexity of hosted applications Alignment with native UI look-n-feel

Flexible architecture, structured around Plug-ins – the basic unit of functionality Extension points – the defined interfaces between plug-ins

This architecture allows for Implementation of 3rd party applications on top of the basic platform (Eclipse

RCP) Additional tools to be integrated in the platform Integrated tools to be further extended

Page 4: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

4

EclipsePlatform

Res

ourc

es

Wor

ksp

ace

Hel

p

Upd

ate

Tea

m

Web

Ser

ver

File

syst

ems

Apa

che

Sea

rch

Nav

igat

or

Intr

o

Tex

t E

dito

rs

Eclipse Architectural Components

JDT

CV

S

WT

P

Da

tato

ols

VE

BIR

T

Myl

yn

PD

E

Eclipse RCP

Run-time/OSGi

SWT

JFace

WorkbenchP

refe

renc

es

Jobs

ICU

Com

man

ds

Reg

istr

y

CD

T

Page 5: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

5

The Basic RCP Components

In the Eclipse, everything is a plug-in including the run-time platform itself It is a small kernel that represents the base of the platform Built on top of OSGi

All subsystems built on the run-time platform follows the rules of plug-ins: They are plug-ins themselves

RCP includes: Component Management Resources Management Preferences Workbench (include SWT and JFace)

RCP does not include the following: Update Help This can be included from the Eclipse platform

Eclipse RCP

Run-time/OSGi

SWT

JFace

WorkbenchP

refe

renc

es

Jobs

ICU

Com

man

ds

Reg

istr

y

Page 6: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

6

ApplicationPlatform

Com

m.

Log

ging

Hel

p

Upd

ate

Aut

h.

Aud

itin

g

Apa

che

Intr

o

Your Typical RCP Application

Ba

se

Ad

d-o

n

Ad

d-o

n

Ad

d-o

n

Ad

d-o

n

De

bu

g T

oo

ls

Da

ta M

od

el

Eclipse RCP

Run-time/OSGi

SWT

JFace

WorkbenchP

refe

renc

es

Jobs

ICU

Com

man

ds

Reg

istr

y

Ad

d-o

n

Page 7: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

7

Organizing the Platform

The software of an Eclipse system is based on the following terms: Plug-ins – a plug-in is the basic unit of software Fragments – a fragment is an add-on to an existing plug-in with additional

functionality Features – a feature is a number of plug-ins that is distributed and updated as a

whole Applications – an application is a Java class that implements a specific interface

and is declared as such in the plug-in Products – a product is a set of features or plug-ins along with the appropriate

branding

Page 8: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

8

Extension Points

Describe additional functionality that could be integrated with the platform External tools extend the platform to bring specific functionality Java Development Tooling (JDT) and Plug-in Development Environment (PDE) are

external tools integrated with the platform Extension points are used to

Add an implementation for a generic feature Extend the workbench Extend common object factory

Advantages: Allows for late load and startup of plug-ins Provides a common “registry” for most extensions like views, perspectives, commands,

etc Disadvantages:

Makes it harder to understand flow of control ID Hell!

Extension points may have corresponding API interface Describes what should be provided in the extension

Page 9: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

9

Eclipse RCP

Run-time/OSGi

SWT

JFace

Workbench

Pre

fere

nces

Jobs

ICU

Com

man

ds

Reg

istr

y

The Role of Run-Time/OSGi

Dynamic module system for Java Solves many of the problems of big applications

Late activation of code Multiple versions of the same library

Eclipse is the reference implementation!

Page 10: eclipse.dk - Eclipse RCP Under the Hood

L0001 - 2008-11-27

10

Eclipse RCP

Run-time/OSGi

SWT

JFace

Workbench

Pre

fere

nces

Jobs

ICU

Com

man

ds

Reg

istr

y

Workbench

Represents the desktop development environment

It contains set of tools for resource management

It provides common way of navigating through the resources

Multiple workbenches can be opened at the same time in individual windows

Page 11: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

11

Eclipse User Interface Layers

4 Layers: The Eclipse Workbench

Overall look-n-feel JFace

Architecture-independent models SWT

Platform independent API yet rather close to the metal Native widgets

Platform dependent: Windows, Linux, Mac, Unix The “Eclipse User Interface Guidelines” governs the look-n-feel of the workbench

and JFace Consequently (nearly) all Eclipse RCP based applications look the same!

Use the SWT Bible “The Definitive Guide to SWT and JFace” by Robert Harris and Rob Warner

Eclipse RCP

Run-time/OSGi

SWT

JFace

Workbench

Pre

fere

nces

Jobs

ICU

Com

man

ds

Reg

istr

y

Page 12: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

12

SWT and the Native Widgets

SWT is short for ”The Standard Widget Toolkit” SWT is a sub-project of the Eclipse project SWT has a common API on all target platforms – the implementation is different

Base plug-in org.eclipse.swt contains only MANIFEST.MF plus some configuration files

A set of platform specific fragments implements all of SWT org.eclipse.swt.win32.win32.x86 for 32-bit Windows on x86 (not Vista look-n-

feel) org.eclipse.swt.wpf.win32.x86 for Wista look-n-feel for 32-bit Windows on

x86 SWT is a thin layer on top of the native widgets

Windows Mac Motif GTK

SWT can easily be used stand-alone

Page 13: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

13

SWT on Different Platforms

Page 14: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

14

Working with SWT

SWT API is not as regular as Swing The SWT site contains a large repository of “SWT Snippets” that demonstrates most

of the abilities of SWT

To find leaks with graphical resources use sleak

It is possible to integrate SWT and Swing to a very large degree Though expect problems with shortcuts and focus management

Page 15: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

15

SWT Widgets

Basic Button, Combo, Composite, Group, Label, Link, List, Menu, ProgressBar, Shell, Slider, Scale, Spinner, TabFolder, Table, Text, ToolBar, and Tree

Advanced Browser, Canvas, CBanner, CCombo, CLabel, CoolBar, CTabFolder, DateTime, ExpandBar, GLCanvas, Sash, SashForm, ScrolledComposite, StyledText, SWT_AWT, TableCursor, and Tray

Other Sources – e.g. Nebula, Sourceforge.net FormattedText, Gallery, Grid, and many more

The C... versions of Label, Combo and TabFolder are emulated and should normally be avoided if possible

Tonny Madsen
3.4: Button.setGreyed(...), ProgressBar.setState(..), Shell.setAlpha(..), setFullScreen3.4: irregular controls: http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet285.java?view=co
Page 16: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

16

SWT Widgets

Page 17: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

17

The Basic Widget Hierarchy

Widget

Control Menu Item

Button Label Composite List MenuItem TableItem TabItem

Canvas Combo Form OleSiteClient Table, …

Page 18: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

18

The Basic Widget Hierarchy

Widget Top-level abstract super class for all widgets Support for

arbitrary associated data general event management disposal management

Control Top-level abstract super class for controls Support for

foreground, background border content menu focus management layout management – layout, location and size

Composite Control that can contain other controls Support for layout management

A Composite must have a layout manager, or the child widgets will not be shown!

Page 19: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

19

Using SWT Widgets

Common constructor form – e.g. new Text(parent, SWT.PASSWORD) The parent The style argument specifies the basic sub-function of the widget

Use Text controls for data values event when read-only, as this makes it possible to select and copy the value

Page 20: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

20

Using SWT Styles

Second argument of all widget constructions – e.g. new Text(parent, SWT.PASSWORD)

The most use styles are SWT.NONE – no style needed SWT.LEAD, SWT.CENTER, and SWT.TRAIL - the alignment of text in labels, menus

and buttons SWT.ARROW, SWT.CHECK, SWT.PUSH, SWT.RADIO, and SWT.TOGGLE - the sub-type of

a button SWT.PASSWORD - Text is used for password entry SWT.V_SCROLL, SWT.H_SCROLL, and SWT.NO_SCROLL – Table or Tree has vertical,

horizontal or no scroll bar (3.4 and later)

Some special considerations regarding styles Some style arguments cannot be changed once specified in the constructor (e.g. SWT.CHECK for a Button), whereas others can (e.g. SWT.LEAD for Label)

Some style arguments have different meaning for different widgets –e.g. SWT.MULTI for Table and Text

Page 21: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

21

Managing Composites (Composite)

Children are added to a composite during the construction of the children new Text(composite, SWT.BORDER)

Children are retrieved using comp.getChildren()

Children are removed using child.dispose()

Children can be moved in the parent using child.moveAbove(otherChild) child.moveBelow(otherChild)

When a composite is changed, remember to re-layout comp.layout()

Setting the background of children of a composite: comp.setBackgroundMode(SWT.INHERIT_DEFAULT)

Page 22: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

22

SWT Layout Managers

The positioning and sizing of controls in a Composite (and subclasses) is performed using layout managers

SWT includes a rather complete set of standard layout managers FillLayout and RowLayout: layout is a single row or column GridLayout: layout in a grid with size constrains FormLayout: layout in canvas with size and edge-to-edge constrains Most GUI designer can handle these

A new layout manager can be created fairly easily created computeSize: computes the “natural” size of the Composite layout: lays out the controls of the Composite

public abstract class Layout {protected abstract Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache);protected abstract void layout(Composite composite, boolean flushCache);

}

Page 23: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

23

Using the Grid Layout (GridLayout)

Grid Layout is the most used layout manager in Eclipse It works by adding the child widgets to the cells in a grid

Widgets are added in sequence When using a Grid Layout, the parent uses the GridLayout and all children use

GridData

final Composite composite = new Composite(parent, SWT.NONE);final GridLayout gridLayout = new GridLayout(3, false);composite.setLayout(gridLayout);

label = new Label(composite, SWT.NONE);label.setText("Label");

text = new Text(composite, SWT.BORDER);text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));// …

Page 24: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

24

Using the Grid Layout (GridLayout)

The GridLayout class has two arguments numColumns – the number of columns in the grid (defaults to 1) makeColumnsEqualWidth – whether all columns in the grid have equal width

(defaults to false)

Page 25: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

25

Using the Grid Data (GridData)

GridData specifies how a child widget is laid out in the parent grid A GridData holds the following primary information

Grab Excess Space (horizontal and vertical) – describes whether the grid column or row should expand to grad any excess space (defaults to no grab)

Span (horizontal and vertical) – describes the number of cells the widget should span (defaults to 1,1)

Alignment (horizontal and vertical) – placement of widget within the cells – one of SWT.BEGINNING, SWT.CENTER, SWT.END or SWT.FILL (defaults to BEGINNING, BEGINNING)

A GridData also contains information about indentation, minimum size and size hints Don’t use the two-argument constructor!

1,1 2,12,2

C,C F,C

E,E

Horizontal grabNo grab

Page 26: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

26

Layout Managers for Tables and Trees

Tables and Trees have a layout the determine how columns are sized TableLayout

Will only resize the columns the first time! Applied to the Table or Tree

TableColumnLayout Applied to the Composite of the Table or Tree

Column constrains saved as layout.setColumnData(column, constraint) Both layout manager are based on the same column constraint objects:

ColumnPixelData – makes a column a specific width in pixels ColumnWeightData – makes a column a specific percentage of the summed

width

Page 27: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

27

SWT Events

SWT events and listeners exist in two versions: A simple very light-weight version

One event format and listener interface A type-safe version

Multiple event formats and listener interfaces tailored to the specific use The difference is illustrated in the following example

filter.addListener(SWT.KeyDown, new Listener() {public void handleEvent(Event event) {

if (event.type == SWT.KeyDown) {//...

}}

});

filter.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {

//...}

});

Page 28: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

28

SWT Events

Key KeyDown, KeyUp, HardKeyDown, HardKeyUp

Mouse MouseDown, MouseUp, MouseMove, MouseEnter, MouseExit, MouseDoubleClick, MouseHover, MouseWheel

Control Paint, Move, Resize, Dispose

Selection Selection, DefaultSelection

Focus FocusIn, FocusOut

Tree and Table Expand, Collapse, EraseItem, MeasureItem, PaintItem

Shell Iconify, Deiconify, Close, Activate, Deactivate

Menu Show, Hide, Arm, MenuDetect

Basic Controls Modify, Verify, SetData, Settings

Drag-n-Drop DragDetect

Misc Help

Page 29: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

29

Lab Exercise

Create a view with the following look using simple SWT controls GridLayout, GridData Label, Text, Button …addSelectionListener(…)

Another extra lab for the fast ones: add “stuff” to the lab to only allow “a” and “b” in the text field and to only allow more “a” than “b”! Use a Verify listener

public class View extends ViewPart {public void createPartControl(Composite parent) {

Composite top = new Composite(parent, SWT.NONE);// Add something here…

}

public void setFocus() {}

}

GridLayout with 2 columns

Label TextFILL aligned + grab

Buttonspans two columns, RIGHT alignedSelectionListener that prints current text of Text control

Page 30: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

30

Forms UI

A newer addition of the look-n-feel of the Eclipse workbench is the Forms UI in org.eclipse.ui.forms.

Provide a Web browser like look-n-feel to forms

PDE is a good example of the increasing use of this new technology

Have some of the same problems as seen in ordinary Web applications: extensive use of the mouse! Normally not welcome in office applications

Tonny Madsen
http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.isv/guide/forms.htmExtend desc on Form UI
Page 31: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

31

More Information

“Eclipse User Interface Guidelines: Version 2.1” http://www.eclipse.org/resources/resource.php?id=162

The Look-n-Feel guidelines for Eclipse – heavily influenced by the corresponding Microsoft Windows Look-n-Feel guidelines

SWT home http://www.eclipse.org/swt/

SWT versus Swing http://www.developer.com/java/other/article.php/2179061

“Using SwingRCP (instead of SWT) in RCP” http://www.eclipsezone.com/eclipse/forums/t104467.rhtml

A discussion of different ways to integrate Eclipse RCP and Swing “The Definitive Guide to SWT and JFace” by Robert Harris and Rob Warner (ISBN:

978-1590593257) As it says – “The Definitive Guide…” – and needed due to the pure javadoc of

SWT “SWT Snippet” Repository

http://www.eclipse.org/swt/snippets/ A large repository of sample code for most uses of SWT!

Tonny Madsen
Sort!
Page 32: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

32

More Information

“Plug a Swing-based development tool into Eclipse” http://www-128.ibm.com/developerworks/opensource/library/osswing/

“Eclipse Forms: Rich UI for the Rich Client” http://www.eclipse.org/resources/resource.php?id=140

“Custom Drawing Table and Tree Items” http://www.eclipse.org/resources/resource.php?id=122

“Using Images in the Eclipse UI” http://www.eclipse.org/resources/resource.php?id=236

“Rich clients with the SWT and JFace” http://www.javaworld.com/javaworld/jw-04-2004/jw-0426- swtjface.html?page=2

“SWT: The Standard Widget Toolkit” http://www.eclipse.org/resources/resource.php?id=241

“Understanding Layouts in SWT” http://www.eclipse.org/resources/resource.php?id=242

A good overview of the different basic layouts in Eclipse.

Page 33: eclipse.dk - Eclipse RCP Under the Hood

L0018 - 2008-11-10

33

More Information

“Drag and Drop in the Eclipse UI” http://www.eclipse.org/resources/resource.php?id=202

“Adding Drag and Drop to an SWT Application” http://www.eclipse.org/resources/resource.php?id=200

“Eclipse Data Binding Test Drive” (webinar) http://www.eclipse.org/resources/resource.php?id=299

“Swing/SWT Integration” http://www.eclipse.org/resources/resource.php?id=381

“Eclipse Forms: Rich UI for the Rich Client” http://www.eclipse.org/articles/Article-Forms/article.html

The Forms UI explained with some good examples