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 | |
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')
14 files changed, 269 insertions, 116 deletions
diff --git a/plugins/org.eclipse.emf.cdo.dawn.gmf/src/org/eclipse/emf/cdo/dawn/gmf/editors/impl/DawnGMFEditorSupport.java b/plugins/org.eclipse.emf.cdo.dawn.gmf/src/org/eclipse/emf/cdo/dawn/gmf/editors/impl/DawnGMFEditorSupport.java index c79d2dd4ad..993f23c2c5 100644 --- a/plugins/org.eclipse.emf.cdo.dawn.gmf/src/org/eclipse/emf/cdo/dawn/gmf/editors/impl/DawnGMFEditorSupport.java +++ b/plugins/org.eclipse.emf.cdo.dawn.gmf/src/org/eclipse/emf/cdo/dawn/gmf/editors/impl/DawnGMFEditorSupport.java @@ -27,6 +27,7 @@ import org.eclipse.emf.cdo.transaction.CDOTransactionHandlerBase; import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.cdo.view.CDOView; +import org.eclipse.emf.common.command.CommandStack; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; @@ -100,7 +101,8 @@ public class DawnGMFEditorSupport extends DawnAbstractEditorSupport super.rollback(); final DiagramDocumentEditor diagramDocumentEditor = getDiagramEditor(getEditor()); TransactionalEditingDomain editingDomain = diagramDocumentEditor.getEditingDomain(); - editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) + CommandStack commandStack = editingDomain.getCommandStack(); + commandStack.execute(new RecordingCommand(editingDomain) { @Override public void doExecute() @@ -134,7 +136,8 @@ public class DawnGMFEditorSupport extends DawnAbstractEditorSupport { final DiagramDocumentEditor diagramDocumentEditor = getDiagramEditor(getEditor()); TransactionalEditingDomain editingDomain = diagramDocumentEditor.getEditingDomain(); - editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) + CommandStack commandStack = editingDomain.getCommandStack(); + commandStack.execute(new RecordingCommand(editingDomain) { @Override public void doExecute() 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) diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckoutManager.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckoutManager.java index b4bb2d3685..8c61877829 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckoutManager.java +++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckoutManager.java @@ -37,12 +37,14 @@ public interface CDOCheckoutManager extends CDOExplorerManager<CDOCheckout> /** * @author Eike Stepper */ - public interface CheckoutOpenEvent extends IEvent + public interface CheckoutStateEvent extends IEvent { public CDOCheckoutManager getSource(); public CDOCheckout getCheckout(); - public boolean isOpen(); + public CDOCheckout.State getOldState(); + + public CDOCheckout.State getNewState(); } } diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java index e282eeb6e4..0b90aa4e53 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java +++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java @@ -45,6 +45,7 @@ import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.spi.cdo.InternalCDOObject; import org.eclipse.emf.spi.cdo.InternalCDOView; import java.io.File; @@ -360,58 +361,77 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec public final void open() { - boolean opened = false; + CDOCheckoutManagerImpl manager = getManager(); + State oldState = null; + State newState = null; - synchronized (this) + try { - if (!isOpen()) + synchronized (this) { - try - { - state = State.Opening; - - prepareOpen(); - CDOSession session = ((CDORepositoryImpl)repository).openCheckout(this); + oldState = state; - view = openView(session); - view.addListener(new LifecycleEventAdapter() + if (!isOpen()) + { + try { - @Override - protected void onDeactivated(ILifecycle lifecycle) + state = State.Opening; + if (manager != null) { - removeView(view); - close(); + manager.fireCheckoutOpenEvent(this, null, oldState, state); } - }); - configureView(view); + oldState = state; - rootObject = loadRootObject(); - rootObject.eAdapters().add(this); + prepareOpen(); + CDOSession session = ((CDORepositoryImpl)repository).openCheckout(this); - state = State.Open; - } - catch (RuntimeException ex) - { - state = State.Closed; - throw ex; - } - catch (Error ex) - { - state = State.Closed; - throw ex; + view = openView(session); + view.addListener(new LifecycleEventAdapter() + { + @Override + protected void onDeactivated(ILifecycle lifecycle) + { + removeView(view); + if (state != State.Closing) + { + close(); + } + } + }); + + configureView(view); + + rootObject = loadRootObject(); + rootObject.eAdapters().add(this); + + state = State.Open; + newState = state; + } + catch (RuntimeException ex) + { + view = null; + rootObject = null; + state = State.Closed; + newState = state; + throw ex; + } + catch (Error ex) + { + view = null; + rootObject = null; + state = State.Closed; + newState = state; + throw ex; + } } - - opened = true; } } - - if (opened) + finally { - CDOCheckoutManagerImpl manager = getManager(); - if (manager != null) + if (manager != null && oldState != null && newState != null && newState != oldState) { - manager.fireCheckoutOpenEvent(this, view, true); + manager.fireCheckoutOpenEvent(this, view, oldState, newState); } } } @@ -467,7 +487,7 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec CDOCheckoutManagerImpl manager = getManager(); if (manager != null) { - manager.fireCheckoutOpenEvent(this, oldView, false); + manager.fireCheckoutOpenEvent(this, oldView, State.Open, State.Closed); } } } @@ -800,7 +820,8 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec rootID = view.getSession().getRepositoryInfo().getRootResourceID(); } - return view.getObject(rootID); + InternalCDOObject cdoObject = (InternalCDOObject)view.getObject(rootID); + return cdoObject.cdoInternalInstance(); } protected abstract CDOView openView(CDOSession session); diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutManagerImpl.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutManagerImpl.java index dcf84a489d..31a176a09b 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutManagerImpl.java +++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutManagerImpl.java @@ -64,18 +64,21 @@ public class CDOCheckoutManagerImpl extends AbstractManager<CDOCheckout>implemen return newElement(properties); } - public void fireCheckoutOpenEvent(CDOCheckout checkout, CDOView view, boolean open) + public void fireCheckoutOpenEvent(CDOCheckout checkout, CDOView view, CDOCheckout.State oldState, + CDOCheckout.State newState) { - if (open) + switch (newState) { + case Open: viewMap.put(view, checkout); - } - else - { + break; + + case Closed: viewMap.remove(view); + break; } - fireEvent(new CheckoutOpenEventImpl(this, checkout, open)); + fireEvent(new CheckoutStateEventImpl(this, checkout, oldState, newState)); } @Override @@ -127,19 +130,23 @@ public class CDOCheckoutManagerImpl extends AbstractManager<CDOCheckout>implemen /** * @author Eike Stepper */ - private static final class CheckoutOpenEventImpl extends Event implements CheckoutOpenEvent + private static final class CheckoutStateEventImpl extends Event implements CheckoutStateEvent { private static final long serialVersionUID = 1L; private final CDOCheckout checkout; - private final boolean open; + private final CDOCheckout.State oldState; - public CheckoutOpenEventImpl(CDOCheckoutManager repositoryManager, CDOCheckout checkout, boolean open) + private final CDOCheckout.State newState; + + public CheckoutStateEventImpl(CDOCheckoutManager repositoryManager, CDOCheckout checkout, + CDOCheckout.State oldState, CDOCheckout.State newState) { super(repositoryManager); this.checkout = checkout; - this.open = open; + this.oldState = oldState; + this.newState = newState; } @Override @@ -153,9 +160,20 @@ public class CDOCheckoutManagerImpl extends AbstractManager<CDOCheckout>implemen return checkout; } - public boolean isOpen() + public CDOCheckout.State getOldState() + { + return oldState; + } + + public CDOCheckout.State getNewState() + { + return newState; + } + + @Override + public String toString() { - return open; + return "CDOCheckoutState[" + checkout + ", " + oldState + " --> " + newState + "]"; } } } diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOTimeMachineView.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOTimeMachineView.java index f07fd6a7e1..97d937c6ac 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOTimeMachineView.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOTimeMachineView.java @@ -71,10 +71,7 @@ public class CDOTimeMachineView extends ViewPart implements ISelectionListener public void selectionChanged(IWorkbenchPart part, ISelection selection) { CDOView view = getView(selection); - if (view != null) - { - timeSlider.connect(view, null); - } + timeSlider.connect(view, null); } private CDOView getView(ISelection selection) diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOTreeExpansionAgent.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOTreeExpansionAgent.java index 657d6e8894..ed28b07434 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOTreeExpansionAgent.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOTreeExpansionAgent.java @@ -80,6 +80,16 @@ public class CDOTreeExpansionAgent } } + public final CDOView getView() + { + return view; + } + + public final TreeViewer getViewer() + { + return viewer; + } + public void setExpandedStates() { for (CDOID id : expandedIDs) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOElement.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOElement.java index e1b7a41fe2..57ba6b46c1 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOElement.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOElement.java @@ -23,6 +23,7 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreUtil; +import org.eclipse.emf.spi.cdo.InternalCDOObject; import org.eclipse.core.runtime.IAdaptable; @@ -45,7 +46,7 @@ public class CDOElement extends AdapterImpl implements IAdaptable public CDOElement(EObject delegate) { - this.delegate = delegate; + this.delegate = (EObject)getInstance(delegate); } public Object getDelegate() @@ -70,6 +71,8 @@ public class CDOElement extends AdapterImpl implements IAdaptable public void addChild(Object child) { + child = getInstance(child); + EList<Adapter> adapters = removeFrom(child); if (adapters != null) { @@ -203,6 +206,17 @@ public class CDOElement extends AdapterImpl implements IAdaptable } } + private static Object getInstance(Object object) + { + if (object instanceof InternalCDOObject) + { + InternalCDOObject cdoObject = (InternalCDOObject)object; + object = cdoObject.cdoInternalInstance(); + } + + return object; + } + /** * @author Eike Stepper * @since 4.4 diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOChangeSubscriptionAdapter.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOChangeSubscriptionAdapter.java index bd948d358a..bf22260635 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOChangeSubscriptionAdapter.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOChangeSubscriptionAdapter.java @@ -16,6 +16,7 @@ import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.impl.AdapterImpl; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import java.util.HashSet; @@ -78,7 +79,21 @@ public class CDOChangeSubscriptionAdapter extends AdapterImpl { for (CDOObject notifier : notifiers) { - notifier.eAdapters().remove(this); + try + { + if (notifier != null) + { + EList<Adapter> adapters = notifier.eAdapters(); + if (adapters != null) + { + adapters.remove(this); + } + } + } + catch (Exception ex) + { + //$FALL-THROUGH$ + } } notifiers.clear(); |