Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2013-11-01 09:10:21 +0000
committerEike Stepper2013-11-01 09:10:21 +0000
commit0447231db4c740a0862a3e239e927afbdd44a1e0 (patch)
treefb0a00afb6e537afaeb5ac5f098378741d3ed2da
parentd264bb918349e0c6d997a2065387bcb52c05c896 (diff)
downloadcdo-0447231db4c740a0862a3e239e927afbdd44a1e0.tar.gz
cdo-0447231db4c740a0862a3e239e927afbdd44a1e0.tar.xz
cdo-0447231db4c740a0862a3e239e927afbdd44a1e0.zip
Add MergeBranchPointAction
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/MergeBranchPointAction.java96
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dnd/CDOMergeDropAdapter.java72
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/messages/messages.properties2
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java2
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));
}

Back to the top