diff options
author | Eike Stepper | 2015-02-27 04:45:19 +0000 |
---|---|---|
committer | Eike Stepper | 2015-02-27 19:13:46 +0000 |
commit | bed99117889e877520dfea016c9d434208084582 (patch) | |
tree | f32fb4754a8119797be898ffa102b33e99f31405 /plugins | |
parent | 4086386f0adefc75154c6b24ac21da81703d0ba2 (diff) | |
download | cdo-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')
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) |