2009-09-03 9 views
6

Je souhaite utiliser l'éditeur XML par défaut (org.eclipse.wst.xml.ui) d'Eclipse dans une application RCP. J'ai besoin de lire le DOM du fichier xml actuellement ouvert. Le plugin n'offre aucun point d'extension, j'essaie donc d'accéder aux classes internes. Je suis conscient que le je ne devrais pas accéder aux classes internes, mais je n'ai pas une autre option.Eclipse RCP: Comment accéder aux classes internes de plugins?

Mon approche consiste à créer un fragment et un point d'extension pour pouvoir lire les données du plugin. J'essaie de ne pas recompiler le plugin, c'est pourquoi j'ai pensé qu'un fragment était nécessaire. Je veux juste le charger et extraire les données à l'exécution. Donc, ma question est la suivante: y a-t-il une autre façon d'accéder aux classes d'un plugin? si oui, comment? Tout tutoriel, page de documentation ou lien utile pour l'une des méthodes est le bienvenu.

Répondre

4

Puisque personne n'a répondu à ma question et j'ai trouvé la réponse après de longues recherches, je posterai la réponse pour que d'autres puissent l'utiliser s'ils rencontrent ce problème.

Pour accéder à un plug-in au moment de l'exécution, vous devez créer un point d'extension et une extension attachée à celui-ci dans le plug-in auquel vous essayez d'accéder. L'ajout de classes à un plugin utilisant un fragment n'est pas recommandé si vous souhaitez accéder à ces classes depuis l'extérieur du plugin. Donc, la meilleure solution pour cela est d'obtenir la source du plugin depuis le dépôt CVS et de faire les modifications directement dans la source du plugin. Ajoutez des points d'extension, des extensions et le code de fonctionnalité.

Tutoriels:

1

Je fini d'étendre XMLMultiPageEditorPart comme ceci:

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

Ce n'est pas une implémentation propre, mais il fait le travail.