Single Source mit Eclipse RCP / RAP

Applikationen mit Eclipse RCP und Eclipse RAP unterscheiden sich an einigen Punkten. Das beste Beispiel ist der Umgang mit Files. Eine RCP-Anwendung kann direkt auf dem lokalen Filesystem des Anwenders arbeiten. Da eine RAP-Anwendung im Browser läuft, funktioniert das dort nicht. Wie können nun aber Files verarbeiten werden?

Die Lösung ist erstmal einfach, der entsprechende Source Code muss für RCP und RAP getrennt entwickelt werden. Der schwierige Part ist es, je nach Umgebung den richtigen Source Code zu verwenden. Eine Variante stelle ich im folgenden vor, sie basiert auf Eclipse-Fragmenten.

Folgende abstrakte Klasse wird als Grundlage in einem Plug-in verwendet:

public abstract class InputStreamFactory {

	public static InputStreamFactory getInstance() {
		try {
			final Class<?> clazz = Class.forName(InputStreamFactory.class.getName() + "Impl");
			return (InputStreamFactory) clazz.newInstance();
		} catch (final Exception ex) {
			// TODO Auto-generated catch block
			ex.printStackTrace();
		}

		throw new IllegalStateException();
	}

	public abstract InputStream createInputStream() throws IOException;

}

Nun müssen für dieses Plug-in noch zwei Fragmente, eins für RCP und eins für RAP, erstellt werden, die eine Klasse InputStreamFactoryImpl enthalten, die abstrakte Klasse InputStreamFactory erweitert. Das RCP-Fragment kann die Methode createInputStream() z. B. implementieren, in dem einfach ein File Dialog geöffnet wird. Die Implementierung des RAP-Fragments ist etwas komplexer. Hier naht aber Hilfe im Eclipse RAP Incubator, in Form eines Upload Widgets.

Zurück