/** * Aptana Studio * Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.deploy.internal.ui; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.ContributionItem; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.menus.IWorkbenchContribution; import org.eclipse.ui.services.IServiceLocator; import com.aptana.core.logging.IdeLog; import com.aptana.deploy.IDeployProvider; import com.aptana.deploy.ui.DeployUIPlugin; import com.aptana.deploy.util.DeployProviderUtil; import com.aptana.ui.util.UIUtils; /** * The class adds the "Deploy App" menu item. The item needs to be dynamic as the actual text could be contributed by * the individual deploy provider. * * @author Michael Xia (mxia@appcelerator.com) */ public class DeployAppContributionItem extends ContributionItem implements IWorkbenchContribution { private static final String DEPLOY_COMMAND_ID = "com.aptana.deploy.commands.deployApp"; //$NON-NLS-1$ private IServiceLocator serviceLocator; public DeployAppContributionItem() { } public DeployAppContributionItem(String id) { super(id); } @Override public void fill(Menu menu, int index) { MenuItem deployMenuItem = new MenuItem(menu, SWT.PUSH); String menuName = null; IContainer selectedContainer = getSelectedContainer(); if (selectedContainer != null) { IDeployProvider provider = DeployProviderUtil.getDeployProvider(selectedContainer); if (provider != null) { menuName = provider.getDeployMenuName(); } } if (menuName == null) { // falls back to the name defined for the deploy command ICommandService commandService = (ICommandService) serviceLocator.getService(ICommandService.class); Command command = commandService.getCommand(DEPLOY_COMMAND_ID); try { menuName = command.getName(); } catch (NotDefinedException e) { // should not happen, but log it just in case IdeLog.logError(DeployUIPlugin.getDefault(), "The name for the deploy command is not defined."); //$NON-NLS-1$ } } // the default-default for the menu name is "Deploy App" deployMenuItem.setText((menuName == null) ? Messages.DeployAppContributionItem_Text : menuName); deployMenuItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { IHandlerService handlerService = (IHandlerService) serviceLocator.getService(IHandlerService.class); try { handlerService.executeCommand(DEPLOY_COMMAND_ID, null); } catch (Exception e1) { IdeLog.logError(DeployUIPlugin.getDefault(), "Failed to execute the command to deploy the application."); //$NON-NLS-1$ } } }); } public void initialize(IServiceLocator serviceLocator) { this.serviceLocator = serviceLocator; } private static IContainer getSelectedContainer() { IResource selectedResource = UIUtils.getSelectedResource(); if (selectedResource instanceof IContainer) { return (IContainer) selectedResource; } if (selectedResource != null) { return selectedResource.getParent(); } return null; } }