diff options
9 files changed, 228 insertions, 51 deletions
diff --git a/features/org.eclipse.emf.cdo.compare-feature/feature.xml b/features/org.eclipse.emf.cdo.compare-feature/feature.xml index ce71c348ef..fd60ef897c 100644 --- a/features/org.eclipse.emf.cdo.compare-feature/feature.xml +++ b/features/org.eclipse.emf.cdo.compare-feature/feature.xml @@ -12,7 +12,7 @@ <feature id="org.eclipse.emf.cdo.compare" label="%featureName" - version="4.2.100.qualifier" + version="4.3.0.qualifier" provider-name="%providerName" license-feature="org.eclipse.emf.cdo.license" license-feature-version="0.0.0"> diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.ui.compare/META-INF/MANIFEST.MF index d7037b8d94..072254f847 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo.ui.compare/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.emf.cdo.ui.compare;singleton:=true -Bundle-Version: 4.2.100.qualifier +Bundle-Version: 4.3.0.qualifier Bundle-Activator: org.eclipse.emf.cdo.ui.internal.compare.bundle.OM$Activator Bundle-Vendor: %providerName Bundle-ClassPath: . @@ -16,6 +16,6 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)", org.eclipse.emf.cdo.compare;bundle-version="[4.2.0,5.0.0)";visibility:=reexport, org.eclipse.emf.compare.ide.ui;bundle-version="[3.0.0,5.0.0)", org.eclipse.emf.compare.edit;bundle-version="[3.0.0,5.0.0)" -Export-Package: org.eclipse.emf.cdo.ui.compare;version="4.2.100", - org.eclipse.emf.cdo.ui.internal.compare;version="4.2.100";x-internal:=true, - org.eclipse.emf.cdo.ui.internal.compare.bundle;version="4.2.100";x-internal:=true +Export-Package: org.eclipse.emf.cdo.ui.compare;version="4.3.0", + org.eclipse.emf.cdo.ui.internal.compare;version="4.3.0";x-internal:=true, + org.eclipse.emf.cdo.ui.internal.compare.bundle;version="4.3.0";x-internal:=true diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java index 9bdbf601f2..fc37184b8e 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java +++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java @@ -20,6 +20,7 @@ import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil; import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.net4j.util.lifecycle.LifecycleUtil; +import org.eclipse.net4j.util.ui.UIUtil; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.compare.Comparison; @@ -31,6 +32,7 @@ import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; +import org.eclipse.jface.util.IPropertyChangeListener; /** * Static methods to open an EMF Compare dialog. @@ -40,22 +42,41 @@ import org.eclipse.compare.CompareUI; */ public class CDOCompareEditorUtil { + private static final ThreadLocal<Boolean> ACTIVATE_EDITOR = new ThreadLocal<Boolean>(); + + private static final ThreadLocal<Runnable> DISPOSE_RUNNABLE = new ThreadLocal<Runnable>(); + public static boolean openDialog(CDOSession session, CDOBranchPoint leftPoint, CDOBranchPoint rightPoint) { - CDOView leftView = null; - CDOView rightView = null; + final Boolean activateEditor = ACTIVATE_EDITOR.get(); + final CDOView[] leftAndRightView = { null, null }; + final Runnable disposeRunnable = new Runnable() + { + public void run() + { + LifecycleUtil.deactivate(leftAndRightView[0]); + LifecycleUtil.deactivate(leftAndRightView[1]); + } + }; try { - leftView = session.openView(leftPoint); - rightView = session.openView(rightPoint); + leftAndRightView[0] = session.openView(leftPoint); + leftAndRightView[1] = session.openView(rightPoint); - return openDialog(leftView, rightView, null); + if (activateEditor != null) + { + DISPOSE_RUNNABLE.set(disposeRunnable); + } + + return openDialog(leftAndRightView[0], leftAndRightView[1], null); } finally { - LifecycleUtil.deactivate(rightView); - LifecycleUtil.deactivate(leftView); + if (activateEditor == null) + { + disposeRunnable.run(); + } } } @@ -81,6 +102,104 @@ public class CDOCompareEditorUtil public static boolean openDialog(CDOView leftView, CDOView rightView, CDOView[] originView) { + final Input input = createComparisonInput(leftView, rightView, originView); + + final Boolean activateEditor = ACTIVATE_EDITOR.get(); + if (activateEditor != null) + { + input.setDisposeRunnable(DISPOSE_RUNNABLE.get()); + DISPOSE_RUNNABLE.remove(); + + UIUtil.getDisplay().asyncExec(new Runnable() + { + public void run() + { + CompareUI.openCompareEditor(input, activateEditor); + } + }); + } + else + { + CompareUI.openCompareDialog(input); + } + + return input.isOK(); + } + + /** + * @since 4.3 + */ + public static boolean openEditor(CDOSession session, CDOBranchPoint leftPoint, CDOBranchPoint rightPoint, + boolean activate) + { + ACTIVATE_EDITOR.set(activate); + + try + { + return openDialog(session, leftPoint, rightPoint); + } + finally + { + ACTIVATE_EDITOR.remove(); + } + } + + /** + * @since 4.3 + */ + public static boolean openEditor(CDOCommitInfo leftCommitInfo, CDOBranchPoint rightPoint, boolean activate) + { + ACTIVATE_EDITOR.set(activate); + + try + { + return openDialog(leftCommitInfo, rightPoint); + } + finally + { + ACTIVATE_EDITOR.remove(); + } + } + + /** + * @since 4.3 + */ + public static boolean openEditor(CDOCommitInfo commitInfo, boolean activate) + { + ACTIVATE_EDITOR.set(activate); + + try + { + return openDialog(commitInfo); + } + finally + { + ACTIVATE_EDITOR.remove(); + } + } + + /** + * @since 4.3 + */ + public static boolean openEditor(CDOView leftView, CDOView rightView, CDOView[] originView, boolean activate) + { + ACTIVATE_EDITOR.set(activate); + + try + { + return openDialog(leftView, rightView, originView); + } + finally + { + ACTIVATE_EDITOR.remove(); + } + } + + /** + * @since 4.3 + */ + public static Input createComparisonInput(CDOView leftView, CDOView rightView, CDOView[] originView) + { Comparison comparison = CDOCompareUtil.compare(leftView, rightView, originView); IComparisonScope scope = CDOCompare.getScope(comparison); @@ -94,9 +213,7 @@ public class CDOCompareEditorUtil configuration.setLeftEditable(!leftView.isReadOnly()); configuration.setRightEditable(!rightView.isReadOnly()); - Input input = new Input(configuration, comparison, editingDomain, adapterFactory); - CompareUI.openCompareDialog(input); - return input.isOK(); + return new Input(configuration, comparison, editingDomain, adapterFactory); } /** @@ -105,6 +222,8 @@ public class CDOCompareEditorUtil @SuppressWarnings("restriction") private static final class Input extends org.eclipse.emf.compare.ide.ui.internal.editor.ComparisonEditorInput { + private Runnable disposeRunnable; + private boolean ok; private Input(CompareConfiguration configuration, Comparison comparison, ICompareEditingDomain editingDomain, @@ -112,7 +231,12 @@ public class CDOCompareEditorUtil { super(new org.eclipse.emf.compare.ide.ui.internal.configuration.EMFCompareConfiguration(configuration), comparison, editingDomain, adapterFactory); - setTitle("Model Comparison"); + setTitle("CDO Model Comparison"); + } + + public void setDisposeRunnable(Runnable disposeRunnable) + { + this.disposeRunnable = disposeRunnable; } public boolean isOK() @@ -123,8 +247,44 @@ public class CDOCompareEditorUtil @Override public boolean okPressed() { - ok = true; - return super.okPressed(); + try + { + ok = true; + return super.okPressed(); + } + finally + { + dispose(); + } + } + + @Override + public void removePropertyChangeListener(IPropertyChangeListener listener) + { + try + { + super.removePropertyChangeListener(listener); + } + finally + { + dispose(); + } + } + + private void dispose() + { + AdapterFactory adapterFactory = getAdapterFactory(); + if (adapterFactory instanceof ComposedAdapterFactory) + { + ComposedAdapterFactory composedAdapterFactory = (ComposedAdapterFactory)adapterFactory; + composedAdapterFactory.dispose(); + } + + if (disposeRunnable != null) + { + disposeRunnable.run(); + disposeRunnable = null; + } } } } diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/AbstractAction.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/AbstractCompareAction.java index 1c13133590..34790252b3 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/AbstractAction.java +++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/AbstractCompareAction.java @@ -10,11 +10,13 @@ */ package org.eclipse.emf.cdo.ui.internal.compare; +import org.eclipse.net4j.util.ui.actions.LongRunningActionDelegate; + import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import java.util.ArrayList; @@ -24,7 +26,7 @@ import java.util.List; /** * @author Eike Stepper */ -public abstract class AbstractAction<TARGET> implements IObjectActionDelegate +public abstract class AbstractCompareAction<TARGET> extends LongRunningActionDelegate { private final Class<TARGET> targetClass; @@ -32,7 +34,7 @@ public abstract class AbstractAction<TARGET> implements IObjectActionDelegate private ISelection selection; - public AbstractAction(Class<TARGET> targetClass) + public AbstractCompareAction(Class<TARGET> targetClass) { this.targetClass = targetClass; } @@ -47,12 +49,14 @@ public abstract class AbstractAction<TARGET> implements IObjectActionDelegate this.targetPart = targetPart; } + @Override public void selectionChanged(IAction action, ISelection selection) { this.selection = selection; } - public void run(IAction action) + @Override + protected void doRun(IProgressMonitor progressMonitor) throws Exception { if (selection instanceof IStructuredSelection) { @@ -72,11 +76,11 @@ public abstract class AbstractAction<TARGET> implements IObjectActionDelegate } } - run(action, targets); + run(targets, progressMonitor); } } - protected abstract void run(IAction action, List<TARGET> targets); + protected abstract void run(List<TARGET> targets, IProgressMonitor progressMonitor); @SuppressWarnings("unchecked") public static <T> T getAdapter(Object adaptable, Class<T> c) diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithEachOtherAction.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithEachOtherAction.java index 966707b680..8bb94a4e0b 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithEachOtherAction.java +++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithEachOtherAction.java @@ -13,14 +13,14 @@ package org.eclipse.emf.cdo.ui.internal.compare; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil; -import org.eclipse.jface.action.IAction; +import org.eclipse.core.runtime.IProgressMonitor; import java.util.List; /** * @author Eike Stepper */ -public class CompareWithEachOtherAction extends AbstractAction<CDOCommitInfo> +public class CompareWithEachOtherAction extends AbstractCompareAction<CDOCommitInfo> { public CompareWithEachOtherAction() { @@ -28,7 +28,7 @@ public class CompareWithEachOtherAction extends AbstractAction<CDOCommitInfo> } @Override - protected void run(IAction action, List<CDOCommitInfo> targets) + protected void run(List<CDOCommitInfo> targets, IProgressMonitor progressMonitor) { if (targets.size() == 2) { diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithPreviousVersionAction.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithPreviousVersionAction.java index ece8278104..61aa0fa669 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithPreviousVersionAction.java +++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareWithPreviousVersionAction.java @@ -13,14 +13,14 @@ package org.eclipse.emf.cdo.ui.internal.compare; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil; -import org.eclipse.jface.action.IAction; +import org.eclipse.core.runtime.IProgressMonitor; import java.util.List; /** * @author Eike Stepper */ -public class CompareWithPreviousVersionAction extends AbstractAction<CDOCommitInfo> +public class CompareWithPreviousVersionAction extends AbstractCompareAction<CDOCommitInfo> { public CompareWithPreviousVersionAction() { @@ -28,12 +28,12 @@ public class CompareWithPreviousVersionAction extends AbstractAction<CDOCommitIn } @Override - protected void run(IAction action, List<CDOCommitInfo> targets) + protected void run(List<CDOCommitInfo> targets, IProgressMonitor progressMonitor) { if (targets.size() == 1) { CDOCommitInfo commitInfo = targets.get(0); - CDOCompareEditorUtil.openDialog(commitInfo); + CDOCompareEditorUtil.openEditor(commitInfo, true); } } } diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/MergeAction.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/MergeAction.java index 7609500a22..f053ca2976 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/MergeAction.java +++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/MergeAction.java @@ -19,7 +19,7 @@ import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.net4j.util.lifecycle.LifecycleUtil; -import org.eclipse.jface.action.IAction; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPage; import java.util.List; @@ -27,7 +27,7 @@ import java.util.List; /** * @author Eike Stepper */ -public abstract class MergeAction extends AbstractAction<CDOTransaction> +public abstract class MergeAction extends AbstractCompareAction<CDOTransaction> { private final boolean allowTimeStamp; @@ -38,7 +38,7 @@ public abstract class MergeAction extends AbstractAction<CDOTransaction> } @Override - protected void run(IAction action, List<CDOTransaction> targets) + protected void run(List<CDOTransaction> targets, IProgressMonitor progressMonitor) { if (targets.size() == 1) { diff --git a/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java b/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java index b934d9742f..cfdae6d4b5 100644 --- a/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java +++ b/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java @@ -169,6 +169,7 @@ public class CDOHistoryPage extends HistoryPage IPageSite site = getSite(); TableViewer tableViewer = commitHistoryComposite.getTableViewer(); + UIUtil.addDragSupport(tableViewer); MenuManager menuManager = new MenuManager(POPUP_ID); diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java index 4dc8c3496c..73b07f4dd1 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java @@ -52,8 +52,10 @@ import org.eclipse.emf.spi.cdo.CDOSessionProtocol; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; @@ -100,7 +102,7 @@ public class CommitHistoryComposite extends Composite tableViewer = createTableViewer(); tableViewer.setContentProvider(createContentProvider()); - tableViewer.addDoubleClickListener(new DoubleClickListener()); + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) @@ -114,6 +116,22 @@ public class CommitHistoryComposite extends Composite } }); + tableViewer.addDoubleClickListener(new IDoubleClickListener() + { + public void doubleClick(DoubleClickEvent event) + { + doubleClicked(); + } + }); + + tableViewer.addOpenListener(new IOpenListener() + { + public void open(OpenEvent event) + { + doubleClicked(); + } + }); + labelProvider = createLabelProvider(); labelProvider.support(tableViewer); @@ -247,25 +265,19 @@ public class CommitHistoryComposite extends Composite { } - /** - * @author Eike Stepper - */ - private final class DoubleClickListener implements IDoubleClickListener + private void doubleClicked() { - public void doubleClick(DoubleClickEvent event) + IStructuredSelection selection = (IStructuredSelection)tableViewer.getSelection(); + CDOCommitInfo commitInfo = (CDOCommitInfo)selection.getFirstElement(); + if (commitInfo != null) { - IStructuredSelection selection = (IStructuredSelection)tableViewer.getSelection(); - CDOCommitInfo commitInfo = (CDOCommitInfo)selection.getFirstElement(); - if (commitInfo != null) + if (commitInfo instanceof TriggerLoadElement) { - if (commitInfo instanceof TriggerLoadElement) - { - history.triggerLoad(new RevealElementHandler()); - } - else - { - doubleClicked(commitInfo); - } + history.triggerLoad(new RevealElementHandler()); + } + else + { + doubleClicked(commitInfo); } } } |