Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-04-29 11:14:59 +0000
committerEike Stepper2015-04-29 11:14:59 +0000
commitbf030f9c3a2d48682cb6718c00e8db85f95c7703 (patch)
tree6982409e70e8c3d9bc499834652b721f5b2e8bd3 /plugins
parentfc1829383a42b6882b628de10cc925cccbaa8c87 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.dawn.gmf/src/org/eclipse/emf/cdo/dawn/gmf/editors/impl/DawnGMFEditorSupport.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ViewerUtil.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java121
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutEditorOpenerRegistry.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java44
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutBranchPointPage.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckoutManager.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java99
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutManagerImpl.java42
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOTimeMachineView.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOTreeExpansionAgent.java10
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/CDOElement.java16
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOChangeSubscriptionAdapter.java17
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();

Back to the top