Jan05
e4 Zugriff auf Parts

Um in Eclipse 4 RCP auf Parts zuzugreifen gibt es einen Service mit dem man sich die Instanzen von Parts geben lassen kann. Wie das geht zeige ich im folgenden Artikel.

In Eclipse 4 RCP werden die einzelnen Views einer Perspektive Parts genannt. Weitere Infos dazu in meinem Artikel über Eclipse 4 RCP. Um nun von einem Part oder von einem Handler auf einen anderen Part zuzugreifen, benötigt man dessen aktive Instanz. Dies geht ganz einfach, indem man sich den EPartService injizieren lässt. Über diesen bekommt man die Instanz eines anderen Parts über dessen ID. Diese wird im Application-Model beim anlegen des Parts festgelegt.

public class Part1 {
   public static final String ID = "de.discoveration.blog.part1";

   public void doSomething() {
      // ....
   }
}

public class Part2 {
   @Inject
   private EPartService partService;

   private void myMethod() {
      MPart mpart = partService.findPart(Part1.ID);
      Part1 part1 = (Part1) mpart.getObject();
      part1.doSomething();
   }
}

In einem Handler kann man sich den EPartService auch als Methoden-Parameter übergeben lassen. Noch interessanter ist sich den aktiven Part geben zu lassen, der als letztes den Focus hatte bzw. den, aus dem der Handler aktiviert wurde.

public class DeletePostenHandler {

   @Execute
   public void execute(
          @Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
          @Named(IServiceConstants.ACTIVE_PART) MPart activePart)

      AbstractPostenPart postenPart =
          (AbstractPostenPart) activePart.getObject();
      Posten posten = postenPart.getSelectedPosten();

      boolean ok = MessageDialog.openQuestion(
          shell,
          "Löschen bestätigen",
          "Möchten Sie den Posten '" +
                    posten.getText() +
                    " wirklich löschen?");
      if (ok) {
         postenPart.deletePosten(posten);
      }
   }
}

Eine berechtigte Frage ist natürlich, ob es ein gutes Design ist, wenn man die einzelnen Parts und Handler auf diesem Weg eng aneinander koppelt. Oder ob es nicht klüger ist eine lose Kopplung zu wählen und über Events zu arbeiten oder einen übergreifenden Controller zu haben.

Schreibe einen Kommentar

Anmelden um einen Kommentar abzugeben.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*