7 Stimmen

Eclipse RCP: Wie kann man auf interne Klassen von Plugins zugreifen?

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. Ich bin mir bewusst, dass ich nicht auf die internen Klassen zugreifen sollte, aber ich habe keine andere Möglichkeit.

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

Also, meine Frage ist: gibt es einen anderen Weg, um die Klassen eines Plugins zugreifen? wenn ja, wie? Jedes Tutorial, doc Seite oder nützlichen Link für eine der Methoden ist willkommen.

4voto

Andrei B. Punkte 1000

Da niemand auf meine Frage geantwortet hat und ich die Antwort nach langem Suchen gefunden habe, werde ich die Antwort für andere veröffentlichen, falls sie auf dieses Problem stoßen.

Um auf ein Plugin zur Laufzeit zuzugreifen, müssen Sie einen Erweiterungspunkt und eine damit verbundene Erweiterung in dem Plugin erstellen, auf das Sie zugreifen möchten.

Das Hinzufügen von Klassen zu einem Plugin mit Hilfe eines Fragments wird nicht empfohlen, wenn Sie auf diese Klassen von außerhalb des Plugins zugreifen wollen.

Die beste Lösung hierfür ist, den Quellcode des Plugins aus dem CVS-Repository zu holen und die Änderungen direkt im Quellcode des Plugins vorzunehmen. Fügen Sie Erweiterungspunkte, Erweiterungen und den Code für die Funktionalität hinzu.

Tutorials:

1voto

Andrei B. Punkte 1000

Am Ende habe ich XMLMultiPageEditorPart wie folgt erweitert:

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 Umsetzung, aber sie erfüllt ihren Zweck.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X