package com.example.e4.rcp.todo.contribute.processors;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.ui.menu.MDirectMenuItem;
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import com.example.e4.rcp.todo.contribute.handlers.ExitHandlerWithCheck;
public class MenuProcessor {
// the menu is injected based on the parameter
// defined in the extension point
@Inject
@Named("org.eclipse.ui.file.menu")
private MMenu menu;
@Execute
public void execute(EModelService modelService) {
// remove the old exit menu entry
if (!menu.getChildren().isEmpty()) {
List<MMenuElement> list = new ArrayList<>();
for (MMenuElement element : menu.getChildren()) {
// use ID instead of label as label is later translated
if (element.getElementId() != null) {
if (element.getElementId().contains("exit")) {
list.add(element);
}
}
}
menu.getChildren().removeAll(list);
}
// now add a new menu entry
MDirectMenuItem menuItem = modelService.createModelElement(MDirectMenuItem.class);
menuItem.setLabel("Another Exit");
menuItem.setContributionURI("bundleclass://"
+ "com.example.e4.rcp.todo.contribute/"
+ ExitHandlerWithCheck.class.getName());
menu.getChildren().add(menuItem);
}
}