blob: c2a1737e312e1beefe17909dbb7253b1a51bf918 [file] [log] [blame]
/*
* Copyright (c) 2009-2012 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.explorer.ui.checkouts.actions;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
import org.eclipse.emf.cdo.internal.ui.actions.CreateBranchAction;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.ui.IWorkbenchPage;
/**
* @author Eike Stepper
*/
public class SwitchToActionProvider extends AbstractBranchPointActionProvider
{
private static final String ID = SwitchToActionProvider.class.getName();
public SwitchToActionProvider()
{
super(ID, "Switch To");
}
@Override
protected void fillSubMenu(IWorkbenchPage page, IMenuManager subMenu, CDOCheckout checkout)
{
if (checkout.isOnline())
{
subMenu.add(new SwitchToNewBranchAction(page, checkout));
}
super.fillSubMenu(page, subMenu, checkout);
}
@Override
protected void fillHistorizedAction(IWorkbenchPage page, IMenuManager subMenu, CDOCheckout checkout,
CDOBranchPoint branchPoint)
{
if (checkout.isReadOnly() || branchPoint.getTimeStamp() == CDOBranchPoint.UNSPECIFIED_DATE)
{
super.fillHistorizedAction(page, subMenu, checkout, branchPoint);
}
}
@Override
protected void fillOtherBranchAction(IWorkbenchPage page, IMenuManager subMenu, CDOCheckout checkout)
{
if (!checkout.isReadOnly())
{
super.fillOtherBranchAction(page, subMenu, checkout);
}
}
@Override
protected void fillOtherBranchPointAction(IWorkbenchPage page, IMenuManager subMenu, CDOCheckout checkout)
{
if (checkout.isReadOnly())
{
super.fillOtherBranchPointAction(page, subMenu, checkout);
}
}
@Override
protected void fillCommitAction(IWorkbenchPage page, IMenuManager subMenu, CDOCheckout checkout)
{
if (checkout.isReadOnly())
{
super.fillCommitAction(page, subMenu, checkout);
}
}
@Override
protected void fillOtherCheckoutAction(IWorkbenchPage page, IMenuManager subMenu, CDOCheckout checkout,
CDOCheckout otherCheckout)
{
if (checkout.isReadOnly() == otherCheckout.isReadOnly())
{
super.fillOtherCheckoutAction(page, subMenu, checkout, otherCheckout);
}
}
@Override
protected String getHistorizedBranchPointToolTip(boolean allowTimeStamp)
{
return allowTimeStamp ? "Switch to this branch point" : "Switch to this branch";
}
@Override
protected String getOtherBranchPointToolTip(boolean allowTimeStamp)
{
return allowTimeStamp ? "Select a branch point and switch to it" : "Select a branch and switch to it";
}
@Override
protected String getCommitBranchPointToolTip()
{
return "Select a commit and switch to it";
}
@Override
protected String getOtherCheckoutToolTip()
{
return "Switch to the branch point of this checkout";
}
@Override
protected void execute(CDOCheckout checkout, CDOBranchPoint branchPoint) throws Exception
{
switchTo(checkout, branchPoint);
}
public static void switchTo(CDOCheckout checkout, CDOBranchPoint branchPoint)
{
checkout.setBranchPoint(branchPoint);
}
/**
* @author Eike Stepper
*/
private static class SwitchToNewBranchAction extends CreateBranchAction
{
private static final String ID = OM.BUNDLE_ID + ".SwitchToNewBranchAction"; //$NON-NLS-1$
private final CDOCheckout checkout;
public SwitchToNewBranchAction(IWorkbenchPage page, CDOCheckout checkout)
{
super(page, checkout.getView());
this.checkout = checkout;
setId(ID);
setText("New Branch...");
setImageDescriptor(OM.getImageDescriptor("icons/branch.gif"));
setToolTipText("Create a new branch and switch this checkout to it");
}
@Override
protected void doRun(IProgressMonitor progressMonitor) throws Exception
{
super.doRun(progressMonitor);
CDOBranchPoint base = getBase();
CDOBranch newBranch = base.getBranch().getBranch(getName());
checkout.setBranchPoint(newBranch.getHead());
}
}
}