2009-09-03 4 views
6

Я хочу использовать XML-редактор по умолчанию (org.eclipse.wst.xml.ui) Eclipse в приложении RCP. Мне нужно прочитать DOM текущего файла xml. Плагин не предлагает точки расширения, поэтому я пытаюсь получить доступ к внутренним классам. Я знаю, что я не должен иметь доступ к внутренним классам, но у меня нет другого варианта.Eclipse RCP: Как получить доступ к внутренним классам плагинов?

Мой подход заключается в создании фрагмента и точки расширения для чтения данных из плагина. Я пытаюсь не перекомпилировать плагин, поэтому я подумал, что фрагмент необходим. Я просто хочу загрузить его и извлечь данные во время выполнения.

Итак, мой вопрос: есть ли другой способ доступа к классам плагина? если да, то как? Любой учебник, страница документа или полезная ссылка для любого из методов приветствуются.

ответ

4

Поскольку никто не ответил на мой вопрос, и я нашел ответ после долгих поисков, я отправлю ответ другим пользователям, если они столкнутся с этой проблемой.

Для доступа к плагину во время выполнения вы должны создать и добавочную точку и добавление к ней в плагин, к которому вы пытаетесь получить доступ.

Добавление классов в плагин с использованием фрагмента не рекомендуется, если вы хотите получить доступ к этим классам из-за пределов плагина.

Итак, лучшим решением для этого является получение источника плагина из репозитория CVS и внесение изменений непосредственно в источник плагина. Добавьте расширения, расширения и код для функциональности.

Учебники:

1

Я закончил тем, простирающийся XMLMultiPageEditorPart так:

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

Это не чистая реализация, но она получает работу.

Смежные вопросы