blob: e9e8e373b50ffef7554bded25bf52371f4af829b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Bosch Software Innovations GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Bosch Software Innovations GmbH - Please refer to git log
*
*******************************************************************************/
package org.eclipse.vorto.codegen.internal.extensioninterface;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
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.vorto.codegen.Activator;
import org.eclipse.vorto.codegen.api.ICodeGenerator;
import org.osgi.framework.Bundle;
public class PopulateGeneratorsMenu extends CompoundContributionItem {
private static final String GENERATEALL_CLASS = "org.eclipse.vorto.codegen.extensioninterface.EvaluateContributionsHandler";
private static final String CLASS = "class";
private static final String MENU_LABEL = "menuLabel";
public static final String GENERATE_ALL = "Generate All";
public PopulateGeneratorsMenu() {
}
public PopulateGeneratorsMenu(String id) {
super(id);
}
@Override
protected IContributionItem[] getContributionItems() {
List<CommandContributionItem> contributionItems = new ArrayList<CommandContributionItem>();
IConfigurationElement[] registeredGenerators = getAllRegisteredGeneratorNames();
for (IConfigurationElement aGenerator : registeredGenerators) {
CommandContributionItem commandForGenerator = constructCommandForGenerator(aGenerator);
if (commandForGenerator != null) {
contributionItems.add(commandForGenerator);
}
}
CommandContributionItem generateAllContributionItem = constructCommandForGenerator(
GENERATEALL_CLASS, GENERATE_ALL, GENERATE_ALL,
"org.eclipse.vorto.codegen");
contributionItems.add(generateAllContributionItem);
return contributionItems
.toArray(new IContributionItem[contributionItems.size()]);
}
private CommandContributionItem constructCommandForGenerator(
IConfigurationElement aGenerator) {
return constructCommandForGenerator(populateExtensionMetaData(aGenerator));
}
@SuppressWarnings("unchecked")
private CommandContributionItem constructCommandForGenerator(
ExtensionMetaData extensionMetaData) {
String extensionIdentifier = extensionMetaData.getExtensionIdentifier();
if (StringUtils.isNotEmpty(extensionIdentifier)) {
CommandContributionItemParameter generatorCommand = new CommandContributionItemParameter(
PlatformUI.getWorkbench().getActiveWorkbenchWindow(),
"org.eclipse.vorto.codegen.dynamic.menu.contribution.item.id",
"org.eclipse.vorto.codegen.generator.command.id", SWT.NONE);
CommandContributionItem generatorContributionItem;
generatorCommand.label = extensionMetaData.getMenuLabel();
String iconPath = extensionMetaData.getIconPath();
Bundle bundle = Platform.getBundle(extensionMetaData
.getGeneratorPluginId());
if (iconPath == null) {
// Load the defaults
iconPath = "icons/generate.gif";
bundle = Platform.getBundle(Activator.PLUGIN_ID);
}
IPath path = new Path(iconPath);
generatorCommand.icon = ImageDescriptor.createFromURL(FileLocator
.find(bundle, path, null));
generatorCommand.parameters = new HashMap<String, String>();
generatorCommand.parameters.put(
"org.eclipse.vorto.codegen.generator.commandParameter",
extensionIdentifier);
generatorContributionItem = new CommandContributionItem(
generatorCommand);
return generatorContributionItem;
}
return null;
}
private ExtensionMetaData populateExtensionMetaData(
IConfigurationElement confiurationElement) {
ExtensionMetaData extensionMetaData = new ExtensionMetaData();
extensionMetaData.setGeneratorPluginId(confiurationElement
.getContributor().getName());
extensionMetaData.setClassName(confiurationElement.getAttribute(CLASS));
extensionMetaData.setExtensionIdentifier(confiurationElement
.getDeclaringExtension().getUniqueIdentifier());
extensionMetaData.setMenuLabel(confiurationElement
.getAttribute(MENU_LABEL));
extensionMetaData.setIconPath(confiurationElement.getAttribute("icon"));
return extensionMetaData;
}
@SuppressWarnings("unchecked")
private CommandContributionItem constructCommandForGenerator(
String className, String extensionIdentifier, String menuLabel,
String generatorPluginId) {
CommandContributionItemParameter generatorCommand = new CommandContributionItemParameter(
PlatformUI.getWorkbench().getActiveWorkbenchWindow(),
"org.eclipse.vorto.codegen.dynamic.menu.contribution.item.id",
"org.eclipse.vorto.codegen.generator.command.id", SWT.NONE);
generatorCommand.label = menuLabel;
Bundle bundle = Platform.getBundle("org.eclipse.vorto.codegen");
IPath path = new Path("icons/generate.gif");
generatorCommand.icon = ImageDescriptor.createFromURL(FileLocator.find(
bundle, path, null));
generatorCommand.parameters = new HashMap<String, String>();
generatorCommand.parameters.put(
"org.eclipse.vorto.codegen.generator.commandParameter",
extensionIdentifier);
CommandContributionItem generatorContributionItem = new CommandContributionItem(
generatorCommand);
return generatorContributionItem;
}
private IConfigurationElement[] getAllRegisteredGeneratorNames() {
IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
final IConfigurationElement[] generators = extensionRegistry
.getConfigurationElementsFor(ICodeGenerator.GENERATOR_ID);
return generators;
}
}