| /* |
| * 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()); |
| } |
| } |
| } |