2009-09-03 11 views
6

Chcę użyć domyślnego edytora XML (org.eclipse.wst.xml.ui) Eclipse w aplikacji RCP. Muszę przeczytać DOM pliku xml, który jest aktualnie otwarty. Wtyczka nie oferuje żadnego punktu rozszerzenia, więc próbuję uzyskać dostęp do klas wewnętrznych. Wiem, że nie powinienem mieć dostępu do klas wewnętrznych, ale nie mam innej opcji.Eclipse RCP: Jak uzyskać dostęp do klas wewnętrznych wtyczek?

Moje podejście polega na utworzeniu fragmentu i punktu rozszerzenia, aby móc odczytać dane z wtyczki. Staram się nie rekompilować wtyczki, dlatego pomyślałem, że fragment jest konieczny. Po prostu chcę go załadować i wyodrębnić dane w czasie wykonywania.

Moje pytanie brzmi: czy istnieje inny sposób dostępu do klas wtyczki? jeśli tak, w jaki sposób? Każdy samouczek, strona z dokumentem lub przydatne łącze do dowolnej metody jest mile widziane.

Odpowiedz

4

Ponieważ nikt nie odpowiedział na moje pytanie, a znalazłem odpowiedź po długich poszukiwaniach, opublikuję odpowiedź dla innych osób, jeśli skorzystają z tego problemu.

Aby uzyskać dostęp do wtyczki w czasie wykonywania, należy utworzyć punkt rozszerzenia i rozszerzenie dołączone do wtyczki, do której próbujesz uzyskać dostęp.

Dodawanie klas do wtyczki za pomocą fragmentu nie jest zalecane, jeśli chcesz uzyskać dostęp do tych klas spoza wtyczki.

Najlepszym rozwiązaniem jest pobranie źródła wtyczki z repozytorium CVS i wprowadzenie modyfikacji bezpośrednio w źródle wtyczki. Dodaj punkty rozszerzeń, rozszerzenia i kod funkcji.

Ćwiczenia:

1

skończyło się rozszerzenie XMLMultiPageEditorPart tak:

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; 
    } 
} 

To nie jest czysta realizacja, ale dostaje zadanie.

Powiązane problemy