/**
* Aptana Studio
* Copyright (c) 2005-2011 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.ide.syncing.ui.navigator.actions;
import java.text.MessageFormat;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;
import com.aptana.ide.core.io.IConnectionPoint;
import com.aptana.ide.syncing.ui.navigator.ProjectSiteConnection;
public class ProjectConnectionDisconnectAction implements IObjectActionDelegate
{
protected ProjectSiteConnection projectConnection;
protected IWorkbenchPart targetPart;
public ProjectConnectionDisconnectAction()
{
}
public void run(IAction action)
{
final IConnectionPoint connectionPoint = (IConnectionPoint) projectConnection
.getAdapter(IConnectionPoint.class);
if (connectionPoint == null || !connectionPoint.canDisconnect())
{
return;
}
Job job = new Job(MessageFormat.format(Messages.ProjectConnectionDisconnectAction_Disconnecting,
connectionPoint.getName()))
{
@Override
protected IStatus run(IProgressMonitor monitor)
{
if (targetPart instanceof CommonNavigator)
{
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable()
{
public void run()
{
CommonViewer viewer = ((CommonNavigator) targetPart).getCommonViewer();
viewer.collapseToLevel(projectConnection, AbstractTreeViewer.ALL_LEVELS);
}
});
}
if (connectionPoint.canDisconnect())
{
try
{
connectionPoint.disconnect(monitor);
}
catch (CoreException e)
{
return e.getStatus();
}
}
return Status.OK_STATUS;
}
};
job.setUser(true);
job.setPriority(Job.LONG);
job.setRule((ISchedulingRule) connectionPoint.getAdapter(ISchedulingRule.class));
job.schedule();
}
public void setActivePart(IAction action, IWorkbenchPart targetPart)
{
this.targetPart = targetPart;
}
public void selectionChanged(IAction action, ISelection selection)
{
projectConnection = null;
if (selection instanceof IStructuredSelection)
{
Object[] elements = ((IStructuredSelection) selection).toArray();
for (Object element : elements)
{
if (element instanceof ProjectSiteConnection)
{
projectConnection = (ProjectSiteConnection) element;
break;
}
}
}
action.setEnabled(projectConnection != null && projectConnection.canDisconnect());
}
}