Для команды нет обработчика. WorkbenchContext localValues ​​больше не ссылается на классы обработчиков

в настоящее время мы выполняем миграцию с eclipse Juno на Eclipse 4.24, поэтому у нас есть некоторые проблемы. Мы находимся в среде Eclipse RCP, используя eclipse e4, с правильной настройкой файла e4xmi.

WorkbenchContext нашего приложения Eclipse RCP больше не является нашим обработчиком в атрибутах localValues, поэтому наш HIM не работает, потому что он не может выполнить обнаруженную команду. Если мы попытаемся выполнить команду через EHandlerService, это вызовет ошибку.

org.eclipse.core.commands.NotHandledException: для команды rf.command.configuration.addconfigurationsystem не существует обработчика

lHandlerService.executeHandler(lCmd);

Вот как мы динамически заполняем нашу FirstPage HIM:

  final EHandlerService lHandlerService = pContext.get(EHandlerService.class);
        final ECommandService lCommandService = pContext.get(ECommandService.class);
        EModelService lModelService = pContext.get(EModelService.class);
        ImageRegistry lImageRegistry = pContext.get(ImageRegistry.class);
        
        for (IConfigurationElement lElt : lReg
            .getConfigurationElementsFor(EXTENSION_ID)) {
            logger.info("Extension ID: {}", EXTENSION_ID);
            List<MHandledToolItem> lItems = lModelService.findElements(lWindow,
                lElt.getAttribute(TOOLITEM_ID), MHandledToolItem.class, null);
            logger.info("ToolItem Id {}",lElt.getAttribute(TOOLITEM_ID));
          
            for (final MHandledToolItem lItem : lItems) {
                logger.info("Processing tool item ID: {}", lItem.getElementId());
                
                logger.info("Processing tool item Class : {}", lItem.getClass());
                logger.info("Processing tool item, Command ID: {}", lItem.getCommand().getElementId());
                Object handler = pContext.getActiveLeaf().get("handler::" + lItem.getCommand().getElementId());
                logger.info("Object handler : {}", handler);   
                ToolItem lToolItem = new ToolItem(lToolBar, SWT.NONE);
                lToolItem.setImage(lImageRegistry.get(lElt.getAttribute(IMAGE_URI)));
                lToolItem.setToolTipText(lItem.getTooltip());
                lToolItem.addSelectionListener(new SelectionListener() {
                 
                    @Override
                    public void widgetSelected(SelectionEvent pEvent) {
                        executeCommand(lItem);
                    }

                    @Override
                    public void widgetDefaultSelected(SelectionEvent pEvent) {
                        executeCommand(lItem);
                    }

                    private void executeCommand(MHandledToolItem pItem) {
                        MCommand lCommand = pItem.getCommand();
                        ParameterizedCommand lCmd = lCommandService.createCommand(
                            lCommand.getElementId(), null);
                            if (lHandlerService.canExecute(lCmd)) {
                            lHandlerService.executeHandler(lCmd);
                        }
                    }
                });
            }
        }
    }
The result of my log on Eclipse Juno : 
INFO [main] [FirstPage.java:95] Processing tool item ID: rf.handledtoolitem.configuration.addconfigurationsystem
INFO [main] [FirstPage.java:97] Processing tool item Class : class org.eclipse.e4.ui.model.application.ui.menu.impl.HandledToolItemImpl
INFO [main] [FirstPage.java:98] Processing tool item, Command ID: rf.command.configuration.addconfigurationsystem
INFO [main] [FirstPage.java:101] Object handler : rf.configuration.administrator.handlers.system.AddConfigSystemHandler@847f3e7

Новый журнал в Eclipse 4.24:

INFO [main] [FirstPage.java:95] Extension ID: rf.plateform.tools.firstPage
INFO [main] [FirstPage.java:98] ToolItem Id rf..handledtoolitem.configuration.addconfigurationsystem
INFO [main] [FirstPage.java:101] Processing tool item ID: rf.handledtoolitem.configuration.addconfigurationsystem
INFO [main] [FirstPage.java:103] Processing tool item Class : class org.eclipse.e4.ui.model.application.ui.menu.impl.HandledToolItemImpl
INFO [main] FirstPage [FirstPage.java:104] Processing tool item, Command ID: rf.command.configuration.addconfigurationsystem
INFO [main] FirstPage [FirstPage.java:106] Object handler : null

Я проверил свой фрагмент.e4xmi, который идеально подходит

<elements xsi:type = "commands:Command" xmi:id = "_HTKGMPdqEeG-14Xhj6dtog" elementId = "rf.command.configuration.addconfigurationsystem" commandName = "Nouvelle configuration syst&#xe8;me"/>
<elements xsi:type = "commands:Handler" xmi:id = "_GxVLgPdqEeG-14Xhj6dtog" elementId = "rf.handler.configuration.addconfigurationsystem" contributionURI = "bundleclass://rf.configuration.view.administrator/rf.configuration.administrator.handlers.system.AddConfigSystemHandler" command = "_HTKGMPdqEeG-14Xhj6dtog"/>

Я также безуспешно пытался реализовать IHandler или расширить AbstractHandler до моего Handler:


@SuppressWarnings("restriction")
public class AddConfigSystemHandler {

    /**
     * Execution of the Command
     * 
     * @param pPartManager
     *            PartByModel Service
     * @param pConfigurationService
     *            Configuration Service
     */
    @Execute
    public void execute(IModelService pConfigurationService, EPartManager pPartManager) {
        
        // Creation of a new element
        try {
            Configuration lNewElement = (Configuration) pConfigurationService
                .create((EObject) null, ConfigPackage.Literals.CONFIGURATION);

            // Display the part
            MPart lPart = pPartManager.showPart(
                ConfigurationPartId.administrator, lNewElement);
            lPart.setDirty(true);
        } catch (ConfigurationException lException) {
            MessageDialog.openError(null,
                "Impossible to create the element of configuration",
                lException.getMessage());
        }
    }

Каков процесс добавления его снова в WorkbenchContext?

Сохраняется ли состояние рабочей среды и, возможно, используется старое состояние — попробуйте запустить с помощью -clearPersistedState.

greg-449 16.04.2024 12:58

Привет, Грег, мы уже всегда запускаем наше приложение с -clearPersistedState, чтобы быть уверенным, что модель каждый раз строится из фрагмента.

Etienne 16.04.2024 13:13

Содержит ли объединенный workbench.xmi, сохраненный в .metadata/.plugins/org.eclipse.e4.workbench, фрагмент?

greg-449 16.04.2024 14:15

Да, если вы говорите о workspace/.metadata, у меня есть фрагмент, я вырезал информацию, чтобы ее было легче читать, я мог бы дать вам больше, если это будет полезно. XML <persistedState key = "memento" tooltip=&quot;.e4xmi&rf.configuration.view.administrator/fra‌​gmentquot;>&#xA;&lt;‌​persistable path=&quot;/rf.configuration.view.administrator/fragment.e4x‌​mi&quot;/>&#xA;&lt;

Etienne 16.04.2024 14:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В наших классах-обработчиках и фрагменте.e4xmi все было правильно настроено. Проблема возникла из-за нашего Application.e4xmi, у которого отсутствовал обработчик обработки Addon.

До нашей миграции Application.e4xmi обрабатывал только команды и привязки.

<addons xmi:id = "_2fQh2MauEeGMWL3OiqAGkw" elementId = "org.eclipse.e4.ui.workbench.contexts.model" contributionURI = "bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
<addons xmi:id = "_2fQh2cauEeGMWL3OiqAGkw" elementId = "org.eclipse.e4.ui.workbench.bindings.model" contributionURI = "bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>

Но в Eclipse 4.24 нам пришлось добавить эти дополнения в контекст, чтобы EclipseContext мог правильно читать и находить классы Handler.

<addons xmi:id = "_6wlLdsgZEeSyMNYR5xypkQ" elementId = "org.eclipse.e4.ui.workbench.handler.model" contributionURI = "bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>

Другие вопросы по теме