# Kommunikation zwischen Plugins (RCP)



## Tr1aler (24. Aug 2007)

Hi Leute, kennt sich von euch jemand mit der Kommunikation zwischen Plugins aus? Also alles rund um Extensions und Extension Points (Rich Client Plattform).

Wenn ja, würde mich über ein paar Infos oder Tips freuen.



Danke


----------



## Wildcard (24. Aug 2007)

Was willst du denn wissen?


----------



## Tr1aler (24. Aug 2007)

naja im allgemeinen wie die Kommunikation zwischen den Pluginsfunktioniert. Ich versteh das noch nicht so ganz denn bei einem Plugin kann man ja z.B. eine View als Extension erstellen. Das versteh ich abern icht so ganz. Mein Ziel ist es halt, Informationen wie zB.: die Nr. eines Kunden unter versch. Plugins auszutauschen. Sagen das eine Plguin entählt eine View in der ein Baum mit Kunden ist. Wenn ich auf dem Baum jmd. anklicke soll die Kundennr an ein anderes Plugin weitergegeben werden, welches z.B. Kurzinformationen über diesen liefert.


Hoffe ich konnte mein Anliegen in etwa verständlich machen.


----------



## Wildcard (24. Aug 2007)

Dann muss die View mit dem Baum einen SelectionProvider zur Verfügung stellen.
Die andere View registriert sich als PartListener und und kann dann auf Selektion reagieren.
Die Übergabe der Daten solltest du über die IAdaptable Schnittstelle realisieren.


----------



## Tr1aler (24. Aug 2007)

ok danke für die schnelle Antwort. hast du dazu vll. ein Tutorial oder so denn ich hab IAdaptable zwar schonmal gelesen, das wars aber leider auch schon


----------



## Wildcard (24. Aug 2007)

So kompliziert ist das nicht. Angenommen du zeigst Objekte der Klasse A in deinem Tree an, aber deine View erwartet den Interface Typ X. Konkret möchtest du den FooBar String haben. Oft ist es sinnvoll deine Klasse A nicht mit einem fremden Interface zu 'verschmutzen'. Also implementierst du IAdaptable und gibst ein Objekt zurück, das die Schnittstelle erfüllt. Das lässt sich wahlweise über den AdapterManger und die plugin.xml, oder direkt lösen.

```
class A implements IAdaptable
{
      private String geheimerString;

      public String getGeheimerString()
      {
             return geheimerString();
       }

      public Object getAdapter(Class adapter)
      {
            if(adapter==X.class)
               return new XWrapper(this);
      }
}

class XWrapper implements X
{
        private A a;

        public XWrapper(A a)
        {
             this.a=a;
        }

        public String getFooBar()
        {
              return a.getGeheimerString();
        }
}

interface X
{
       String getFooBar();
}
```

Deine View bekommt nun eine Selektion:


```
public void selectionChanged(ISelection selection)
{
        IAdaptable adaptable = (IAdaptable)((IStructuredSelection)selection).getFirstElement();
        X myData = adaptable.getAdapter(X.class);
        System.out.println(myData.getFooBar());
}
```

Wenn nun die Klasse A gar nichts davon wissen soll, das sie etwas mit dem Interface X zu tun hat, gibst du den Adapter nicht direkt zurück, sondern lässt das vom AdapterManager erledigen:


```
public Object getAdapter(Class adapter)
{
    return Platform.getAdapterManager().getAdapter(this, adapter);
}
```


----------



## Tr1aler (24. Aug 2007)

ok danke ich werd mal probieren mich da reinzufummeln. aber danke für die antwort und den code... denke mal derhilft mir weiter..


----------



## Tr1aler (28. Aug 2007)

Hey Leute, ich habe im Moment eine RCP-Anwedung und 2 Plugins zwischen denen ich Informationen austauschen will. Ich habe also im Plugin was die Informationen erhalten soll einen ExtensionPoint mit einem dazugehörigen Schema erzeugt. Jetzt muss ich in dem Plugin was die Informationen zur Verfügung stellt doch eine Extension erstellen oder?
Von welchem Typ muss die Extension sein etc.?
Komme momentan nicht weiter.
Wenn jemand Tutorials oder tips für mich hat bitte meldet euch. Brauche dringend und schnell Hilfe.

Danke


----------



## Wildcard (28. Aug 2007)

Um 'Informationen' auszutauschen brauchst du nicht zwingend einen Extension Point.
Erklär was du machen willst, so ist die Frage nutzlos.


----------



## WieselAc (28. Aug 2007)

Extension points machen am meisten sein, wenn die Plugins unabhängig von einander sein sollen. 

Konkretes Beispiel du hast ein komplexes Programm mit vielen Funktionen. Der Kunde ist aber geizig und will nicht für Sachen bezahlen, die er nicht braucht. Da du aber auch nicht blöd bist und dem Kunden nichts gibts, dass er nicht bezahlt, lässt du einfach alle Plugins weg, die Funktionalität bereit stellen, die nicht bezahlt wird. 

Und genau für sowas (und noch einiges anderes) sind Extensionpoints super. Wenn eine Plugins den Extension Point implementieren ist es gut, wenn nicht dann auch.


----------



## Ohlsen (28. Aug 2007)

Hallo,

ich versuche mich mit Tr1aler zusammen in RCP einzuarbeiten, was uns beiden aber nur sehr schwer fällt (mangelnde Infos und Ansprechpartner)

Also um das erstmal zu verstehen, haben wir 2 Plugins erstellt. In dem ersten Plugin ist ein Baum zur Navigation und in dem 2. Plugin soll z.B. der Inhalt der View an den ausgewählten Menüeintrag im Baum angepasst werden. Z.B. klicke ich im Baum einen Namen an, im anderen Plugin soll er durch eine Erweiterung den Namen übergeben bekommen und danach Informationen zu dem Namen laden.

An sich müssten die beiden Plugins nicht unabhängig voneinander sein, aber wir dachten uns das uns diese Unabhängigkeit später evtl. Vorteile bietet.


----------



## Wildcard (28. Aug 2007)

Ich hab's schonmal gesagt, dafür braucht man keinen Extension Point.
Ihr müsst nur über den SelectionProvider auf die Selektion reagieren und die Selektion nach einem passenden Adapter fragen.


----------



## Tr1aler (28. Aug 2007)

Ja ich weiß, dafür hast du uns ja den Code (s.O.) geschickt, wir wollen die Plugins aber enau wie WieselAc schon meinte UNABHÄNGIG voneinander machen und wollen daher mit Extensions/ Extension Points arbeiten und blicken da aber nicht so ganz durch und würden daher gerne zu EXTENSIONS/EXTENSION POINTS Hife oder Infos haben.

Danke für deine Bemühungen aber wir brauchen Hilfe zu Extensions.


----------



## Wildcard (28. Aug 2007)

Die PlugIns sind dann unabhängig. Extension Points haben ihre Anwendungsfälle und sind eine sehr nette Sache, aber man muss nicht auf teufel komm raus einen Anbieten.


----------



## Ohlsen (28. Aug 2007)

so richtig klar kommen wir damit noch nicht. :-(

hättest du vielleicht noch ein Codebeispiel mit einer genauen Erklärung was wir zu tun haben.

Ausgangspunkt:
RCP mit 2 Plugins (je eine View).
In der einen View z.B. ein Button mit dem man in der anderen View ein Labelfeld ändern kann oder so ähnlich.

Danke für deine Geduld. RCP ist gerade komplettes Neuland für uns.


----------



## Wildcard (28. Aug 2007)

Von der Mechanik her wollt ihr genau das gleiche wie die Eclipse Properties View.
So wird's gemacht:
http://www.eclipse.org/articles/Article-Properties-View/properties-view.html


----------



## Tr1aler (31. Aug 2007)

Kann mir jemand ein Beispiel für die Logik von Extensions und Extensionpoints (und den dazugehörigen Schemas) geben?.
Hab vor 2 Wochen mit RCP angefangen und versteh noch nicht all zu viel.

Ich würde gerne ein Beispiel für die Logik die dahinter steckt haben und am besten ein Codebeispiel welcher Code ungefähr in welcher Klasse stehen muss. Also welchen Code braucht das Plugin das die Extension bereit stellt, bzw. welchen braucht die Klasse die den Extension Point bestitz und auf eine Extension wartet.


Würde mich über eure Hilfe freuen und entschuldige mich schonmal für, wahrscheinlich kommende, dumme Fragen^^

RCP ist für mich komplettes Neuland



Danke im Vorraus


----------



## Wildcard (31. Aug 2007)

*sigh*
Immer noch nicht überzeugt das eine Extension hier nicht der optimale Weg ist?

http://www.java-forum.org/de/viewtopic.php?t=54983


----------



## Gast (1. Sep 2007)

doch, aber ich hab da nicht die Entscheidungskraft, außerdem gehts nich nur um das was ich da geschrieben habe sondern da kommen noch ein paar andere Sachen und deswegen würd ich das ganze System gerne richtig verstehen.

Danke


----------

