blob: 8f57608d532b540e3208f55948d94305c1490532 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Christian Pontesegger and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Christian Pontesegger - initial API and implementation
*******************************************************************************/
package org.eclipse.ease.ui.view;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import org.eclipse.ease.service.EngineDescription;
import org.eclipse.ease.service.IScriptService;
import org.eclipse.ease.ui.Activator;
import org.eclipse.ease.ui.handler.SwitchEngine;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.menus.IWorkbenchContribution;
import org.eclipse.ui.services.IServiceLocator;
public final class EngineContributionFactory extends CompoundContributionItem implements IWorkbenchContribution {
private IServiceLocator fServiceLocator;
@Override
public void initialize(final IServiceLocator serviceLocator) {
fServiceLocator = serviceLocator;
}
@Override
protected IContributionItem[] getContributionItems() {
final List<IContributionItem> contributions = new ArrayList<>();
final IScriptService scriptService = PlatformUI.getWorkbench().getService(IScriptService.class);
if (scriptService != null) {
final Collection<EngineDescription> engines = scriptService.getEngines();
final List<CommandContributionItemParameter> items = new ArrayList<>();
for (final EngineDescription description : engines) {
if (description.isReplShell()) {
// set parameter for command
final HashMap<String, String> parameters = new HashMap<>();
parameters.put(SwitchEngine.PARAMETER_ID, description.getID());
final CommandContributionItemParameter contributionParameter = new CommandContributionItemParameter(fServiceLocator, null,
SwitchEngine.COMMAND_ID, CommandContributionItem.STYLE_PUSH);
contributionParameter.parameters = parameters;
contributionParameter.label = description.getName();
contributionParameter.visibleEnabled = true;
contributionParameter.icon = Activator.getImageDescriptor("/icons/eobj16/engine.png");
items.add(contributionParameter);
}
}
// sort contributions
Collections.sort(items, (o1, o2) -> o1.label.compareTo(o2.label));
for (final CommandContributionItemParameter item : items)
contributions.add(new CommandContributionItem(item));
}
return contributions.toArray(new IContributionItem[contributions.size()]);
}
@Override
public boolean isDirty() {
return true;
}
}