Рабочее пространство Eclipse RCP e4 switch программно - PullRequest
0 голосов
/ 03 ноября 2018

Я бы хотел переключить рабочую область в чистом приложении rcp e4 в коде. Я нашел старый способ, который использует org.eclipse.ui.internal.ide.actions.OpenWorkspaceAction.

Но этот подход не работает в чистом приложении e4, потому что модель приложения изменилась.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

У меня есть решение этой проблемы:

Большая проблема с e4 состоит в том, что код возврата не будет изменен, и равноденствие нуждается в коде IApplication.EXIT_RESTART.

Обход: - Сначала внедрить интерфейс IApplication (см. Код ниже)

 public class FrameworkE4Application implements IApplication {
        private static FrameworkE4Application application;
        private Integer exit_code = IApplication.EXIT_OK;
        private E4Application e4Application;

        public static FrameworkE4Application getInstance() {
            return application;
        }

        public void setRestartCode() {
            exit_code = IApplication.EXIT_RESTART;
        }

        @Override
        public Object start(IApplicationContext context) throws Exception {
            application = this;
            e4Application = new E4Application();
            e4Application.start(context);
            return exit_code;
        }

        @Override
        public void stop() {
            e4Application.stop();
        }
    }  

Затем вам нужно зарегистрировать свою собственную реализацию в режиме равноденствия. Для этого расширьте точку расширения org.eclipse.core.runtime.applications (см. Ниже).

  <extension id="FrameworkE4Application"
      point="org.eclipse.core.runtime.applications"> 
      <application> 
         <run  class="FrameworkE4Application"> 
            <parameter name="optimize" value="true"/> 
         </run> 
       </application> 
   </extension> 

Если вы хотите начать это как продукт, вам нужно перезаписать точку расширения org.eclipse.core.runtime.products (см. Ниже).

 <product
    name="YourProduct"
    application="FrameworkE4Application">
    <property
        name="appName"
        value="ProductPath">
    </property>
 </product>

А вот реализация действия, которое перезапускает ваше приложение.

public class RestartApplicationAction {
    @Execute
    public void execute(IWorkbench workbench) {
        FrameworkE4Application.getInstance().setRestartCode();
        workbench.close();
    }
}

Теперь вы можете установить новое местоположение и перезапустить приложение с новым рабочим пространством.

0 голосов
/ 03 ноября 2018

Похоже, что сделать это невозможно.

Когда вы запускаете чистое приложение e4, основным IApplication является org.eclipse.e4.ui.internal.workbench.swt.E4Application. Этот код не поддерживает специальный код возврата, используемый для сигнализации о необходимости изменения рабочего пространства.

Вы можете перезапустить существующую рабочую среду, набрав IWorkbench.restart. IWorkbench - это org.eclipse.e4.ui.workbench.IWorkbench, который может быть введен.

...