diff options
author | Eike Stepper | 2013-11-01 09:10:21 +0000 |
---|---|---|
committer | Eike Stepper | 2013-11-01 09:10:21 +0000 |
commit | 0447231db4c740a0862a3e239e927afbdd44a1e0 (patch) | |
tree | fb0a00afb6e537afaeb5ac5f098378741d3ed2da | |
parent | d264bb918349e0c6d997a2065387bcb52c05c896 (diff) | |
download | cdo-0447231db4c740a0862a3e239e927afbdd44a1e0.tar.gz cdo-0447231db4c740a0862a3e239e927afbdd44a1e0.tar.xz cdo-0447231db4c740a0862a3e239e927afbdd44a1e0.zip |
Add MergeBranchPointAction
5 files changed, 175 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/MergeBranchPointAction.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/MergeBranchPointAction.java new file mode 100644 index 0000000000..721d6b759f --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/MergeBranchPointAction.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2013 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.internal.ui.actions; + +import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; +import org.eclipse.emf.cdo.internal.ui.dialogs.SelectBranchPointDialog; +import org.eclipse.emf.cdo.internal.ui.messages.Messages; +import org.eclipse.emf.cdo.transaction.CDOMerger; +import org.eclipse.emf.cdo.transaction.CDOTransaction; +import org.eclipse.emf.cdo.ui.shared.SharedIcons; +import org.eclipse.emf.cdo.view.CDOView; + +import org.eclipse.emf.spi.cdo.DefaultCDOMerger; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.IWorkbenchPage; + +/** + * @author Eike Stepper + */ +public class MergeBranchPointAction extends AbstractViewAction +{ + public static final String ID = "merge"; //$NON-NLS-1$ + + private static final String TITLE = Messages.getString("MergeBranchPointAction.0"); //$NON-NLS-1$ + + private static final String TOOL_TIP = Messages.getString("MergeBranchPointAction.1"); //$NON-NLS-1$ + + private CDOBranchPoint source; + + public MergeBranchPointAction(IWorkbenchPage page, CDOView view) + { + super(page, TITLE + INTERACTIVE, TOOL_TIP, null, view); + setId(ID); + } + + @Override + protected void preRun() throws Exception + { + CDOTransaction target = (CDOTransaction)getView(); + SelectBranchPointDialog dialog = new SelectBranchPointDialog(getPage(), target.getSession(), target, + target.isReadOnly()) + { + @Override + protected Control createDialogArea(Composite parent) + { + getShell().setText(TITLE); + setTitle(TITLE); + setTitleImage(SharedIcons.getImage(SharedIcons.WIZBAN_TARGET_SELECTION)); + setMessage("Compose a valid source point or select one from commits, tags or views."); + return super.createDialogArea(parent); + } + + @Override + protected String getComposeTabTitle() + { + return "Source Point"; + } + }; + + if (dialog.open() == Dialog.OK) + { + source = dialog.getBranchPoint(); + if (source == null) + { + cancel(); + } + } + else + { + cancel(); + } + + super.preRun(); + } + + @Override + protected void doRun(IProgressMonitor progressMonitor) throws Exception + { + CDOMerger merger = new DefaultCDOMerger.PerFeature.ManyValued(); + + CDOTransaction target = (CDOTransaction)getView(); + target.merge(source, merger); + } +} diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dnd/CDOMergeDropAdapter.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dnd/CDOMergeDropAdapter.java new file mode 100644 index 0000000000..6b7470385d --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dnd/CDOMergeDropAdapter.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2013 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.internal.ui.dnd; + +import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; +import org.eclipse.emf.cdo.transaction.CDOMerger; +import org.eclipse.emf.cdo.transaction.CDOTransaction; + +import org.eclipse.net4j.util.ui.dnd.DNDDropAdapter; + +import org.eclipse.emf.spi.cdo.DefaultCDOMerger; + +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.swt.dnd.DND; +import org.eclipse.swt.dnd.Transfer; + +/** + * @author Eike Stepper + */ +public class CDOMergeDropAdapter extends DNDDropAdapter<TreeSelection> +{ + public static final Transfer[] TRANSFERS = new Transfer[] { org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance() }; + + protected CDOMergeDropAdapter(StructuredViewer viewer) + { + super(TRANSFERS, viewer); + setExpandEnabled(false); + } + + @Override + protected boolean performDrop(TreeSelection data, Object target) + { + if (target instanceof CDOTransaction) + { + for (Object obj : data.toArray()) + { + if (obj instanceof CDOBranchPoint) + { + CDOBranchPoint sourceBranchPoint = (CDOBranchPoint)obj; + CDOTransaction targetTransaction = (CDOTransaction)target; + + CDOMerger merger = new DefaultCDOMerger.PerFeature.ManyValued(); + targetTransaction.merge(sourceBranchPoint, merger); + return true; + } + } + } + + return false; + } + + @Override + protected boolean validateTarget(Object target, int operation) + { + return target instanceof CDOTransaction && !((CDOTransaction)target).isDirty(); + } + + public static void support(StructuredViewer viewer) + { + int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK; + viewer.addDropSupport(dndOperations, TRANSFERS, new CDOMergeDropAdapter(viewer)); + } +} diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/messages/messages.properties b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/messages/messages.properties index f47cc5f3d3..10e7f9ff65 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/messages/messages.properties +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/messages/messages.properties @@ -208,6 +208,8 @@ SessionComposite.2=Repository Name: SessionComposite.3=Automatic Package Registry SwitchTargetAction.0=Switch Target SwitchTargetAction.1=Switch the target branch point +MergeBranchPointAction.0=Merge +MergeBranchPointAction.1=Merge changes from a different branch point Title.Binary=New Binary Resource Title.Folder=New Folder Title.Model=New Model Resource diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java index 3a171e1b5a..c6c8baa853 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java @@ -60,6 +60,9 @@ public class CDOSessionsView extends ContainerView Control control = super.createUI(parent); TreeViewer viewer = getViewer(); + + // CDOMergeDropAdapter.support(viewer); + RepositoryTransferDragListener.support(viewer); TransferDropAdapter.support(viewer); diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java index 66242dda04..d93a6d7412 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java @@ -37,6 +37,7 @@ import org.eclipse.emf.cdo.internal.ui.actions.ExportResourceAction; import org.eclipse.emf.cdo.internal.ui.actions.ImportResourceAction; import org.eclipse.emf.cdo.internal.ui.actions.LoadResourceAction; import org.eclipse.emf.cdo.internal.ui.actions.ManagePackagesAction; +import org.eclipse.emf.cdo.internal.ui.actions.MergeBranchPointAction; import org.eclipse.emf.cdo.internal.ui.actions.MergeConflictsAction; import org.eclipse.emf.cdo.internal.ui.actions.NewResourceNodeAction; import org.eclipse.emf.cdo.internal.ui.actions.OpenAuditAction; @@ -604,6 +605,7 @@ public class CDOItemProvider extends ContainerItemProvider<IContainer<Object>> manager.add(new ImportResourceAction(page, view)); manager.add(new Separator()); manager.add(new MergeConflictsAction((CDOTransaction)view)); + manager.add(new MergeBranchPointAction(page, view)); manager.add(new CommitTransactionAction(page, view)); manager.add(new RollbackTransactionAction(page, view)); } |