42
Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

Embed Size (px)

Citation preview

Page 1: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

Mittwoch, 23.Juni 2004

Hochschule der Medien, StuttgartPhilipp Schill Ralf Schmauder Alexander Eberhardt

Eclipse PatternsSeminar Software Design Patterns

Page 2: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#2

• Einführung in Eclipse• IAdaptable

• Arbeitsbereichskern – Ressourcen

• Zustände persistent speichern mit Memento• Lazy Loading mit virtuellen Proxies

Agenda

Page 3: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#3

Eclipse-PlattformEine Kurzeinführung

Page 4: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#4

Eclipse

• „The Eclipse Platform is an IDE for anything, and for nothing in particular“ (Eclipse Website)

• Im November 2001 von IBM, Object Technology International (OTI) und acht weitern Firmen ins Leben gerufen

• In der Zwischenzeit sind mehr als 50 Firmen beteiligt

• Februar 2004: Umwandlung in eine unabhänige „not-for-profit corporation“

• Ende Juni 2004: Release 3.0, Eclipse als Rich Client Plattform

Page 5: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#5

Was ist Eclipse ?

• Eclipse verkörpert drei Dinge:– Eine JAVA Entwicklungsumgebung– Eine Plattform für Tool-Integration– Eine Open Source-Gemeinde

• Das Eclipse SDK besteht aus drei Ebenen– Plattform– Java Development Tools (JDT)– Plug-In Development Environment (PDE)

Plattform

JDT

PDE

Page 6: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#6

Variabler Plugin Mechanismus

Page 7: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#7

Laufzeitkern - IAdaptableErweiterung von Schnittstellen

Page 8: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#8

Ziel

• Eclipse soll eine erweiterbare Plattform sein d.h. – zusätzliche Dienste oder Verhaltensweise müssen zu

vorhandenen Klassen hinzugefügt werde können– API‘s müssen stabil bleiben (→ keine Interfaces abändern

oder neue hinzufügen

• Strenge Trennung von Benutzeroberfläche und nicht zum UI gehörenden Teilen– Nicht UI Schnittstellen dürfen nicht mit Details der

Benutzeroberfläche verunreinigt werden

Wie erweitere ich die Definition einer Schnittstelle ohne die Definition der Basisschnittstelle zu ändern und ohne die Erweiterung offenzulegen

Page 9: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#9

Beispiel IFile

public interface IFile {…

}

public interface IPropertySource {…

}

public interface IFile extendsIPropertySource

Probleme:• bei vielen Service-Schnittstellen

aufgeblähte Interfaces• Soll die Properties Ansicht erst

später hinzugeügt werden ist dies eine API Änderung

• IFile sollte nicht von der Benutzeroberfläche wissen

Page 10: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#10

Exkurs: Adapter (Wrapper)

• Passe die Schnittstelle einer Klasse an eine andere von ihren Klienten erwartete Schnittstelle an.

Ziel

Operation()

AdaptierteKlasse

SpezifischeOperation()

Adapter

Operation()

Client

Operation()

Spezifische

Operation

Page 11: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#11

Lösung: Erweiterungsobjekt

• „Vorwegnehmen dass die Schnittstelle eines Objekts zukünftig erweitert werden muss. Nach dem Muster Erweiterungsobjekt kann man einer Klasse Schnittstellen hinzufügen und Clients können abfragen, ob ein Objekt eine bestimmte Erweiterung hat.“

• Möchte man dieses Muster implementieren stellen sich folgende Fragen– Möchte ich ein einzelnes Objekt oder eine Klasse erweitern.

Bei einem klassenbasierten Mechanismus fügt man Verhalten (Methoden) der ganzen Klasse hinzu, kann aber keinen Zustand (Felder) hinzufügen

– Wie wird eine Erweiterung beschrieben und identifiziert ?

Page 12: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#12

Implementierung in Eclipse

• Klassenbasierter Mechanismus• Zusätzliches Verhalten wird durch eine

Schnittstelle beschrieben• Klassen die Anpassungsfähigkeit unterstützen

implementieren die Schnittstelle IAdaptable

public interface IAdaptable {

public Object getAdapter(Class adapter);

}

Page 13: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#13

Beispiel für die Benutzung

• Beispiel wie die Properties-Ansicht das momentan markierte Objekt nach seiner IPropertySource Schnittstelle abfragt

org.eclipse.ui.views.properties/PropertySheetEntry

IPropertySource getPropertySource(Object object){

if (object instanceof IAdaptable) {

IAdaptable a = (IAdaptable)object;

return (IPropertySource)a.getAdapter(

IPropertySource.class);

}

}

Page 14: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#14

Verwendung von IAdaptable

• Eine Klasse möchte zusätzliche Schnittstellen anbieten ohne sie in der API offen zu legen. Die Methode getAdapter() wird dann von der Klasse selbst implementiert. Fügt man neue Schnittstellen hinzu muss getAdapter() geändert werden.

• Eine Klasse wird von außen erweitert um zusätzliche Dienste anzubieten. Dann ist keine Änderung in der Klasse notwendig, getAdapter() wird von einer Fabrik bereitgestellt.

Page 15: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#15

Schnittstelle mit IAdaptable offen legenMethode getAdapter() in einer Klasse die IPropertySource unterstützt:

Object getAdapter(Class adapter) {if(adapter.equals(IPropertySource.class)

return new PropertySourceAdapter(this);if(adapter.equals(IShowInSource.class)

return new ShowInSourceAdapter(this);return super.getAdapter(this);

}

Adapter Klasse die IPropertySource implementiert:

public class PropertySourceAdapter implements IPropertySource {

private IFile source;

public PropertySourceAdapter(IFile source) {this.source=source;

}…

}

Page 16: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#16

Adapterfabrik

Eine Klasse AdapterFactory mit den Adaptern implementieren die man einem bestimmten Typ hinzufügen möchte

class FileAdapterFactory implements IAdapterFactory {

public Class[] getAdapterList() {return new Class[] {IPropertySource.class};

}

public Object getAdapter(Object o, Class adapter) {if(adapter == IPropertySource.class)

return new FilePropertySource((IFile)o);return null;

}//…

}

Page 17: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#17

Schnittstelle zu vorh. Typen hinzufügen Die Fabrik für einen bestimmten Typ beim AdapterManager,

den die Klasse Plattform bereitstellt, registrieren

IAdapterManger manger = Platform.getAdapterManager();

IAdapterFactory factory = new FileAdapterFactory();

Manger.registerAdapter(factory,IFile.class);

Aufrufe von getAdapter() auf die Factory umleitenorg.eclipse.core.internal.resources/File

Object getAdapter(Class adapter) {

Platform.getAdapterManager().getAdapter(this,adapter);

}

Page 18: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#18

Arbeitsbereichskern - Ressourcen

Zugriff auf Dateisystemressourcen

Page 19: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#19

Hintergrund

• In Eclipse ist das Dateisystem dominant d.h.– Der Arbeitsbereich wird direkt auf das Dateisystem

abgebildet so daß es kein zwischengelagertes Repository gibt

– Änderungen auf Ressourcen entweder direkt im Dateisystem oder aus Eclipse heraus

– Ressourcen-Plug-In unterstützt die Verwaltung eines Arbeitsbereiches und seiner Ressourcen

Page 20: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#20

Ziel

• Möglichkeit eine Ressource im Dateisystem zu verfolgen – Ressourcen ändern sich im Verlauf des Lebenszyklus

durch:• Erstellung• Inhaltsänderung• Versionen• Löschen• Neue Erzeugung

Page 21: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#21

Lösung Dateisystemzugriff

• Zugriff auf Ressource über Handle und nicht direkt – Handle wirkt wie ein Schlüssel auf eine Ressource (Proxy)

„Kontrolliere den Zugriff auf ein Objekt mithilfe eines vorgelagerten Stellvertreterobjekts“

– Handle speichert die Pfadinformationen der Ressource– Handles sind als Schnittstellen definiert– Handle kann auf nicht existierende Ressource verweisen– Handle speichert keinerlei Zustandsinformationen – Zustand erhält man durch erneutes abrufen des

zugehörigen Info-Objekts (Brücke)„Entkopple eine Abstraktion von ihrer Implementation, so daß beide unabhängig voneinander variiert werden können“

Wie greife ich auf das Dateisystem zu?

Page 22: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#22

Umsetzung

IResource

getFullPath()getMarker()getModificationStamp()getSessionProperty()…

Resource

API

Nicht - API

ResourceInfo

getMarker()getModificationStamp()…

getResourceInfo()

Proxy

Brücke

org.eclipse.core.resources

IWorkspaceRoot

IProject

IFolder

IFile

Page 23: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#23

Beispiel

• Erzeugung eines untergeordneten HandlesIProject project;

IFolder folder = project.getFolder(„someFolder“);

• Erzeugung einer Ressourcefolder.create(…);

• Ein paar Handle-Operationenfolder.getFullPath();

folder.getParent();

folder.exists();

• Operationen die vom Vorhandensein der Ressource abhängig sind lösen eine CoreException – Ausnahme aus

Page 24: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#24

Lösung Ressourcenänderung

• Beobachten von Änderungen über Ressourcen-Listener – Welcher vom Arbeitsbereich zur Verfügung gestellt wird

(Beobachter)– Beobachter registriert sich beim Arbeitsbereich (Subjekt)

Wie wird der Client über Änderungen informiert?

Page 25: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#25

Umsetzung

IWorkspace

addResourceChangeListener()removeResourceChangeListener() resourceChanged(IResourceChangeEvent)

ResourcenChangeListener

Beobachter: Subjekt

Beobachter

*

IResourceChangeListener beobachtet IWorkspace

Page 26: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#26

Benachrichtigungsprinzip

• Push-Modell– Subjekt schickt detaillierte Info von Änderungen an alle

Beobachter egal ob von Interesse oder nicht (IResourceDelta)

– Entsprechendes IResourceChangeEvent welches vom Listener empfangen wird enthält sämtliche Ressourcenabweichungen inklusive sämtlicher Änderungen untergeordneter Elemente

IResourceChangeEvent

getResource()getKind()

IResourceDelta

getResource()getKind()

getDelta()

*

getAffectedChildren()

Page 27: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#27

Benutzeroberflächeder Workbench 1

Zustände persistent speichern mit Memento

Page 28: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#28

Ziel

• Bewahrung von Kontinuität über Sitzungen hinweg– Wiederherstellung des letzten Zustandes

• nach Sitzungsende• Neustart• Beim Öffnen von z.B. einer Java-Klassen

• „User Continuity Rule“: Bewahren Sie den Zustand der Benutzeroberfläche zwischen zwei Sitzungen

Page 29: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#29

Ziel visualisiert

Position merken

entsprechenden Editor starten

Perspektive laden

Page 30: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#30

Lösungsansatz

• JDK bietet bereits Möglichkeit der Serialisierung– „implements Serializable“

• Wird jedoch von Eclipse nicht verwendet– Anfälligkeit gegenüber Änderungen über

verschiedene Versionen hinweg• JDK• Eclipse-Klassenimplementierungen

Page 31: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#31

Lösung: Memento

„Erfasse und externalisiere den internen Zustand eines Objektes, ohne seine Kapselung zu verletzen, sodass das Objekt später in diesen Zustand zurückversetzt werden kann.“

Originator

setMemento(Memento m)createMemento(): Memento

state

Memento

getState()setState()

state

Caretaker

speichert Status

erzeugt &

verwendetMeme

nto

Page 32: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#32

Lösung in Eclipse: IMemento

org.eclipse.ui/Mementopublic interface IMemento {

void putString(String key, String value);String getString(String key);

void putString(String key, Integer value);Integer getString(String key);

IMemento createChild(String type);IMemento[] getChildren(String type);//…

}• IMemento-Objekt speichert

Schlüssel/Wert-Paare einfacher Typen

• Struktur wird durch Baum von IMementos erzeugt

• IMemento-Struktur wird durch XML-basiertes Speicherformat realisiert

Page 33: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#33

Beispiel ResourceNavigator

• Workbench übergibt ein IMemento-Objekt

• Dieses Objekt wird vom Client gefüllt– Serialisierung durch Workbench

• Keine symmetrische Wiederherstellung– Zustand wird über beim Start des

Clients überinit() Methode empfangen

Page 34: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#34

Beispiel ResourceNavigator cont.

org.eclipse.ui.views/ResourceNavigatorprivate static final String TAG_SELECTION="selection";private static final String TAG_ELEMENT="element";

public void saveState(IMemento memento) {//…//save selectionObject elemements[]=

((IStructuredSelection)viewer.getSelection()).toArray();if (elements.length>0) {

IMemento selectionMem=memento.createChild(TAG_SELECTION);

for (int i=0; i<elements.length; i++) {IMemento

elementMem=selectionMem.createChild(TAG_ELEMENT);

elementMem.putString(TAG_PATH,((IResource)elements[i]).getFullPath().toString());

}}

}

Page 35: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#35

Beispiel ResourceNavigator cont.

org.eclipse.ui.views/ResourceNavigator

IMemento memento;

public void init(IViewSite site, IMemento memento) throws PartInitException

{

super.init(site, memento);

this.memento=memento;

}

• Keine symmetrische Wiederherstellung

• Empfang des Memento über init()-Methode

Page 36: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#36

Benutzeroberflächeder Workbench 2

Lazy Loading mit virtuellen Proxies

Page 37: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#37

Ziel

• Einfügen von Menüs, Menübefehlen und Symbolleistenschaltflächen in Eclipse

• Workbench als Paradebeispiel definiertviele Erweiterungspunkte

• Resourcen-Einsparung durch punktgenauesLaden von Klassen

Implementierung der Lazy Loading-Regel

Erweiterungspunkt:Architekturmechanismus, der die Erweiterbarkeit von Plugins öffentlich deklariert.

Page 38: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#38

Lösung in Eclipse

• Manifest-Datei plugin.xml– Definiert Eigenschaften eines Plugins

• (Kontext-) Menüs, Schaltflächen, etc.• Views und Editoren• u.v.a.

• Einsatz von virtuellen Proxies:– Workbench füllt ein PluginAction-Objekt mit

Informationen im Manifest (Titel, Symbol, Tooltip) → Proxy-Objekt

• Eigentliche Aktion kann Proxy nicht ausführen– Weiterleitung der run()-Anforderung an die eigentliche

Erweiterungsklasse

Page 39: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#39

Lazy Loading

Auszug aus Plugin-Konfigurationsdatei plugin.xml:

org.eclipse.team.cvs-ui/plugin.xml<extension point="org.eclipse.ui.actionSets">

<actionSet>…<action

toolbarPath="Normal/CVS"label="Neuer Menüpunkt"tooltip="Mein hinzugefüger Menüpunk"icon="icons/icon.gif"class="contrib.MyMenuClass"id="contrib.MyMenuClass"

</action></actionSet>

</extension>

Page 40: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#40

Lazy Loading

IAction

PluginAction

run()selectionChanged(ISelection)

IActionDelegate

run(IAction)selectionChanged(IAction, ISelection)

MyMenuClass

run(IAction)selectionChanged(IAction, ISelection)

Proxy

Proxy: Subjekt Proxy:

eigentliches Subjekt

PluginAction lädtdie eigentliche Aktion

Page 41: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#41

Ressources

• Eclipse– Erich Gamma, Kent Beck: „Eclipse erweitern“,

Addison-Wesley, 2004– Sherry Shavor et. Al.: „Eclipse“, Addison-Wesley, 2004

• Erweiterungsobjekt/Erweiterungsschnittstelle– R. Martin: „Pattern Languages of Program Design 3“,

Addison-Wesley, 1998– D. Schmidt et. Al.: „Pattern-Oriented Software

Architecture Volume 2: Patterns for Concurrent and Networked Objects“, Jon Wiley & Sons, 2000

Page 42: Mittwoch, 23.Juni 2004 Hochschule der Medien, Stuttgart Philipp Schill Ralf Schmauder Alexander Eberhardt Eclipse Patterns Seminar Software Design Patterns

23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt

Seminar Software Design Patterns Eclipse Patterns

#42

Vielen Dankfür die

Aufmerksamkeit!

Fragen ?