Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-02-27 04:45:19 +0000
committerEike Stepper2015-02-27 19:13:46 +0000
commitbed99117889e877520dfea016c9d434208084582 (patch)
treef32fb4754a8119797be898ffa102b33e99f31405 /plugins
parent4086386f0adefc75154c6b24ac21da81703d0ba2 (diff)
downloadcdo-bed99117889e877520dfea016c9d434208084582.tar.gz
cdo-bed99117889e877520dfea016c9d434208084582.tar.xz
cdo-bed99117889e877520dfea016c9d434208084582.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.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java477
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutDropAdapterAssistant.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java49
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoriesView.java23
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java49
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java89
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOPropertyAdapterFactory.java122
-rw-r--r--plugins/org.eclipse.emf.cdo/plugin.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java25
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java2
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java58
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java46
-rw-r--r--plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerItemProvider.java77
15 files changed, 629 insertions, 420 deletions
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 6a89b605d4..f2bf8d2116 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
@@ -35,7 +35,10 @@ import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.net4j.util.container.IContainerEvent;
import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
+import org.eclipse.net4j.util.lifecycle.LifecycleException;
+import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
import org.eclipse.net4j.util.ui.UIUtil;
+import org.eclipse.net4j.util.ui.views.ItemProvider;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.ecore.EObject;
@@ -44,7 +47,6 @@ import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.spi.cdo.FSMUtil;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.emf.spi.cdo.InternalCDOView;
@@ -327,259 +329,301 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp
public boolean hasChildren(Object object)
{
- if (object == input)
+ try
{
- return !CHECKOUT_MANAGER.isEmpty();
- }
+ if (object == input)
+ {
+ return !CHECKOUT_MANAGER.isEmpty();
+ }
- if (object instanceof ViewerUtil.Pending)
- {
- return false;
- }
+ if (object instanceof ViewerUtil.Pending)
+ {
+ return false;
+ }
- if (object instanceof CDOCheckout)
- {
- CDOCheckout checkout = (CDOCheckout)object;
- if (!checkout.isOpen())
+ if (object instanceof CDOCheckout)
{
- if (openingCheckouts.get(checkout) != null)
+ CDOCheckout checkout = (CDOCheckout)object;
+ if (!checkout.isOpen())
{
- // This must be the ViewerUtil.Pending element.
- return true;
+ if (openingCheckouts.get(checkout) != null)
+ {
+ // This must be the ViewerUtil.Pending element.
+ return true;
+ }
+
+ return false;
}
- return false;
+ object = checkout.getRootObject();
}
- object = checkout.getRootObject();
- }
-
- if (object instanceof CDOElement)
- {
- CDOElement checkoutElement = (CDOElement)object;
- return checkoutElement.hasChildren();
- }
-
- if (GET_CHILDREN_FEATURES_METHOD != null && object instanceof EObject)
- {
- EObject eObject = (EObject)object;
+ if (object instanceof CDOElement)
+ {
+ CDOElement checkoutElement = (CDOElement)object;
+ return checkoutElement.hasChildren();
+ }
- InternalCDOObject cdoObject = getCDOObject(eObject);
- if (cdoObject != null)
+ if (GET_CHILDREN_FEATURES_METHOD != null && object instanceof EObject)
{
- InternalCDORevision revision = cdoObject.cdoRevision(false);
- if (revision != null)
+ EObject eObject = (EObject)object;
+
+ InternalCDOObject cdoObject = getCDOObject(eObject);
+ if (cdoObject != null)
{
- ITreeItemContentProvider provider = (ITreeItemContentProvider)stateManager.adapt(object,
- ITreeItemContentProvider.class);
- if (provider instanceof ItemProviderAdapter)
+ InternalCDORevision revision = cdoObject.cdoRevision(false);
+ if (revision != null)
{
- try
- {
- return hasChildren(cdoObject, revision, (ItemProviderAdapter)provider);
- }
- catch (Exception ex)
+ ITreeItemContentProvider provider = (ITreeItemContentProvider)stateManager.adapt(object,
+ ITreeItemContentProvider.class);
+ if (provider instanceof ItemProviderAdapter)
{
- //$FALL-THROUGH$
+ try
+ {
+ return hasChildren(cdoObject, revision, (ItemProviderAdapter)provider);
+ }
+ catch (Exception ex)
+ {
+ //$FALL-THROUGH$
+ }
}
}
}
}
- }
-
- ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
- return contentProvider.hasChildren(object);
- }
- public Object[] getChildren(Object object)
- {
- if (object == input)
- {
- return CHECKOUT_MANAGER.getCheckouts();
+ ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
+ if (contentProvider != null)
+ {
+ return contentProvider.hasChildren(object);
+ }
}
-
- if (object instanceof ViewerUtil.Pending)
+ catch (LifecycleException ex)
{
- return ViewerUtil.NO_CHILDREN;
+ //$FALL-THROUGH$
}
-
- if (object instanceof CDOElement)
+ catch (RuntimeException ex)
{
- CDOElement checkoutElement = (CDOElement)object;
- return checkoutElement.getChildren();
- }
+ if (LifecycleUtil.isActive(object))
+ {
+ throw ex;
+ }
- final Object originalObject = object;
- Object[] children = childrenCache.remove(originalObject);
- if (children != null)
- {
- return children;
+ //$FALL-THROUGH$
}
- CDOCheckout openingCheckout = null;
+ return false;
+ }
- if (object instanceof CDOCheckout)
+ public Object[] getChildren(Object object)
+ {
+ try
{
- CDOCheckout checkout = (CDOCheckout)object;
- if (!checkout.isOpen())
+ if (object == input)
{
- openingCheckout = openingCheckouts.remove(checkout);
- if (openingCheckout == null)
- {
- return ViewerUtil.NO_CHILDREN;
- }
+ return CHECKOUT_MANAGER.getCheckouts();
}
- if (openingCheckout == null)
+ if (object instanceof ViewerUtil.Pending)
{
- object = checkout.getRootObject();
+ return ViewerUtil.NO_CHILDREN;
}
- }
- final List<CDORevision> loadedRevisions = new ArrayList<CDORevision>();
- final List<CDOID> missingIDs = new ArrayList<CDOID>();
+ if (object instanceof CDOElement)
+ {
+ CDOElement checkoutElement = (CDOElement)object;
+ return checkoutElement.getChildren();
+ }
- if (openingCheckout == null)
- {
- children = determineChildRevisions(object, loadedRevisions, missingIDs);
+ final Object originalObject = object;
+ Object[] children = childrenCache.remove(originalObject);
if (children != null)
{
- return CDOCheckoutContentModifier.Registry.INSTANCE.modifyChildren(object, children);
+ return children;
}
- }
- final Object finalObject = object;
- final CDOCheckout finalOpeningCheckout = openingCheckout;
+ CDOCheckout openingCheckout = null;
- synchronized (LOADING_OBJECTS)
- {
- LOADING_OBJECTS.add(originalObject);
- }
-
- new Job("Load " + finalObject)
- {
- @Override
- protected IStatus run(IProgressMonitor monitor)
+ if (object instanceof CDOCheckout)
{
- try
+ CDOCheckout checkout = (CDOCheckout)object;
+ if (!checkout.isOpen())
{
- if (finalOpeningCheckout != null)
+ openingCheckout = openingCheckouts.remove(checkout);
+ if (openingCheckout == null)
{
- finalOpeningCheckout.open();
- determineChildRevisions(finalObject, loadedRevisions, missingIDs);
+ return ViewerUtil.NO_CHILDREN;
}
+ }
- if (!missingIDs.isEmpty())
- {
- CDOObject cdoObject = CDOUtil.getCDOObject((EObject)finalObject);
- CDOView view = cdoObject.cdoView();
- CDORevisionManager revisionManager = view.getSession().getRevisionManager();
+ if (openingCheckout == null)
+ {
+ object = checkout.getRootObject();
+ }
+ }
- List<CDORevision> revisions = revisionManager.getRevisions(missingIDs, view, CDORevision.UNCHUNKED,
- CDORevision.DEPTH_NONE, true);
- loadedRevisions.addAll(revisions);
- }
+ final Object finalObject = object;
+ final CDOCheckout finalOpeningCheckout = openingCheckout;
+ final ITreeContentProvider contentProvider = stateManager.getContentProvider(finalObject);
+ if (contentProvider == null)
+ {
+ return ItemProvider.NO_ELEMENTS;
+ }
- ITreeContentProvider contentProvider = stateManager.getContentProvider(finalObject);
- Object[] children = contentProvider.getChildren(finalObject);
+ final List<CDORevision> loadedRevisions = new ArrayList<CDORevision>();
+ final List<CDOID> missingIDs = new ArrayList<CDOID>();
- children = CDOCheckoutContentModifier.Registry.INSTANCE.modifyChildren(finalObject, children);
- childrenCache.put(originalObject, children);
- }
- catch (final Exception ex)
+ if (openingCheckout == null)
+ {
+ children = determineChildRevisions(object, loadedRevisions, missingIDs);
+ if (children != null)
{
- childrenCache.remove(originalObject);
+ return CDOCheckoutContentModifier.Registry.INSTANCE.modifyChildren(object, children);
+ }
+ }
+
+ synchronized (LOADING_OBJECTS)
+ {
+ LOADING_OBJECTS.add(originalObject);
+ }
- if (finalOpeningCheckout != null)
+ new Job("Load " + finalObject)
+ {
+ @Override
+ protected IStatus run(IProgressMonitor monitor)
+ {
+ try
{
- finalOpeningCheckout.close();
- }
+ if (finalOpeningCheckout != null)
+ {
+ finalOpeningCheckout.open();
+ determineChildRevisions(finalObject, loadedRevisions, missingIDs);
+ }
- OM.LOG.error(ex);
+ if (!missingIDs.isEmpty())
+ {
+ CDOObject cdoObject = getCDOObject((EObject)finalObject);
+ CDOView view = cdoObject.cdoView();
+ CDORevisionManager revisionManager = view.getSession().getRevisionManager();
- final Control control = viewer.getControl();
- if (!control.isDisposed())
+ List<CDORevision> revisions = revisionManager.getRevisions(missingIDs, view, CDORevision.UNCHUNKED,
+ CDORevision.DEPTH_NONE, true);
+ loadedRevisions.addAll(revisions);
+ }
+
+ Object[] children = contentProvider.getChildren(finalObject);
+ children = CDOCheckoutContentModifier.Registry.INSTANCE.modifyChildren(finalObject, children);
+ childrenCache.put(originalObject, children);
+ }
+ catch (final Exception ex)
{
- UIUtil.getDisplay().asyncExec(new Runnable()
+ childrenCache.remove(originalObject);
+
+ if (finalOpeningCheckout != null)
{
- public void run()
+ finalOpeningCheckout.close();
+ }
+
+ OM.LOG.error(ex);
+
+ final Control control = viewer.getControl();
+ if (!control.isDisposed())
+ {
+ UIUtil.getDisplay().asyncExec(new Runnable()
{
- try
+ public void run()
{
- if (!control.isDisposed())
+ try
+ {
+ if (!control.isDisposed())
+ {
+ Shell shell = control.getShell();
+ String title = (finalOpeningCheckout != null ? "Open" : "Load") + " Error";
+ MessageDialog.openError(shell, title, ex.getMessage());
+ }
+ }
+ catch (Exception ex)
{
- Shell shell = control.getShell();
- String title = (finalOpeningCheckout != null ? "Open" : "Load") + " Error";
- MessageDialog.openError(shell, title, ex.getMessage());
+ OM.LOG.error(ex);
}
}
- catch (Exception ex)
- {
- OM.LOG.error(ex);
- }
- }
- });
+ });
+ }
}
- }
- // The viewer must be refreshed synchronously so that the loaded children don't get garbage collected.
- // Set the selection again to trigger, e.g., a History page update.
- ViewerUtil.refresh(viewer, originalObject, false, true);
+ // The viewer must be refreshed synchronously so that the loaded children don't get garbage collected.
+ // Set the selection again to trigger, e.g., a History page update.
+ ViewerUtil.refresh(viewer, originalObject, false, true);
- synchronized (LOADING_OBJECTS)
- {
- LOADING_OBJECTS.remove(originalObject);
- }
+ synchronized (LOADING_OBJECTS)
+ {
+ LOADING_OBJECTS.remove(originalObject);
+ }
- return Status.OK_STATUS;
- }
- }.schedule();
+ return Status.OK_STATUS;
+ }
+ }.schedule();
- if (FIND_ITEM_METHOD != null)
- {
- try
+ if (FIND_ITEM_METHOD != null)
{
- Object widget = FIND_ITEM_METHOD.invoke(viewer, originalObject);
- if (widget instanceof TreeItem)
+ try
{
- TreeItem item = (TreeItem)widget;
- TreeItem[] childItems = item.getItems();
-
- int childCount = childItems.length;
- if (childCount != 0)
+ Object widget = FIND_ITEM_METHOD.invoke(viewer, originalObject);
+ if (widget instanceof TreeItem)
{
- List<Object> result = new ArrayList<Object>();
- for (int i = 0; i < childCount; i++)
+ TreeItem item = (TreeItem)widget;
+ TreeItem[] childItems = item.getItems();
+
+ int childCount = childItems.length;
+ if (childCount != 0)
{
- TreeItem childItem = childItems[i];
- Object child = childItem.getData();
- if (child != null)
+ List<Object> result = new ArrayList<Object>();
+ for (int i = 0; i < childCount; i++)
{
- result.add(child);
+ TreeItem childItem = childItems[i];
+ Object child = childItem.getData();
+ if (child != null)
+ {
+ result.add(child);
+ }
}
- }
- int size = result.size();
- if (size != 0)
- {
- return result.toArray(new Object[size]);
+ int size = result.size();
+ if (size != 0)
+ {
+ return result.toArray(new Object[size]);
+ }
}
}
}
+ catch (Exception ex)
+ {
+ //$FALL-THROUGH$
+ }
}
- catch (Exception ex)
+
+ String text = "Loading...";
+ if (finalOpeningCheckout != null)
{
- //$FALL-THROUGH$
+ text = "Opening...";
}
- }
- String text = "Loading...";
- if (finalOpeningCheckout != null)
+ return new Object[] { new ViewerUtil.Pending(originalObject, text) };
+ }
+ catch (LifecycleException ex)
{
- text = "Opening...";
+ //$FALL-THROUGH$
+ }
+ catch (RuntimeException ex)
+ {
+ if (LifecycleUtil.isActive(object))
+ {
+ throw ex;
+ }
+
+ //$FALL-THROUGH$
}
- return new Object[] { new ViewerUtil.Pending(originalObject, text) };
+ return ItemProvider.NO_ELEMENTS;
}
private Object[] determineChildRevisions(Object object, List<CDORevision> loadedRevisions, List<CDOID> missingIDs)
@@ -611,7 +655,10 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp
{
// All revisions are cached. Just return the objects without server round-trips.
ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
- return contentProvider.getChildren(object);
+ if (contentProvider != null)
+ {
+ return contentProvider.getChildren(object);
+ }
}
}
}
@@ -628,42 +675,63 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp
public Object getParent(Object object)
{
- if (object == input)
- {
- return null;
- }
-
- if (object instanceof CDOCheckout)
+ try
{
- return input;
- }
+ if (object == input)
+ {
+ return null;
+ }
- if (object instanceof ViewerUtil.Pending)
- {
- return ((ViewerUtil.Pending)object).getParent();
- }
+ if (object instanceof CDOCheckout)
+ {
+ return input;
+ }
- if (object instanceof CDOElement)
- {
- CDOElement checkoutElement = (CDOElement)object;
- return checkoutElement.getParent();
- }
+ if (object instanceof ViewerUtil.Pending)
+ {
+ return ((ViewerUtil.Pending)object).getParent();
+ }
- if (object instanceof EObject)
- {
- EObject eObject = (EObject)object;
+ if (object instanceof CDOElement)
+ {
+ CDOElement checkoutElement = (CDOElement)object;
+ return checkoutElement.getParent();
+ }
+ if (object instanceof EObject)
{
- Adapter adapter = EcoreUtil.getAdapter(eObject.eAdapters(), CDOCheckout.class);
- if (adapter instanceof CDOCheckout)
+ EObject eObject = (EObject)object;
+
{
- return adapter;
+ Adapter adapter = EcoreUtil.getAdapter(eObject.eAdapters(), CDOCheckout.class);
+ if (adapter instanceof CDOCheckout)
+ {
+ return adapter;
+ }
}
}
+
+ ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
+ if (contentProvider != null)
+ {
+ return contentProvider.getParent(object);
+ }
+ }
+ catch (LifecycleException ex)
+ {
+ //$FALL-THROUGH$
+ }
+ catch (RuntimeException ex)
+ {
+ if (LifecycleUtil.isActive(object))
+ {
+ throw ex;
+ }
+
+ //$FALL-THROUGH$
}
- ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
- return contentProvider.getParent(object);
+ return null;
}
public IPropertySource getPropertySource(Object object)
@@ -773,18 +841,7 @@ public class CDOCheckoutContentProvider implements ICommonContentProvider, IProp
private static InternalCDOObject getCDOObject(EObject eObject)
{
- if (eObject instanceof InternalCDOObject)
- {
- return (InternalCDOObject)eObject;
- }
-
- Adapter adapter = FSMUtil.getLegacyAdapter(eObject);
- if (adapter != null)
- {
- return (InternalCDOObject)adapter;
- }
-
- return null;
+ return (InternalCDOObject)CDOUtil.getCDOObject(eObject, false);
}
private static boolean hasChildren(InternalCDOObject cdoObject, InternalCDORevision revision,
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutDropAdapterAssistant.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutDropAdapterAssistant.java
index 6137777e85..d3c5478ec6 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutDropAdapterAssistant.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutDropAdapterAssistant.java
@@ -126,16 +126,16 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant
{
// Merge From (online + offline)
CDORepository repository = checkout.getRepository();
- CDOBranchPoint left = checkout.getBranchPoint();
- CDOBranchPoint right = branchPoint;
+ CDOBranchPoint left = branchPoint;
+ CDOBranchPoint right = checkout.getBranchPoint();
CDOCompareEditorUtil.openEditor(repository, repository, left, right, null, true);
}
else if (dropOperation == DND.DROP_LINK)
{
// Compare With (online + offline)
CDORepository repository = checkout.getRepository();
- CDOBranchPoint left = checkout.getBranchPoint();
- CDOBranchPoint right = branchPoint;
+ CDOBranchPoint left = branchPoint;
+ CDOBranchPoint right = checkout.getBranchPoint();
CDOCompareEditorUtil.openEditor(repository, left, right, null, true);
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java
index 09b2eaa194..7b0d85ac4a 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java
@@ -192,6 +192,12 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
return;
}
+ CDOCheckout checkout = CDOExplorerUtil.getCheckout(selectedObject);
+ if (checkout == null)
+ {
+ return;
+ }
+
// Fill the menu from the commonWizard contributions.
newWizardActionGroup.setContext(getContext());
newWizardActionGroup.fillContextMenu(submenu);
@@ -216,7 +222,7 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
if (selectedObject instanceof CDOResource)
{
- fillNewRootActions(submenu, (CDOResource)selectedObject);
+ fillNewRootActions(submenu, checkout, (CDOResource)selectedObject);
}
else if (selectedObject instanceof CDOResourceNode)
{
@@ -224,7 +230,7 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
}
else if (selectedObject instanceof EObject)
{
- fillNewChildActions(submenu, (EObject)selectedObject);
+ fillNewChildActions(submenu, checkout, (EObject)selectedObject);
}
submenu.add(new Separator(ICommonMenuConstants.GROUP_ADDITIONS));
@@ -237,7 +243,7 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
menu.insertAfter(ICommonMenuConstants.GROUP_NEW, submenu);
}
- private void fillNewRootActions(IMenuManager menu, final CDOResource resource)
+ private void fillNewRootActions(IMenuManager menu, final CDOCheckout checkout, final CDOResource resource)
{
CDOPackageRegistry packageRegistry = resource.cdoView().getSession().getPackageRegistry();
NewRootMenuPopulator populator = new NewRootMenuPopulator(packageRegistry)
@@ -245,26 +251,23 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
@Override
protected IAction createAction(EObject object)
{
- CDOCheckoutContentProvider contentProvider = getContentProvider();
- ComposedAdapterFactory adapterFactory = contentProvider.getStateManager().getState(object).getAdapterFactory();
+ ComposedAdapterFactory adapterFactory = getAdapterFactory(checkout);
Object image = CDOEditor.getLabelImage(adapterFactory, object);
ImageDescriptor imageDescriptor = ExtendedImageRegistry.getInstance().getImageDescriptor(image);
- return new NewRootAction(resource, object, imageDescriptor);
+ return new NewRootAction(resource, checkout, object, imageDescriptor);
}
};
populator.populateMenu(menu);
}
- private void fillNewChildActions(IMenuManager menu, EObject object)
+ private void fillNewChildActions(IMenuManager menu, CDOCheckout checkout, EObject object)
{
- CDOCheckout checkout = CDOExplorerUtil.getCheckout(object);
ResourceSet resourceSet = checkout.getView().getResourceSet();
- CDOCheckoutContentProvider contentProvider = getContentProvider();
- ComposedAdapterFactory adapterFactory = contentProvider.getStateManager().getState(checkout).getAdapterFactory();
+ ComposedAdapterFactory adapterFactory = getAdapterFactory(checkout);
EditingDomain editingDomain = new AdapterFactoryEditingDomain(adapterFactory, new BasicCommandStack(), resourceSet);
IStructuredSelection selection = new StructuredSelection(object);
@@ -278,11 +281,18 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
String toolTipText = delegate.getToolTipText();
ImageDescriptor imageDescriptor = delegate.getImageDescriptor();
- NewChildAction action = new NewChildAction(text, toolTipText, imageDescriptor, cdoObject, childDescriptor);
+ NewChildAction action = new NewChildAction(text, toolTipText, imageDescriptor, checkout, cdoObject,
+ childDescriptor);
menu.add(action);
}
}
+ private ComposedAdapterFactory getAdapterFactory(CDOCheckout checkout)
+ {
+ CDOCheckoutContentProvider contentProvider = getContentProvider();
+ return contentProvider.getStateManager().getState(checkout).getAdapterFactory();
+ }
+
private CDOCheckoutContentProvider getContentProvider()
{
if (contentProvider == null)
@@ -299,17 +309,20 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
*/
private abstract class AbstractNewAction extends TransactionalBackgroundAction
{
+ private CDOCheckout checkout;
+
private EObject newObject;
- public AbstractNewAction(String text, String toolTipText, ImageDescriptor image, CDOObject parent)
+ public AbstractNewAction(String text, String toolTipText, ImageDescriptor image, CDOCheckout checkout,
+ CDOObject parent)
{
super(page, text, toolTipText, image, parent);
+ this.checkout = checkout;
}
@Override
protected CDOTransaction openTransaction(CDOObject AbstractNewAction)
{
- CDOCheckout checkout = CDOExplorerUtil.getCheckout(AbstractNewAction);
if (checkout != null)
{
return checkout.openTransaction();
@@ -351,9 +364,9 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
{
private final EObject object;
- public NewRootAction(CDOResource resource, EObject object, ImageDescriptor image)
+ public NewRootAction(CDOResource resource, CDOCheckout checkout, EObject object, ImageDescriptor image)
{
- super(object.eClass().getName(), null, image, resource);
+ super(object.eClass().getName(), null, image, checkout, resource);
this.object = object;
}
@@ -373,10 +386,10 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
{
private final Object childDescriptor;
- public NewChildAction(String text, String toolTipText, ImageDescriptor image, CDOObject parent,
- Object childDescriptor)
+ public NewChildAction(String text, String toolTipText, ImageDescriptor image, CDOCheckout checkout,
+ CDOObject parent, Object childDescriptor)
{
- super(text, toolTipText, image, parent);
+ super(text, toolTipText, image, checkout, parent);
this.childDescriptor = childDescriptor;
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoriesView.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoriesView.java
index 630071e4e4..a2dee9d7c3 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoriesView.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoriesView.java
@@ -32,7 +32,9 @@ import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
import org.eclipse.net4j.util.ui.views.ContainerView;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -129,7 +131,7 @@ public class CDORepositoriesView extends ContainerView
{
addCollapseAllAction(manager);
- manager.add(new Action("Local")
+ manager.add(new Action("Test")
{
@Override
public void run()
@@ -156,8 +158,15 @@ public class CDORepositoriesView extends ContainerView
.getEPackage("http://www.eclipse.org/emf/CDO/examples/company/1.0.0");
EClass eClass = (EClass)ePackage.getEClassifier("Company");
+ EObject company = EcoreUtil.create(eClass);
+ addChild(company, "categories", "Category");
+ addChild(company, "suppliers", "Supplier");
+ addChild(company, "customers", "Customer");
+ addChild(company, "purchaseOrders", "PurchaseOrder");
+ addChild(company, "salesOrders", "SalesOrder");
+
CDOResource resource = transaction.createResource("model1");
- resource.getContents().add(EcoreUtil.create(eClass));
+ resource.getContents().add(company);
transaction.commit();
}
@@ -174,6 +183,16 @@ public class CDORepositoriesView extends ContainerView
transaction.close();
}
}
+
+ private void addChild(EObject company, String featureName, String className)
+ {
+ EClass companyClass = company.eClass();
+ EObject object = EcoreUtil.create((EClass)companyClass.getEPackage().getEClassifier(className));
+
+ @SuppressWarnings("unchecked")
+ EList<EObject> list = (EList<EObject>)company.eGet(companyClass.getEStructuralFeature(featureName));
+ list.add(object);
+ }
});
manager.add(newAction);
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java
index 3f8eec66db..bbe04deaee 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/CDORepositoryItemProvider.java
@@ -67,9 +67,11 @@ public class CDORepositoryItemProvider extends ContainerItemProvider<IContainer<
if (!e.isConnected())
{
Node node = getNode(repository);
- node.disposeChildren();
-
- ViewerUtil.expand(viewer, repository, false);
+ if (node != null)
+ {
+ node.disposeChildren();
+ ViewerUtil.expand(viewer, repository, false);
+ }
}
ViewerUtil.refresh(viewer, repository);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java
index fc156d0696..c51b3c7963 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/BackupTest.java
@@ -80,7 +80,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
public void testExportDate() throws Exception
@@ -99,7 +98,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
public void testExportBlob() throws Exception
@@ -132,7 +130,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
public void testExportClob() throws Exception
@@ -164,7 +161,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
public void testExportCustomDataType() throws Exception
@@ -181,7 +177,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
public void testExportFeatureMap() throws Exception
@@ -200,7 +195,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
public void testExportExternalReference() throws Exception
@@ -224,7 +218,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
}
private void useAfterImport(String repoName) throws CommitException
@@ -275,7 +268,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
@@ -303,7 +295,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
@@ -343,7 +334,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
@@ -382,7 +372,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
@@ -406,7 +395,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
@@ -432,7 +420,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
@@ -463,7 +450,6 @@ public class BackupTest extends AbstractCDOTest
ByteArrayOutputStream baos = new ByteArrayOutputStream();
CDOServerExporter.XML exporter = new CDOServerExporter.XML(repo1);
exporter.exportRepository(baos);
- System.out.println(baos.toString());
InternalRepository repo2 = getRepository("repo2", false);
diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java
index 6b35a1f82c..2043ec46df 100644
--- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java
+++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/InvalidationTest.java
@@ -11,12 +11,15 @@
*/
package org.eclipse.emf.cdo.tests;
+import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOState;
import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.session.CDOSessionInvalidationEvent;
+import org.eclipse.emf.cdo.tests.config.IRepositoryConfig;
import org.eclipse.emf.cdo.tests.model1.Category;
import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.tests.model1.Customer;
@@ -908,4 +911,50 @@ public class InvalidationTest extends AbstractCDOTest
}
}.assertNoTimeOut();
}
+
+ @Requires(IRepositoryConfig.CAPABILITY_BRANCHING)
+ public void testDeleteFromOtherBranch() throws Exception
+ {
+ Company companyA = getModel1Factory().createCompany();
+ Category categoryA = getModel1Factory().createCategory();
+ companyA.getCategories().add(categoryA);
+
+ CDOSession session = openSession();
+ session.options().setPassiveUpdateEnabled(true);
+ session.options().setPassiveUpdateMode(PassiveUpdateMode.CHANGES);
+
+ CDOTransaction transactionA = session.openTransaction();
+ CDOResource resourceA = transactionA.createResource(getResourcePath("/test1"));
+ resourceA.getContents().add(companyA);
+
+ CDOBranch mainBranch = transactionA.getBranch();
+ transactionA.commit(); // company v1
+ assertEquals(mainBranch, CDOUtil.getCDOObject(companyA).cdoRevision().getBranch());
+ assertEquals(1, CDOUtil.getCDOObject(companyA).cdoRevision().getVersion());
+
+ companyA.setName("ESC");
+ transactionA.commit(); // company v2
+ assertEquals(mainBranch, CDOUtil.getCDOObject(companyA).cdoRevision().getBranch());
+ assertEquals(2, CDOUtil.getCDOObject(companyA).cdoRevision().getVersion());
+
+ CDOTransaction transactionB = session.openTransaction();
+ CDOResource resourceB = transactionB.getResource(getResourcePath("/test1"));
+ Company companyB = (Company)resourceB.getContents().get(0);
+ companyB.getCategories().get(0);
+ CDOObject cdoCompanyB = CDOUtil.getCDOObject(companyB);
+
+ CDOBranch branch1 = mainBranch.createBranch("branch1");
+ transactionB.setBranch(branch1);
+ transactionA.setBranch(branch1);
+
+ assertEquals(mainBranch, cdoCompanyB.cdoRevision().getBranch());
+ assertEquals(2, cdoCompanyB.cdoRevision().getVersion());
+
+ companyA.getCategories().remove(0);
+ commitAndSync(transactionA, transactionB);
+
+ assertEquals(CDOState.CLEAN, cdoCompanyB.cdoState());
+ assertEquals(branch1, cdoCompanyB.cdoRevision().getBranch());
+ assertEquals(1, cdoCompanyB.cdoRevision().getVersion());
+ }
}
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 c33c0b20b8..13159a4f5d 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
@@ -10,8 +10,10 @@
*/
package org.eclipse.emf.cdo.ui.compare;
+import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
+import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.compare.CDOCompare;
import org.eclipse.emf.cdo.compare.CDOCompareUtil;
import org.eclipse.emf.cdo.session.CDORepositoryInfo;
@@ -21,6 +23,7 @@ import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.transaction.CDOTransactionOpener;
import org.eclipse.emf.cdo.ui.CDOItemProvider;
import org.eclipse.emf.cdo.ui.internal.compare.bundle.OM;
+import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.cdo.view.CDOViewOpener;
@@ -29,6 +32,7 @@ import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.domain.ICompareEditingDomain;
import org.eclipse.emf.compare.domain.impl.EMFCompareEditingDomain;
import org.eclipse.emf.compare.scope.IComparisonScope;
@@ -47,6 +51,7 @@ import org.eclipse.swt.graphics.Image;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
/**
@@ -67,20 +72,20 @@ public class CDOCompareEditorUtil
public static boolean openEditor(CDOViewOpener viewOpener, CDOBranchPoint leftPoint, CDOBranchPoint rightPoint,
CDOView[] originView, boolean activate)
{
- return openEditor(null, viewOpener, leftPoint, rightPoint, originView, activate);
+ return openEditor(viewOpener, null, leftPoint, rightPoint, originView, activate);
}
/**
* @since 4.3
*/
- public static boolean openEditor(CDOTransactionOpener transactionOpener, CDOViewOpener viewOpener,
+ public static boolean openEditor(CDOViewOpener viewOpener, CDOTransactionOpener transactionOpener,
CDOBranchPoint leftPoint, CDOBranchPoint rightPoint, CDOView[] originView, boolean activate)
{
ACTIVATE_EDITOR.set(activate);
try
{
- return openDialog(transactionOpener, viewOpener, leftPoint, rightPoint, originView);
+ return openDialog(viewOpener, transactionOpener, leftPoint, rightPoint, originView);
}
finally
{
@@ -153,13 +158,13 @@ public class CDOCompareEditorUtil
public static boolean openDialog(CDOViewOpener viewOpener, CDOBranchPoint leftPoint, CDOBranchPoint rightPoint,
CDOView[] originView)
{
- return openDialog(null, viewOpener, leftPoint, rightPoint, originView);
+ return openDialog(viewOpener, null, leftPoint, rightPoint, originView);
}
/**
* @since 4.3
*/
- public static boolean openDialog(CDOTransactionOpener transactionOpener, CDOViewOpener viewOpener,
+ public static boolean openDialog(CDOViewOpener viewOpener, CDOTransactionOpener transactionOpener,
CDOBranchPoint leftPoint, CDOBranchPoint rightPoint, CDOView[] originView)
{
final Boolean activateEditor = ACTIVATE_EDITOR.get();
@@ -176,19 +181,19 @@ public class CDOCompareEditorUtil
try
{
- ResourceSet leftResourceSet = new ResourceSetImpl();
+ leftAndRightView[0] = viewOpener.openView(leftPoint, new ResourceSetImpl());
+
+ ResourceSet rightResourceSet = new ResourceSetImpl();
if (transactionOpener != null)
{
- leftPoint = leftPoint.getBranch().getHead();
- leftAndRightView[0] = transactionOpener.openTransaction(leftPoint, leftResourceSet);
+ rightPoint = rightPoint.getBranch().getHead();
+ leftAndRightView[1] = transactionOpener.openTransaction(rightPoint, rightResourceSet);
}
else
{
- leftAndRightView[0] = viewOpener.openView(leftPoint, leftResourceSet);
+ leftAndRightView[1] = viewOpener.openView(rightPoint, rightResourceSet);
}
- leftAndRightView[1] = viewOpener.openView(rightPoint, new ResourceSetImpl());
-
return openDialog(leftAndRightView[0], leftAndRightView[1], originView);
}
finally
@@ -289,18 +294,18 @@ public class CDOCompareEditorUtil
CompareConfiguration configuration = new CompareConfiguration();
configuration.setLeftImage(leftImage);
- configuration.setLeftLabel("Target: " + leftLabel);
+ configuration.setLeftLabel("From " + leftLabel);
configuration.setLeftEditable(leftEditable);
configuration.setRightImage(rightImage);
- configuration.setRightLabel("Source: " + rightLabel);
+ configuration.setRightLabel("Into " + rightLabel);
configuration.setRightEditable(rightEditable);
boolean merge = leftEditable || rightEditable;
String repositoryName = ((InternalCDOView)leftView).getRepositoryName();
- String title = (merge ? "Merge " : "Compare ") + repositoryName + " " + leftLabel + (merge ? " from " : " and ")
+ String title = (merge ? "Merge " : "Compare ") + repositoryName + " " + leftLabel + (merge ? " into " : " and ")
+ rightLabel;
- Input input = new Input(leftView, configuration, comparison, editingDomain, adapterFactory);
+ Input input = new Input(rightView, configuration, comparison, editingDomain, adapterFactory);
input.setTitle(title);
return input;
}
@@ -353,18 +358,21 @@ public class CDOCompareEditorUtil
{
private static final Image COMPARE_IMAGE = OM.getImage("icons/compare.gif");
- private final CDOView leftView;
+ private final CDOView targetView;
+
+ private final Comparison comparison;
private List<Runnable> disposeRunnables;
private boolean ok;
- private Input(CDOView leftView, CompareConfiguration configuration, Comparison comparison,
+ private Input(CDOView targetView, CompareConfiguration configuration, Comparison comparison,
ICompareEditingDomain editingDomain, AdapterFactory adapterFactory)
{
super(new org.eclipse.emf.compare.ide.ui.internal.configuration.EMFCompareConfiguration(configuration),
comparison, editingDomain, adapterFactory);
- this.leftView = leftView;
+ this.targetView = targetView;
+ this.comparison = comparison;
}
private void dispose()
@@ -392,26 +400,39 @@ public class CDOCompareEditorUtil
}
@Override
- public void cancelPressed()
- {
- super.cancelPressed();
- }
-
- @Override
public void saveChanges(IProgressMonitor monitor) throws CoreException
{
- if (leftView instanceof CDOTransaction)
+ if (targetView instanceof CDOTransaction)
{
- CDOTransaction transaction = (CDOTransaction)leftView;
-
- try
- {
- transaction.commit(monitor);
- setDirty(false);
- }
- catch (Exception ex)
+ CDOTransaction transaction = (CDOTransaction)targetView;
+ if (transaction.isDirty())
{
- OM.BUNDLE.coreException(ex);
+ Collection<CDOObject> values = transaction.getNewObjects().values();
+ if (!values.isEmpty())
+ {
+ CDOObject[] rightObjects = values.toArray(new CDOObject[values.size()]);
+ for (CDOObject rightObject : rightObjects)
+ {
+ Match match = comparison.getMatch(rightObject);
+ if (match != null)
+ {
+ CDOObject leftObject = CDOUtil.getCDOObject(match.getLeft());
+ CDOID id = leftObject.cdoID();
+
+ org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.resurrectObject(rightObject, id);
+ }
+ }
+ }
+
+ try
+ {
+ transaction.commit(monitor);
+ setDirty(false);
+ }
+ catch (Exception ex)
+ {
+ OM.BUNDLE.coreException(ex);
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOPropertyAdapterFactory.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOPropertyAdapterFactory.java
index 9d95a040df..d820c786e1 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOPropertyAdapterFactory.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOPropertyAdapterFactory.java
@@ -10,10 +10,12 @@
*/
package org.eclipse.emf.cdo.internal.ui;
+import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.edit.CDOItemProviderAdapter.CDOPropertyDescriptor;
import org.eclipse.emf.cdo.internal.ui.bundle.OM;
import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor;
import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.internal.cdo.object.ObjectProperties;
@@ -80,83 +82,87 @@ public class CDOPropertyAdapterFactory extends AbstractPropertyAdapterFactory
if (object instanceof EObject)
{
EObject eObject = (EObject)object;
-
- final Map<String, Object> emfProperties = new HashMap<String, Object>();
- DefaultPropertySource<EObject> result = new DefaultPropertySource<EObject>(eObject, ObjectProperties.INSTANCE)
+ CDOObject cdoObject = CDOUtil.getCDOObject(eObject, false);
+ if (cdoObject != null)
{
- @Override
- public Object getPropertyValue(Object id)
+ final Map<String, Object> emfProperties = new HashMap<String, Object>();
+ DefaultPropertySource<EObject> result = new DefaultPropertySource<EObject>(cdoObject,
+ ObjectProperties.INSTANCE)
{
- Object value = emfProperties.get(id);
- if (value != null)
+ @Override
+ public Object getPropertyValue(Object id)
{
- return value;
- }
-
- return super.getPropertyValue(id);
- }
- };
+ Object value = emfProperties.get(id);
+ if (value != null)
+ {
+ return value;
+ }
- ComposedAdapterFactory adapterFactory = null;
- AdapterFactoryLabelProvider labelProvider = null;
+ return super.getPropertyValue(id);
+ }
+ };
- try
- {
- adapterFactory = CDOEditor.createAdapterFactory(false);
+ ComposedAdapterFactory adapterFactory = null;
+ AdapterFactoryLabelProvider labelProvider = null;
- IItemPropertySource propertySource = (IItemPropertySource)adapterFactory.adapt(eObject,
- IItemPropertySource.class);
- if (propertySource != null)
+ try
{
- List<IItemPropertyDescriptor> propertyDescriptors = propertySource.getPropertyDescriptors(eObject);
- if (propertyDescriptors != null)
- {
- labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
+ adapterFactory = CDOEditor.createAdapterFactory(false);
- for (IItemPropertyDescriptor propertyDescriptor : propertyDescriptors)
+ IItemPropertySource propertySource = (IItemPropertySource)adapterFactory.adapt(cdoObject,
+ IItemPropertySource.class);
+ if (propertySource != null)
+ {
+ List<IItemPropertyDescriptor> propertyDescriptors = propertySource.getPropertyDescriptors(cdoObject);
+ if (propertyDescriptors != null)
{
- if (propertyDescriptor instanceof CDOPropertyDescriptor)
+ labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
+
+ for (IItemPropertyDescriptor propertyDescriptor : propertyDescriptors)
{
- continue;
- }
+ if (propertyDescriptor instanceof CDOPropertyDescriptor)
+ {
+ continue;
+ }
- String category = getTypeText(adapterFactory, eObject);
- String id = "___EMF___" + propertyDescriptor.getId(eObject);
- String displayName = propertyDescriptor.getDisplayName(eObject);
- String description = propertyDescriptor.getDescription(eObject);
+ String category = getTypeText(adapterFactory, cdoObject);
+ String id = "___EMF___" + propertyDescriptor.getId(cdoObject);
+ String displayName = propertyDescriptor.getDisplayName(cdoObject);
+ String description = propertyDescriptor.getDescription(cdoObject);
- PropertyDescriptor descriptor = result.addDescriptor(category, id, displayName, description);
+ PropertyDescriptor descriptor = result.addDescriptor(category, id, displayName, description);
- Object value = propertyDescriptor.getPropertyValue(eObject);
- emfProperties.put(id, value);
+ Object value = propertyDescriptor.getPropertyValue(cdoObject);
+ emfProperties.put(id, value);
- final String text = labelProvider.getText(value);
- descriptor.setLabelProvider(new LabelProvider()
- {
- @Override
- public String getText(Object element)
+ final String text = labelProvider.getText(value);
+ descriptor.setLabelProvider(new LabelProvider()
{
- return text;
- }
- });
+ @Override
+ public String getText(Object element)
+ {
+ return text;
+ }
+ });
+ }
}
}
}
- }
- finally
- {
- if (labelProvider != null)
+ finally
{
- labelProvider.dispose();
- }
+ if (labelProvider != null)
+ {
+ labelProvider.dispose();
+ }
- if (adapterFactory != null)
- {
- adapterFactory.dispose();
+ if (adapterFactory != null)
+ {
+ adapterFactory.dispose();
+ }
}
- }
- return result;
+ return result;
+ }
}
}
catch (LifecycleException ex)
@@ -189,7 +195,11 @@ public class CDOPropertyAdapterFactory extends AbstractPropertyAdapterFactory
if (object instanceof EObject)
{
- return OBJECT_ACTION_FILTER;
+ EObject eObject = (EObject)object;
+ if (CDOUtil.isCDOObject(eObject))
+ {
+ return OBJECT_ACTION_FILTER;
+ }
}
return super.createActionFilter(object);
diff --git a/plugins/org.eclipse.emf.cdo/plugin.xml b/plugins/org.eclipse.emf.cdo/plugin.xml
index 09311e354c..69ccebd452 100644
--- a/plugins/org.eclipse.emf.cdo/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo/plugin.xml
@@ -57,7 +57,7 @@
id="org.eclipse.emf.cdo.object.properties"
type="org.eclipse.emf.ecore.EObject"
namespace="org.eclipse.emf.cdo.object"
- properties="id,version,branch,state,transactional,readable,writable,writableContainer,container,children,permission,permissionContainer,readLocks,readLocked,readLockedByOthers,writeLock,writeLocked,writeLockedByOthers,writeOption,writeOptioned,writeOptionedByOthers,viewHistorical,uri"
+ properties="isCDO,id,version,branch,state,transactional,readable,writable,writableContainer,container,children,permission,permissionContainer,readLocks,readLocked,readLockedByOthers,writeLock,writeLocked,writeLockedByOthers,writeOption,writeOptioned,writeOptionedByOthers,viewHistorical,uri"
class="org.eclipse.emf.internal.cdo.object.ObjectProperties$Tester"/>
</extension>
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
index a145ffc68c..a0cff26a76 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOUtil.java
@@ -499,17 +499,38 @@ public final class CDOUtil
*/
public static CDOObject getCDOObject(EObject object)
{
+ return getCDOObject(object, true);
+ }
+
+ /**
+ * @since 4.4
+ */
+ public static CDOObject getCDOObject(EObject object, boolean adaptLegacy)
+ {
if (object == null)
{
return null;
}
- if (object instanceof CDOObject)
+ if (object instanceof InternalCDOObject)
{
return (CDOObject)object;
}
- return FSMUtil.adaptLegacy((InternalEObject)object);
+ if (adaptLegacy)
+ {
+ return FSMUtil.adaptLegacy((InternalEObject)object);
+ }
+
+ return (CDOObject)FSMUtil.getLegacyAdapter(object);
+ }
+
+ /**
+ * @since 4.4
+ */
+ public static boolean isCDOObject(EObject object)
+ {
+ return getCDOObject(object, false) != null;
}
/**
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java
index 849af60e3f..4cea4498b6 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOStaleReferencePolicy.java
@@ -126,7 +126,7 @@ public interface CDOStaleReferencePolicy
if (name.equals("toString")) //$NON-NLS-1$
{
- return "StaleReferenceProxy[" + target + "]";
+ return "StaleReference[" + type.getName() + "@" + target + "]";
}
if (tracer.isEnabled())
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
index 8f4a78558e..4dab584e15 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java
@@ -43,13 +43,22 @@ public class ObjectProperties extends Properties<EObject>
{
super(EObject.class);
+ add(new Property<EObject>("isCDO") //$NON-NLS-1$
+ {
+ @Override
+ protected Object eval(EObject object)
+ {
+ return getCDOObject(object) != null;
+ }
+ });
+
add(new Property<EObject>("id", //$NON-NLS-1$
"ID", "The technical CDOID of this object.", CATEGORY_CDO)
{
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -65,7 +74,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return 0;
@@ -87,7 +96,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -109,7 +118,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -124,7 +133,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -145,7 +154,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return true;
@@ -160,7 +169,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return true;
@@ -187,7 +196,7 @@ public class ObjectProperties extends Properties<EObject>
return true;
}
- CDOObject cdoContainer = CDOUtil.getCDOObject(container);
+ CDOObject cdoContainer = getCDOObject(container);
if (cdoContainer == null)
{
return true;
@@ -214,7 +223,7 @@ public class ObjectProperties extends Properties<EObject>
return false;
}
- CDOObject cdoContainer = CDOUtil.getCDOObject(container);
+ CDOObject cdoContainer = getCDOObject(container);
if (cdoContainer == null)
{
return false;
@@ -239,7 +248,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -259,7 +268,7 @@ public class ObjectProperties extends Properties<EObject>
EObject eContainer = object.eContainer();
if (eContainer != null)
{
- cdoObject = CDOUtil.getCDOObject(eContainer);
+ cdoObject = getCDOObject(eContainer);
}
if (cdoObject == null)
@@ -286,7 +295,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -307,7 +316,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -328,7 +337,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -350,7 +359,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -371,7 +380,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -392,7 +401,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -414,7 +423,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -435,7 +444,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -456,7 +465,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -477,7 +486,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return false;
@@ -498,7 +507,7 @@ public class ObjectProperties extends Properties<EObject>
@Override
protected Object eval(EObject object)
{
- CDOObject cdoObject = CDOUtil.getCDOObject(object);
+ CDOObject cdoObject = getCDOObject(object);
if (cdoObject == null)
{
return null;
@@ -517,6 +526,11 @@ public class ObjectProperties extends Properties<EObject>
});
}
+ private static CDOObject getCDOObject(EObject object)
+ {
+ return CDOUtil.getCDOObject(object, false);
+ }
+
public static void main(String[] args)
{
new Tester().dumpContributionMarkup();
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java
index ba2895e6b0..58a8444d68 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDOStateMachine.java
@@ -12,13 +12,14 @@
package org.eclipse.emf.internal.cdo.view;
import org.eclipse.emf.cdo.CDOState;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.id.CDOIDTemp;
import org.eclipse.emf.cdo.common.revision.CDORevisable;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.common.revision.CDORevisionFactory;
import org.eclipse.emf.cdo.common.revision.CDORevisionKey;
-import org.eclipse.emf.cdo.common.revision.CDORevisionUtil;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDOListFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
@@ -1101,8 +1102,6 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
public void execute(InternalCDOObject object, CDOState state, CDOEvent event, CDORevisionKey key)
{
InternalCDORevision oldRevision = object.cdoRevision();
- InternalCDORevision newRevision = null;
-
InternalCDOView view = object.cdoView();
InternalCDOSession session = view.getSession();
InternalCDORevisionCache cache = session.getRevisionManager().getCache();
@@ -1111,7 +1110,7 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
{
CDORevisionDelta delta = (CDORevisionDelta)key;
CDORevisable target = delta.getTarget();
- newRevision = (InternalCDORevision)cache.getRevisionByVersion(delta.getID(), target);
+ InternalCDORevision newRevision = (InternalCDORevision)cache.getRevisionByVersion(delta.getID(), target);
if (newRevision == null)
{
newRevision = oldRevision.copy();
@@ -1130,16 +1129,13 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
if (key == null || key.getVersion() >= oldRevision.getVersion())
{
- CDORevisionKey newKey = null;
- if (key != null)
- {
- int newVersion = getNewVersion(key);
- newKey = CDORevisionUtil.createRevisionKey(key.getID(), key.getBranch(), newVersion);
- }
+ InternalCDORevision newRevision = null;
- if (newKey != null)
+ CDOBranch viewBranch = view.getBranch();
+ CDOBranchVersion newBranchVersion = getNewBranchVersion(key, viewBranch);
+ if (newBranchVersion != null)
{
- newRevision = (InternalCDORevision)cache.getRevisionByVersion(newKey.getID(), newKey);
+ newRevision = (InternalCDORevision)cache.getRevisionByVersion(key.getID(), newBranchVersion);
}
if (newRevision != null)
@@ -1160,19 +1156,31 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent
}
}
- private int getNewVersion(CDORevisionKey key)
+ private CDOBranchVersion getNewBranchVersion(CDORevisionKey key, CDOBranch viewBranch)
{
- if (key instanceof CDORevisionDelta)
+ if (key != null)
{
- CDORevisionDelta delta = (CDORevisionDelta)key;
- CDORevisable target = delta.getTarget();
- if (target != null && key.getBranch() == target.getBranch())
+ CDOBranch keyBranch = key.getBranch();
+
+ if (key instanceof CDORevisionDelta)
{
- return target.getVersion();
+ CDORevisionDelta delta = (CDORevisionDelta)key;
+ CDORevisable target = delta.getTarget();
+ if (target != null && keyBranch == target.getBranch())
+ {
+ return target;
+ }
+ }
+
+ if (keyBranch == viewBranch)
+ {
+ return keyBranch.getVersion(key.getVersion() + 1);
}
+
+ return viewBranch.getVersion(CDOBranchVersion.FIRST_VERSION);
}
- return key.getVersion() + 1;
+ return null;
}
}
diff --git a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerItemProvider.java b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerItemProvider.java
index df8b27bba7..1c0dd04fe4 100644
--- a/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerItemProvider.java
+++ b/plugins/org.eclipse.net4j.util.ui/src/org/eclipse/net4j/util/ui/views/ContainerItemProvider.java
@@ -91,12 +91,17 @@ public class ContainerItemProvider<CONTAINER extends IContainer<Object>> extends
try
{
Node node = getNode(element);
- return node.hasChildren();
+ if (node != null)
+ {
+ return node.hasChildren();
+ }
}
catch (RuntimeException ex)
{
- return false;
+ //$FALL-THROUGH$
}
+
+ return false;
}
public Object[] getChildren(Object element)
@@ -104,37 +109,42 @@ public class ContainerItemProvider<CONTAINER extends IContainer<Object>> extends
try
{
Node node = getNode(element);
- List<Node> children = node.getChildren();
- for (Iterator<Node> it = children.iterator(); it.hasNext();)
+ if (node != null)
{
- Node child = it.next();
- if (child.isDisposed())
- {
- it.remove();
- }
- else
+ List<Node> children = node.getChildren();
+ for (Iterator<Node> it = children.iterator(); it.hasNext();)
{
- Object childElement = child.getElement();
- LifecycleState lifecycleState = LifecycleUtil.getLifecycleState(childElement);
- if (lifecycleState == LifecycleState.INACTIVE || lifecycleState == LifecycleState.DEACTIVATING)
+ Node child = it.next();
+ if (child.isDisposed())
{
- handleInactiveElement(it, child);
+ it.remove();
+ }
+ else
+ {
+ Object childElement = child.getElement();
+ LifecycleState lifecycleState = LifecycleUtil.getLifecycleState(childElement);
+ if (lifecycleState == LifecycleState.INACTIVE || lifecycleState == LifecycleState.DEACTIVATING)
+ {
+ handleInactiveElement(it, child);
+ }
}
}
- }
- Object[] result = new Object[children.size()];
- for (int i = 0; i < result.length; i++)
- {
- result[i] = children.get(i).getElement();
- }
+ Object[] result = new Object[children.size()];
+ for (int i = 0; i < result.length; i++)
+ {
+ result[i] = children.get(i).getElement();
+ }
- return result;
+ return result;
+ }
}
catch (RuntimeException ex)
{
- return NO_ELEMENTS;
+ //$FALL-THROUGH$
}
+
+ return NO_ELEMENTS;
}
public Object getParent(Object element)
@@ -142,13 +152,18 @@ public class ContainerItemProvider<CONTAINER extends IContainer<Object>> extends
try
{
Node node = getNode(element);
- Node parentNode = node.getParent();
- return parentNode == null ? null : parentNode.getElement();
+ if (node != null)
+ {
+ Node parentNode = node.getParent();
+ return parentNode == null ? null : parentNode.getElement();
+ }
}
catch (RuntimeException ex)
{
- return null;
+ //$FALL-THROUGH$
}
+
+ return null;
}
/**
@@ -234,18 +249,12 @@ public class ContainerItemProvider<CONTAINER extends IContainer<Object>> extends
protected Node getNode(Object element)
{
- Node node = root;
- if (element != getInput())
- {
- node = nodes.get(element);
- }
-
- if (node == null)
+ if (element == getInput())
{
- throw new IllegalStateException("No node for " + element); //$NON-NLS-1$
+ return root;
}
- return node;
+ return nodes.get(element);
}
protected Node createNode(Node parent, Object element)

Back to the top