RCP Nach erfolgreicher Erstellung der View, wie weitermachen?

Sno0t

Mitglied
Hallo alle zusammen :)

Im voraus schonmal ein Dankeschön für Hilfe.

Ich bin noch relativ frisch ind er RCP Entwicklung und habe sicher noch nicht alles verstanden, aber genau deswegen bin ich ja hier ;D

Als erstes mein System:
Windows 7 64 bit
8GB Arbeitsspeicher
Dualcore 2.8 GhZ

Eclipse Version 4.31
Java 6

Ich versuche eine RCP-Applikation zu schreiben, in der man Nachrichten über eine Schnittstelle hoch und/runter laden kann.
Ähnlich einem Kommunikationssystem.

Ich habe bereits 3 Views entworfen und diese erfolgreich über die Plugins.xml in der Applikation eingebunden. Alle Views sind Sichtbar.
Am oberen Bereich befindet sich weiterhin eine Toolbar, in der jedoch ein "Login" angezeigt wird.
Sprich 2 Textfelder (eines für Nutzername, eines für Passwort) und ein Button für "ok" der den Login ausführen soll. (Das erstmal nebenbei)

Die Schnittstelle zum Herunter/hochladen und die Authentifizierung existiert noch nicht.

Mich interessiert nun, wie ich am besten (nach einem erfolgreichen Login) vorgehe?

Es gibt bei RCP ja nicht wirklich einen Controller dem ich sagen kann "Lade Nachrichten herunter"
"Füge geladene Nachrichten in View 1 ein" und dann beim Klick auf eine Nachricht "Öffne sie im Bearbeiten-View"

Bzw. mir ist nicht ganz erischtlich wie ich

- den Loginversuch über ein Command verifizieren kann um anschließend die View zu füllen
- Die Views unabhängig voneinander mit den korrekten gefunden und geladenen Daten zu befüllen (Wie genau funktionieren die JFace databindings@.@ )
- Wie mache ich zB. Services (SourceProivder) in meinen Models verfügbar wenn diese ja keine View halten und ich so ja nicht auf getWorkbenchWindow().getService zugreifen kann?

Im gesamten finde ich einiges an RCP noch sehr verwirrend...
Ich meine, ich kann Commands erstellen, aber habe noch nicht so ganz rausgefunden wie ich diese außerhalb der Toolbar oder der Menüs anwenden kann.
Auch bin ich mir noch nicht ganz sicher weas genau die Services bedeuten, da ich hier schon beispiele gefunden habe, die sie als SourceProvider verwenden, dann aber wiederum auch direkt Beispiele wo über Providerfactorys gegangen wird....

Ich hofe mein Problem ist in etwa verständlich...ich neige leider dazu dinge nicht sonderlich gut erklären zu können.

Danke schonmal

Beste Grüße


EDIT:

Ich denke das ich alle "Aufgaben" über Jobs und UIJobs handlen könnte, sehe aber auch hier noch nicht so wirklich wie/wo man diese am besten ausführen kann oder sollte...
 
Zuletzt bearbeitet:

Sno0t

Mitglied
Okay, nach "längerer" ZEit kann man seine Beiträge nicht mehr überarbeiten, daher der Doppelpost, bitte verzeiht ;)

Meine Lösung ist sicher nicht optimal, aber ich möchte dennoch meine Ansätze posten, vielleicht nützt es ja jemandem.

Grundsätzlich:
  • Ich habe mir als erstes ein ApplicationModel angelegt, welches nach dem Singleton pattern funktioniert.
  • Vorteil: Ich kann alle Daten in einem Objekt halten und überall darauf zugreifen
  • Nachteil: Applikation kann nur einmal laufen (Singleton eben)

Login-Vorgang mit Datenfüllung
Das ApplicationModel erbt von einer Klasse "ChangeModel" welches wiederum ein Objekt von PropertyChangeSupport hält.
(Diese Vorgehensweise its auch bei Vogella nachzulesen)

So habe ich das Problem mit dem Login gelöst und kontne die Views nach erfolgreichem Login schnell und einfach benachrichtigen.

Ich habe den Login also nicht über ein Command gestaltet.
Dies hätte ich aber auch folgendermaßen lösen können:
Command für Login und den dazugehörigen Handler erstellen.
Beim Event des Button-clicks dann folgenden Code ausführen:
Java:
IHandlerService service = (IHandlerService) PlatformUI.getWorkbench().getService(IHandlerService.class);
				try {
					service.executeCommand("[...]Commands.login", null);
				} catch (Exception ex) {
writeLog("Login konnte nicht ausgeführt werden, bitte Stacktrace überprüfen", ex);
				}

Damit veantwortet sich auch die Frage nach dem Zugriff auf Services, dieser funktioniert mit der ersten Zeile obigen Codes.

Weiterhin habe ich den Login jetzt in einen Dialog ausgelagert um die Toolbar nicht zweckzu entfremden.

Als Ansatz um dem Singleton-Phänomen zu entgehen, überlege ich entweder über einen Service Global ein MainModel verfügbar zu stellen (evtl in einer Map<Application,Model>) Oder im PluginStart (Activator-Klasse) ein Model anzulegen, auf das ich dann iwie Global zugreifen kann.

Danke an alle die sich Gedanken gemacht haben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Nach Sprachpaket Installation kann eclipse nicht mehr gestartet werden Plattformprogrammierung 4
B Eclipse zeigt Fehler nach Java-Update auf 1.8.0_40 Plattformprogrammierung 3
H PHP Perspective nach Run immer im Vordergrund - Was tun Plattformprogrammierung 0
J Charset-Problem nach Plugin-Export Plattformprogrammierung 1
N RCP Tabelle nach mehreren kriterien sortieren Plattformprogrammierung 2
B RCP LinkageError nach Produktexport Plattformprogrammierung 3
S RCP ContextMenu nach selectedTreeItem anpassen? Plattformprogrammierung 5
M RCP TableViewer schrumpft in View nach manueller Resize auf 1 Zeile Plattformprogrammierung 5
A RCP RAP-Bundle nach Installation nicht auffindbar?! Plattformprogrammierung 5
A RCP HTTP ERROR 404; einwandfreier Start nach Browser-Reload Plattformprogrammierung 4
S xpend ecore::EJavaObjet nach Integer oder String Plattformprogrammierung 11
M Nach Umbenennung der Packages viele Probleme Plattformprogrammierung 11
dzim Migration einer bestehenden Applikation nach e4 Plattformprogrammierung 11
lumo RCP libraries werden nach dem export nicht gefunden Plattformprogrammierung 17
dzim RCP Überführen einer RCP-Anwendung nach RAP Plattformprogrammierung 11
B Cross Build von WinXP, Fail nach Splash auf MAC Plattformprogrammierung 2
N Neustart nach preference-Änderung Plattformprogrammierung 13
M Nach Export läuft Applikation nicht mehr??? Plattformprogrammierung 2
G swt widget disposed nach update auf 3.2 Plattformprogrammierung 4
R Framework zur Erstellung Java-Desktop-Anwendungen Plattformprogrammierung 14

Ähnliche Java Themen


Oben