Как программно вызвать функцию «Обновить» на узле в Custom Navigator? - PullRequest
0 голосов
/ 09 марта 2020

Это относится к инструменту ( Software AG Web Designer ), который добавил функции над Eclipse IDE в качестве плагинов.

Как видно ниже, пользовательский навигатор называется Package Navigator. Также видна кнопка Refresh, выбранная на верхнем узле (в данном случае имя Default).

Есть ли способ программно вызвать функцию Refresh из пользовательского плагина, над которым я работаю ?

enter image description here

Обновление

Все, что я могу найти, это ниже-

enter image description here

<extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            adaptable="false"
            id="com.softwareag.is.ui.navigator.actions.refresh"
            objectClass="com.softwareag.is.ui.navigator.model.ISLazyTreeParent">
         <action
               class="com.softwareag.is.ui.navigator.actions.RefreshFromServerAction"
               definitionId="org.eclipse.ui.file.refresh"
               enablesFor="1"
               helpContextId="org.eclipse.ui.edit.delete"
               icon="icons/tree/refresh.gif"
               id="com.softwareag.is.ui.navigator.actions.refresh"
               label="%refresh_label"
               menubarPath="group.edit"
               tooltip="%refresh_tooltip">
          </action>
          <enablement>
            <or>
                <test property="com.softwareag.is.navigator.property.vcsEnabled"
                    value="true" forcePluginActivation="true"/>
                <test property="com.softwareag.is.navigator.property.vcsNotEnabled"
                    value="true" forcePluginActivation="true"/>
            </or>
          </enablement>
      </objectContribution> 

И класс RefreshFromServerAction -

public class RefreshFromServerAction extends Action implements IActionDelegate {
    private IStructuredSelection selection;

    public RefreshFromServerAction() {
        this.selection = StructuredSelection.EMPTY;
        this.setId(ActionFactory.REFRESH.getId());
        this.setActionDefinitionId("org.eclipse.ui.file.refresh");
    }

    public void selectionChanged(IAction action, ISelection sel) {
        if (sel instanceof IStructuredSelection) {
            this.selection = (IStructuredSelection) sel;
        } else {
            this.selection = StructuredSelection.EMPTY;
        }

    }

    public void run() {
        this.run((IAction) null);
    }

    public void run(IAction action) {
        ISServerNode[] servers = AssetUtils.getSelectedServersFromSelection(this.selection);
        if (servers != null) {
            NavigatorHelper.getInstance().setExpandAllPath((ISServerObjectBase) null, (ISServerNode) null);
            List<ISServerNode> refreshedServers = new ArrayList();

            for (int i = 0; i < servers.length; ++i) {
                if (!refreshedServers.contains(servers[i])) {
                    ServerConnection serverConnection = servers[i].getServerConnection();
                    if (serverConnection != null && !serverConnection.isConnected()) {
                        return;
                    }

                    ISTreeParent[] selectedAssetsFromSelection = AssetUtils
                            .getSelectedAssetsFromSelection(this.selection);
                    ISTreeParent[] var7 = selectedAssetsFromSelection;
                    int var8 = selectedAssetsFromSelection.length;

                    for (int var9 = 0; var9 < var8; ++var9) {
                        ISTreeParent isTreeParent = var7[var9];
                        ServerElementsCache.getInstance().clearCache(serverConnection, isTreeParent);
                    }

                    if ((new ISAssetSaver()).askAndSaveDirtyEditors(servers[i].getServerConnection())) {
                        ISNavigatorPlugin.getDefault().notifyListeners(new NavigatorEvent(5, servers[i], this));
                        refreshedServers.add(servers[i]);
                    }
                }
            }

        }
    }
}

Вам нужно сначала создать свой объект, а затем сделать все необходимое. Или есть какой-нибудь стандартный способ вызова команды?

1 Ответ

1 голос
/ 09 марта 2020

Это действие реализует обработчик для команды org.eclipse.ui.file.refresh. Таким образом, вы должны иметь возможность использовать IHandlerService для выполнения этой команды.

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

IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("view id"); 

IHandlerService handlerService = view.getSite().getService(IHandlerService.class);

handlerService.executeCommand("org.eclipse.ui.file.refresh", null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...