2009-09-03 22 views
6

Quiero usar el editor XML predeterminado (org.eclipse.wst.xml.ui) de Eclipse en una aplicación RCP. Necesito leer el DOM del archivo xml actualmente abierto. El complemento no ofrece ningún punto de extensión, entonces estoy tratando de acceder a las clases internas. Soy consciente de que no debería acceder a las clases internas, pero no tengo otra opción.Eclipse RCP: ¿Cómo acceder a las clases internas de complementos?

Mi enfoque es crear un fragmento y un punto de extensión para poder leer los datos del complemento. Intento no recompilar el complemento, por eso pensé que era necesario un fragmento. Solo quiero cargarlo y extraer los datos en tiempo de ejecución.

Entonces, mi pregunta es: ¿hay alguna otra forma de acceder a las clases de un complemento? si es así, ¿cómo? Cualquier tutorial, página de documento o enlace útil para cualquiera de los métodos es bienvenido.

Respuesta

4

Como nadie respondió mi pregunta y encontré la respuesta luego de largas búsquedas, publicaré la respuesta para que otros la usen si se topan con este problema.

Para acceder a un complemento en tiempo de ejecución, debe crear un punto de extensión y una extensión adjunta en el complemento al que está intentando acceder.

No se recomienda agregar clases a un complemento utilizando un fragmento si desea acceder a esas clases desde fuera del complemento.

Por lo tanto, la mejor solución para esto es obtener la fuente de complemento del repositorio de CVS y realizar las modificaciones directamente en el origen del complemento. Agregue puntos de extensión, extensiones y el código de funcionalidad.

tutoriales:

1

que extendimos XMLMultiPageEditorPart así:

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

Esto no es una aplicación limpia, pero hace el trabajo.

Cuestiones relacionadas