2009-09-03 14 views
6

Ich möchte den Standard-XML-Editor (org.eclipse.wst.xml.ui) von Eclipse in einer RCP-Anwendung verwenden. Ich muss das DOM der aktuell geöffneten XML-Datei lesen. Das Plugin bietet keinen Erweiterungspunkt, also versuche ich auf die internen Klassen zuzugreifen. Mir ist bewusst, dass ich nicht auf die internen Klassen zugreifen sollte, aber ich habe keine andere Möglichkeit.Eclipse RCP: Wie auf interne Klassen von Plugins zugreifen?

Meine Vorgehensweise besteht darin, ein Fragment und einen Erweiterungspunkt zu erstellen, um Daten aus dem Plugin lesen zu können. Ich versuche das Plugin nicht neu zu kompilieren, deshalb dachte ich, dass ein Fragment notwendig ist. Ich möchte es nur laden und die Daten zur Laufzeit extrahieren.

Meine Frage ist also: Gibt es eine andere Möglichkeit, auf die Klassen eines Plugins zuzugreifen? wenn ja, wie? Alle Tutorials, Doc-Seite oder nützliche Link für eine der Methoden ist willkommen.

Antwort

4

Da niemand meine Frage beantwortet und ich die Antwort nach langen Suchen gefunden habe, werde ich die Antwort für andere zu verwenden, wenn sie auf dieses Problem stoßen.

Um zur Laufzeit auf ein Plug-in zuzugreifen, müssen Sie einen Erweiterungspunkt und eine Erweiterung in das Plugin einfügen, auf das Sie zugreifen möchten.

Das Hinzufügen von Klassen zu einem Plugin mithilfe eines Fragments wird nicht empfohlen, wenn Sie auf diese Klassen außerhalb des Plugins zugreifen möchten.

Also, die beste Lösung dafür ist, die Plugin-Quelle aus dem CVS-Repository zu bekommen und die Änderungen direkt in die Quelle des Plugins zu machen. Fügen Sie Erweiterungspunkte, Erweiterungen und den Funktionscode hinzu.

Tutorials:

1

endete ich so erstreckt XMLMultiPageEditorPart bis:

public class MultiPageEditor extends XMLMultiPageEditorPart implements 
     IResourceChangeListener { 

    @Override 
    public void resourceChanged(IResourceChangeEvent event) { 
     // TODO Auto-generated method stub 
     setActivePage(3); 
    } 

    public Document getDOM() { 
     int activePageIndex = getActivePage(); 

     setActivePage(1); 
     StructuredTextEditor fTextEditor = (StructuredTextEditor) getSelectedPage(); 
     IDocument document = fTextEditor.getDocumentProvider().getDocument(
       fTextEditor.getEditorInput()); 
     IStructuredModel model = StructuredModelManager.getModelManager() 
       .getExistingModelForRead(document); 
     Document modelDocument = null; 
     try { 
      if (model instanceof IDOMModel) { 
       // cast the structured model to a DOM Model 
       modelDocument = (Document) (((IDOMModel) model).getDocument()); 
      } 
     } finally { 
      if (model != null) { 
       model.releaseFromRead(); 
      } 
     } 
     setActivePage(activePageIndex); 
     return modelDocument; 
    } 
} 

Dies ist keine saubere Implementierung ist, aber es wird die Arbeit getan.

Verwandte Themen