/** * 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.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.ISources; import org.eclipse.ui.progress.UIJob; import com.aptana.deploy.IDeployProvider; import com.aptana.deploy.preferences.DeployPreferenceUtil; import com.aptana.deploy.util.DeployProviderUtil; public class DeployHandler extends AbstractHandler { private IContainer selectedContainer; public Object execute(ExecutionEvent event) throws ExecutionException { final IContainer container = selectedContainer; final IDeployProvider provider = DeployProviderUtil.getDeployProvider(selectedContainer); // TODO What if provider is still null? Prompt to choose explicitly? Run wizard? if (provider != null) { // Run in a job Job job = new UIJob(Messages.DeployHandler_DeployJobTitle) { @Override public IStatus runInUIThread(IProgressMonitor monitor) { provider.deploy(container, monitor); // Store the deployment provider explicitly, since we may have had none explicitly set, but detected // one that works. DeployPreferenceUtil.setDeployType(container, DeployProviderUtil.getIdForProvider(provider)); return Status.OK_STATUS; } }; job.setUser(true); job.setPriority(Job.SHORT); job.schedule(); } return null; } @Override public boolean isEnabled() { return selectedContainer != null && selectedContainer.isAccessible(); } @Override public void setEnabled(Object evaluationContext) { selectedContainer = null; if (evaluationContext instanceof IEvaluationContext) { Object activePart = ((IEvaluationContext) evaluationContext).getVariable(ISources.ACTIVE_PART_NAME); if (activePart instanceof IEditorPart) { IEditorInput editorInput = ((IEditorPart) activePart).getEditorInput(); if (editorInput instanceof IFileEditorInput) { // uses the parent folder selectedContainer = ((IFileEditorInput) editorInput).getFile().getParent(); } } else { Object value = ((IEvaluationContext) evaluationContext) .getVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME); if (value instanceof ISelection) { ISelection selections = (ISelection) value; if (!selections.isEmpty() && selections instanceof IStructuredSelection) { Object selection = ((IStructuredSelection) selections).getFirstElement(); if (selection instanceof IContainer) { selectedContainer = (IContainer) selection; } else if (selection instanceof IAdaptable) { IResource resource = (IResource) ((IAdaptable) selection).getAdapter(IResource.class); if (resource != null) { selectedContainer = resource.getParent(); } } } } } } } }