diff options
author | Eike Stepper | 2015-04-29 11:14:59 +0000 |
---|---|---|
committer | Eike Stepper | 2015-04-29 11:14:59 +0000 |
commit | bf030f9c3a2d48682cb6718c00e8db85f95c7703 (patch) | |
tree | 6982409e70e8c3d9bc499834652b721f5b2e8bd3 /plugins/org.eclipse.emf.cdo.explorer.ui | |
parent | fc1829383a42b6882b628de10cc925cccbaa8c87 (diff) | |
download | cdo-bf030f9c3a2d48682cb6718c00e8db85f95c7703.tar.gz cdo-bf030f9c3a2d48682cb6718c00e8db85f95c7703.tar.xz cdo-bf030f9c3a2d48682cb6718c00e8db85f95c7703.zip |
[458349] Consolidate UI
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.explorer.ui')
6 files changed, 128 insertions, 55 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ViewerUtil.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ViewerUtil.java index db73b369c1..e2d500d98a 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ViewerUtil.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ViewerUtil.java @@ -81,7 +81,7 @@ public final class ViewerUtil public static void refresh(final StructuredViewer viewer, final Object element, boolean async) { - refresh(viewer, element, true, false); + refresh(viewer, element, async, false); } public static void refresh(final StructuredViewer viewer, final Object element, boolean async, diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java index 36c843ffe0..6d370e5c1c 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java @@ -21,9 +21,8 @@ import org.eclipse.emf.cdo.explorer.CDOExplorerManager; import org.eclipse.emf.cdo.explorer.CDOExplorerManager.ElementsChangedEvent; import org.eclipse.emf.cdo.explorer.CDOExplorerUtil; import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout; -import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout.State; import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckoutManager; -import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckoutManager.CheckoutOpenEvent; +import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckoutManager.CheckoutStateEvent; import org.eclipse.emf.cdo.explorer.ui.ViewerUtil; import org.eclipse.emf.cdo.explorer.ui.bundle.OM; import org.eclipse.emf.cdo.explorer.ui.checkouts.actions.OpenWithActionProvider; @@ -43,6 +42,7 @@ import org.eclipse.net4j.util.ui.views.ItemProvider; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; @@ -126,24 +126,36 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp { viewerRefresh.addNotification(null, true, true); } - else if (event instanceof CheckoutOpenEvent) + else if (event instanceof CheckoutStateEvent) { - CheckoutOpenEvent e = (CheckoutOpenEvent)event; + CheckoutStateEvent e = (CheckoutStateEvent)event; CDOCheckout checkout = e.getCheckout(); + CDOCheckout.State state = e.getNewState(); - if (!e.isOpen()) + if (state == CDOCheckout.State.Opening) { - ViewerUtil.expand(viewer, checkout, false); - } - - viewerRefresh.addNotification(checkout, true, true); + // Trigger hasChildren(). + ViewerUtil.refresh(viewer, checkout); - if (e.isOpen()) - { + // Trigger getChildren(). ViewerUtil.expand(viewer, checkout, true); } + else + { + if (state == CDOCheckout.State.Closed) + { + ViewerUtil.expand(viewer, checkout, false); + } + + viewerRefresh.addNotification(checkout, true, true); + + if (state == CDOCheckout.State.Open) + { + ViewerUtil.expand(viewer, checkout, true); + } - updatePropertySheetPage(checkout); + updatePropertySheetPage(checkout); + } } else if (event instanceof CDOExplorerManager.ElementsChangedEvent) { @@ -246,8 +258,6 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp private final CDOCheckoutStateManager stateManager = new CDOCheckoutStateManager(this); - private final Map<CDOCheckout, CDOCheckout> openingCheckouts = new ConcurrentHashMap<CDOCheckout, CDOCheckout>(); - private final Map<Object, Object[]> childrenCache = new ConcurrentHashMap<Object, Object[]>(); private String viewerID; @@ -365,18 +375,20 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp if (object instanceof CDOCheckout) { CDOCheckout checkout = (CDOCheckout)object; - if (!checkout.isOpen()) + switch (checkout.getState()) { - if (openingCheckouts.get(checkout) != null) - { - // This must be the ViewerUtil.Pending element. - return true; - } - + case Closing: + case Closed: return false; - } - object = checkout.getRootObject(); + case Opening: + // This must be the ViewerUtil.Pending element. + return true; + + case Open: + object = checkout.getRootObject(); + break; + } } if (object instanceof CDOElement) @@ -473,18 +485,20 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp if (object instanceof CDOCheckout) { checkout = (CDOCheckout)object; - if (!checkout.isOpen()) - { - openingCheckout = openingCheckouts.remove(checkout); - if (openingCheckout == null) - { - return ViewerUtil.NO_CHILDREN; - } - } - if (openingCheckout == null) + switch (checkout.getState()) { + case Closing: + case Closed: + return ViewerUtil.NO_CHILDREN; + + case Opening: + openingCheckout = checkout; + break; + + case Open: object = checkout.getRootObject(); + break; } } @@ -545,6 +559,21 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp children = contentProvider.getChildren(finalObject); } + // Adjust possible legacy adapters. + for (int i = 0; i < children.length; i++) + { + Object child = children[i]; + if (child instanceof InternalCDOObject) + { + InternalCDOObject cdoObject = (InternalCDOObject)child; + InternalEObject instance = cdoObject.cdoInternalInstance(); + if (instance != cdoObject) + { + children[i] = instance; + } + } + } + children = CDOCheckoutContentModifier.Registry.INSTANCE.modifyChildren(finalObject, children); childrenCache.put(originalObject, children); } @@ -851,17 +880,27 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp Object element = ssel.getFirstElement(); if (element instanceof CDOCheckout) { - CDOCheckout checkout = (CDOCheckout)element; - if (checkout.getState() == State.Closed) + final CDOCheckout checkout = (CDOCheckout)element; + if (checkout.getState() == CDOCheckout.State.Closed) { - // Mark this checkout as loading. - openingCheckouts.put(checkout, checkout); - - // Trigger hasChildren(). - ViewerUtil.refresh(viewer, checkout); + // Simulate CheckoutOpenHandler. + new Job("Open " + checkout.getLabel()) + { + @Override + protected IStatus run(IProgressMonitor monitor) + { + try + { + checkout.open(); + } + catch (Exception ex) + { + OM.LOG.error(ex); + } - // Trigger getChildren(). - ViewerUtil.expand(viewer, checkout, true); + return Status.OK_STATUS; + } + }.schedule(); } } else if (element instanceof CDOResourceNode) diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutEditorOpenerRegistry.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutEditorOpenerRegistry.java index 6abca20f71..9b7c14ba93 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutEditorOpenerRegistry.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutEditorOpenerRegistry.java @@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.explorer.ui.checkouts; import org.eclipse.emf.cdo.explorer.CDOExplorerUtil; import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout; import org.eclipse.emf.cdo.explorer.ui.bundle.OM; +import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.ui.CDOEditorUtil; import org.eclipse.emf.cdo.util.CDOURIUtil; import org.eclipse.emf.cdo.view.CDOView; @@ -23,6 +24,7 @@ import org.eclipse.net4j.util.container.Container; import org.eclipse.net4j.util.om.OMPlatform; import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.spi.cdo.CDOMergingConflictResolver; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; @@ -219,6 +221,12 @@ public class CDOCheckoutEditorOpenerRegistry extends Container<CDOCheckoutEditor CDOCheckout checkout = CDOExplorerUtil.getCheckout(uri); final CDOView view = checkout.openView(); + if (view instanceof CDOTransaction) + { + CDOTransaction transaction = (CDOTransaction)view; + transaction.options().addConflictResolver(new CDOMergingConflictResolver()); + } + final IEditorPart editor = openEditor(page, view, CDOURIUtil.extractResourcePath(uri)); page.addPartListener(new IPartListener() { diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java index 16ad823131..4840a6d2f8 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java @@ -22,6 +22,7 @@ import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor; import org.eclipse.emf.cdo.ui.CDOEditorUtil; import org.eclipse.emf.cdo.ui.CDOLabelDecorator; import org.eclipse.emf.cdo.ui.CDOTreeExpansionAgent; +import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.net4j.util.event.IEvent; import org.eclipse.net4j.util.event.IListener; @@ -76,16 +77,17 @@ public final class CDOCheckoutState { public void notifyEvent(IEvent event) { - if (event instanceof CDOCheckoutManager.CheckoutOpenEvent) + if (event instanceof CDOCheckoutManager.CheckoutStateEvent) { - CDOCheckoutManager.CheckoutOpenEvent e = (CDOCheckoutManager.CheckoutOpenEvent)event; + CDOCheckoutManager.CheckoutStateEvent e = (CDOCheckoutManager.CheckoutStateEvent)event; if (e.getCheckout() == checkout) { - if (e.isOpen()) + CDOCheckout.State state = e.getNewState(); + if (state == CDOCheckout.State.Open) { initTreeExpansionAgent(); } - else + else if (state == CDOCheckout.State.Closed) { disposeTreeExpansionAgent(); } @@ -124,12 +126,26 @@ public final class CDOCheckoutState labelProvider = new LabelProvider(adapterFactory, resourceManager); labelProvider.addListener(eventBroker); - if (checkout.isOpen()) + initTreeExpansionAgent(); + CDOExplorerUtil.getCheckoutManager().addListener(checkoutManagerListener); + } + + void inputChanged(TreeViewer newTreeViewer, Object oldInput, Object newInput) + { + contentProvider.inputChanged(newTreeViewer, oldInput, newInput); + + if (treeExpansionAgent != null) { - initTreeExpansionAgent(); + if (newTreeViewer != treeExpansionAgent.getViewer()) + { + disposeTreeExpansionAgent(); + } } - CDOExplorerUtil.getCheckoutManager().addListener(checkoutManagerListener); + if (newTreeViewer != null) + { + initTreeExpansionAgent(); + } } public CDOCheckout getCheckout() @@ -184,8 +200,18 @@ public final class CDOCheckoutState private void initTreeExpansionAgent() { - TreeViewer viewer = stateManager.getMainContentProvider().getViewer(); - treeExpansionAgent = new CDOTreeExpansionAgent(checkout.getView(), viewer); + if (treeExpansionAgent == null) + { + CDOView view = checkout.getView(); + if (view != null) + { + TreeViewer viewer = stateManager.getMainContentProvider().getViewer(); + if (viewer != null) + { + treeExpansionAgent = new CDOTreeExpansionAgent(view, viewer); + } + } + } } /** diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java index 88ec8c987a..f55718aefc 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java @@ -22,7 +22,6 @@ import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; import org.eclipse.jface.resource.ResourceManager; -import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TreeViewer; import java.util.HashMap; @@ -103,8 +102,7 @@ public final class CDOCheckoutStateManager for (CDOCheckoutState state : getStates()) { - IContentProvider contentProvider = state.getContentProvider(); - contentProvider.inputChanged(newTreeViewer, oldInput, newInput); + state.inputChanged(newTreeViewer, oldInput, newInput); } } diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutBranchPointPage.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutBranchPointPage.java index e13b3a0daa..49ded02222 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutBranchPointPage.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutBranchPointPage.java @@ -99,7 +99,9 @@ public class CheckoutBranchPointPage extends CheckoutWizardPage @Override protected void createUI(Composite parent) { - branchPointComposite = new ComposeBranchPointComposite(parent, true, null) + CDOBranchPoint branchPoint = getBranchPoint(); + + branchPointComposite = new ComposeBranchPointComposite(parent, true, branchPoint) { @Override protected void timeStampError(String message) |