diff options
author | Eike Stepper | 2015-03-02 18:42:50 +0000 |
---|---|---|
committer | Eike Stepper | 2015-03-02 18:42:50 +0000 |
commit | bf71608ba0912a067c4e9f5eb16aaafac85f8e68 (patch) | |
tree | 2438f77ae85258b9b1edac526bf12e703860ac82 | |
parent | b4c27cde2cd092c670044fa9d6464b51cedbc161 (diff) | |
download | cdo-bf71608ba0912a067c4e9f5eb16aaafac85f8e68.tar.gz cdo-bf71608ba0912a067c4e9f5eb16aaafac85f8e68.tar.xz cdo-bf71608ba0912a067c4e9f5eb16aaafac85f8e68.zip |
[458349] Consolidate UI
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
12 files changed, 298 insertions, 115 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/.settings/.api_filters b/plugins/org.eclipse.emf.cdo.explorer.ui/.settings/.api_filters index fb5a265ed5..ea3ca7fa39 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/.settings/.api_filters +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/.settings/.api_filters @@ -8,4 +8,20 @@ </message_arguments> </filter> </resource> + <resource path="src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java" type="org.eclipse.emf.cdo.explorer.ui.checkouts.actions.NewActionProvider$WizardDescriptorWrapper"> + <filter id="574619656"> + <message_arguments> + <message_argument value="IWizardDescriptor"/> + <message_argument value="WizardDescriptorWrapper"/> + </message_arguments> + </filter> + </resource> + <resource path="src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java" type="org.eclipse.emf.cdo.explorer.ui.checkouts.actions.NewActionProvider$WizardRegistryWrapper"> + <filter id="574619656"> + <message_arguments> + <message_argument value="IWizardRegistry"/> + <message_argument value="WizardRegistryWrapper"/> + </message_arguments> + </filter> + </resource> </component> 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 f03b7bd1a5..44c49eb4c3 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 @@ -11,7 +11,6 @@ package org.eclipse.emf.cdo.explorer.ui.checkouts; import org.eclipse.emf.cdo.CDOElement; -import org.eclipse.emf.cdo.CDOState; import org.eclipse.emf.cdo.common.branch.CDOBranch; import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; import org.eclipse.emf.cdo.eresource.CDOResource; @@ -372,7 +371,7 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant @Override protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask(title, 110 + (copy ? objects.length + 1 : 0)); + monitor.beginTask(title, 111 + objects.length); CDOCheckout checkout = CDOExplorerUtil.getCheckout(objects[0]); CDOTransaction transaction = checkout.openTransaction(); @@ -395,10 +394,14 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant if (copier != null) { transactionalObject = copier.copy(transactionalObject); - monitor.worked(1); + } + else + { + EcoreUtil.remove(transactionalObject); } transactionalObjects.add(transactionalObject); + monitor.worked(1); } if (copier != null) @@ -409,12 +412,13 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant T transactionalTarget = transaction.getObject(target); - insert(transactionalObjects, transactionalTarget, new SubProgressMonitor(monitor, 10)); + insert(transactionalObjects, transactionalTarget, copy, new SubProgressMonitor(monitor, 10)); transaction.commit(new SubProgressMonitor(monitor, 100)); } catch (Exception ex) { OM.LOG.error(ex); + return new Status(IStatus.ERROR, OM.BUNDLE_ID, "The operation did not complete sucessfully.", ex); } finally { @@ -427,7 +431,7 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant }.schedule(); } - protected abstract void insert(List<? extends EObject> objects, T target, IProgressMonitor monitor); + protected abstract void insert(List<? extends EObject> objects, T target, boolean copy, IProgressMonitor monitor); @SuppressWarnings("unchecked") public static <T extends EObject> Operation<T> getFor(Object target, TransferData transferType) @@ -502,17 +506,18 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant return null; } - private static void setUniqueName(CDOResourceNode resourceNode, EList<? extends EObject> contents) + private static void setUniqueName(CDOResourceNode resourceNode, EList<? extends EObject> targetContents, + boolean copy) { boolean nameConflict = false; String resourceName = resourceNode.getName(); Set<String> names = new HashSet<String>(); - for (Object object : contents) + for (Object existingChild : targetContents) { - if (object != resourceNode) + if (existingChild != resourceNode) { - String name = ((CDOResourceNode)object).getName(); + String name = ((CDOResourceNode)existingChild).getName(); if (ObjectUtil.equals(name, resourceName)) { nameConflict = true; @@ -524,10 +529,10 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant if (nameConflict) { - String copyName = resourceName + "-copy"; + String renamed = resourceName + (copy ? "-copy" : "-renamed"); for (int i = 0; i < Integer.MAX_VALUE; i++) { - String name = copyName; + String name = renamed; if (i != 0) { name += i; @@ -553,7 +558,7 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant } @Override - protected void insert(List<? extends EObject> objects, CDOResource target, IProgressMonitor monitor) + protected void insert(List<? extends EObject> objects, CDOResource target, boolean copy, IProgressMonitor monitor) { target.getContents().addAll(objects); } @@ -647,7 +652,7 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant } @Override - protected void insert(List<? extends EObject> objects, EObject target, IProgressMonitor monitor) + protected void insert(List<? extends EObject> objects, EObject target, boolean copy, IProgressMonitor monitor) { for (EObject object : objects) { @@ -694,24 +699,14 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant * TODO Consolidate with {@link ResourceNodeToFolder#insert(List, CDOResourceFolder, IProgressMonitor)}. */ @Override - protected void insert(List<? extends EObject> objects, CDOResource target, IProgressMonitor monitor) + protected void insert(List<? extends EObject> objects, CDOResource target, boolean copy, IProgressMonitor monitor) { EList<EObject> contents = target.getContents(); for (EObject object : objects) { CDOResourceNode resourceNode = (CDOResourceNode)object; - boolean copy = resourceNode.cdoState() == CDOState.TRANSIENT; + setUniqueName(resourceNode, contents, copy); contents.add(resourceNode); - // resourceNode.setFolder(null); - - if (copy) - { - // The object must be attached before getParent() is called! - if (CDOExplorerUtil.getParent(object) == target) - { - setUniqueName(resourceNode, contents); - } - } } } } @@ -727,24 +722,15 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant } @Override - protected void insert(List<? extends EObject> objects, CDOResourceFolder target, IProgressMonitor monitor) + protected void insert(List<? extends EObject> objects, CDOResourceFolder target, boolean copy, + IProgressMonitor monitor) { EList<CDOResourceNode> nodes = target.getNodes(); for (EObject object : objects) { CDOResourceNode resourceNode = (CDOResourceNode)object; - boolean copy = resourceNode.cdoState() == CDOState.TRANSIENT; + setUniqueName(resourceNode, nodes, copy); nodes.add(resourceNode); - // ((InternalCDOObject)resourceNode).eSetResource(null, null); - - if (copy) - { - // The resourceNode must be attached before getParent() is called! - if (CDOExplorerUtil.getParent(resourceNode) == target) - { - setUniqueName(resourceNode, nodes); - } - } } } } diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/CDOCheckoutDashboard.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/CDOCheckoutDashboard.java index f46351fc6a..245cb649a8 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/CDOCheckoutDashboard.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/CDOCheckoutDashboard.java @@ -356,7 +356,7 @@ public class CDOCheckoutDashboard extends Composite implements ISelectionListene protected void viewChanged(CDOView oldView, CDOView newView) { super.viewChanged(oldView, newView); - // timeSlider.connect(newView, null); + timeSlider.connect(newView, null); } } 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 6df0419c57..bf1d676175 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 @@ -36,6 +36,7 @@ import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.ui.action.CreateChildAction; import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; @@ -52,6 +53,7 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWizard; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.navigator.CommonActionProvider; @@ -103,38 +105,8 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio showDlgAction = ActionFactory.NEW.create(window); - final CDOCheckoutContentProvider contentProvider = getContentProvider(); - final IWizardRegistry wizardRegistry = PlatformUI.getWorkbench().getNewWizardRegistry(); - - IWizardRegistry wrapperRegistry = new IWizardRegistry() - { - public IWizardCategory getRootCategory() - { - return wizardRegistry.getRootCategory(); - } - - public IWizardDescriptor[] getPrimaryWizards() - { - return wizardRegistry.getPrimaryWizards(); - } - - public IWizardDescriptor findWizard(String id) - { - IWizardDescriptor wizard = wizardRegistry.findWizard(id); - if (wizard instanceof AbstractNewWizard) - { - AbstractNewWizard newWizard = (AbstractNewWizard)wizard; - newWizard.setContentProvider(contentProvider); - } - - return wizard; - } - - public IWizardCategory findCategory(String id) - { - return wizardRegistry.findCategory(id); - } - }; + CDOCheckoutContentProvider contentProvider = getContentProvider(); + IWizardRegistry wrapperRegistry = new WizardRegistryWrapper(contentProvider); newWizardActionGroup = new WizardActionGroup(window, wrapperRegistry, WizardActionGroup.TYPE_NEW, extensionSite.getContentService()); @@ -317,6 +289,135 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio /** * @author Eike Stepper */ + private static final class WizardRegistryWrapper implements IWizardRegistry + { + private static final IWizardRegistry DELEGATE = PlatformUI.getWorkbench().getNewWizardRegistry(); + + private final CDOCheckoutContentProvider contentProvider; + + private WizardRegistryWrapper(CDOCheckoutContentProvider contentProvider) + { + this.contentProvider = contentProvider; + } + + public IWizardCategory getRootCategory() + { + return DELEGATE.getRootCategory(); + } + + public IWizardDescriptor[] getPrimaryWizards() + { + return DELEGATE.getPrimaryWizards(); + } + + public IWizardDescriptor findWizard(String id) + { + final IWizardDescriptor delegate = DELEGATE.findWizard(id); + if (delegate != null) + { + return new WizardDescriptorWrapper(delegate, contentProvider); + } + + return delegate; + } + + public IWizardCategory findCategory(String id) + { + return DELEGATE.findCategory(id); + } + } + + /** + * @author Eike Stepper + */ + private static final class WizardDescriptorWrapper implements IWizardDescriptor + { + private final IWizardDescriptor delegate; + + private final CDOCheckoutContentProvider contentProvider; + + private WizardDescriptorWrapper(IWizardDescriptor delegate, CDOCheckoutContentProvider contentProvider) + { + this.delegate = delegate; + this.contentProvider = contentProvider; + } + + public String getId() + { + return delegate.getId(); + } + + public ImageDescriptor getImageDescriptor() + { + return delegate.getImageDescriptor(); + } + + public IStructuredSelection adaptedSelection(IStructuredSelection selection) + { + return delegate.adaptedSelection(selection); + } + + public String getLabel() + { + return delegate.getLabel(); + } + + public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) + { + return delegate.getAdapter(adapter); + } + + public String getDescription() + { + return delegate.getDescription(); + } + + public String[] getTags() + { + return delegate.getTags(); + } + + public IWorkbenchWizard createWizard() throws CoreException + { + IWorkbenchWizard wizard = delegate.createWizard(); + if (wizard instanceof AbstractNewWizard) + { + AbstractNewWizard newWizard = (AbstractNewWizard)wizard; + newWizard.setContentProvider(contentProvider); + } + + return wizard; + } + + public ImageDescriptor getDescriptionImage() + { + return delegate.getDescriptionImage(); + } + + public String getHelpHref() + { + return delegate.getHelpHref(); + } + + public IWizardCategory getCategory() + { + return delegate.getCategory(); + } + + public boolean canFinishEarly() + { + return delegate.canFinishEarly(); + } + + public boolean hasPages() + { + return delegate.hasPages(); + } + } + + /** + * @author Eike Stepper + */ private abstract class AbstractNewAction extends TransactionalBackgroundAction { private CDOCheckout checkout; diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/ShowInActionProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/ShowInActionProvider.java index 712f50f665..03bbba19e5 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/ShowInActionProvider.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/ShowInActionProvider.java @@ -138,11 +138,12 @@ public class ShowInActionProvider extends AbstractActionProvider<Object> CDOCheckout checkout = (CDOCheckout)selectedElement; if (checkout.isOpen()) { - if (viewer != null) - { - menu.add(new ShowInDashboardAction(viewer, page)); - filled = true; - } + // TODO + // if (viewer != null) + // { + // menu.add(new ShowInDashboardAction(viewer, page)); + // filled = true; + // } if (checkout.isOffline()) { @@ -340,6 +341,7 @@ public class ShowInActionProvider extends AbstractActionProvider<Object> /** * @author Eike Stepper */ + @SuppressWarnings("unused") private static final class ShowInDashboardAction extends Action { private final StructuredViewer viewer; diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/AbstractNewWizard.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/AbstractNewWizard.java index aab9a5a268..58f2cc7282 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/AbstractNewWizard.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/AbstractNewWizard.java @@ -22,6 +22,8 @@ import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutContentProvider; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.view.CDOView; +import org.eclipse.net4j.util.ui.UIUtil; + import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -110,21 +112,21 @@ public abstract class AbstractNewWizard extends Wizard implements INewWizard CDOTransaction transaction = checkout.openTransaction(); - CDOResourceNode txParent = transaction.getObject(parentResourceNode); - if (txParent instanceof CDOResourceFolder) - { - ((CDOResourceFolder)txParent).getNodes().add(newResourceNode); - } - else - { - transaction.getRootResource().getContents().add(newResourceNode); - } - CDOCommitInfo commitInfo = null; CDOID newID = null; try { + CDOResourceNode txParent = transaction.getObject(parentResourceNode); + if (txParent instanceof CDOResourceFolder) + { + ((CDOResourceFolder)txParent).getNodes().add(newResourceNode); + } + else + { + transaction.getRootResource().getContents().add(newResourceNode); + } + commitInfo = transaction.commit(); newID = newResourceNode.cdoID(); } @@ -132,9 +134,21 @@ public abstract class AbstractNewWizard extends Wizard implements INewWizard { OM.LOG.error(ex); - IStatus status = new Status(IStatus.ERROR, OM.BUNDLE_ID, ex.getMessage(), ex); - ErrorDialog.openError(getShell(), "Error", - "An error occured while creating the " + title.toLowerCase() + ".", status); + final IStatus status = new Status(IStatus.ERROR, OM.BUNDLE_ID, ex.getMessage(), ex); + UIUtil.getDisplay().asyncExec(new Runnable() + { + public void run() + { + ErrorDialog.openError(getShell(), "Error", "An error occured while creating the " + title.toLowerCase() + + ".", status); + } + }); + + return Status.OK_STATUS; + } + finally + { + transaction.close(); } if (commitInfo != null && contentProvider != null) diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java index a1d710c790..5658d26d4f 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/AbstractHorizontalClassMapping.java @@ -445,6 +445,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping, I { CDOID folderID = (CDOID)revision.data().getContainerID(); String name = (String)revision.data().get(EresourcePackage.eINSTANCE.getCDOResourceNode_Name(), 0); + CDOID existingID = accessor.readResourceID(folderID, name, revision.getBranch().getHead()); if (existingID != null && !existingID.equals(revision.getID())) { @@ -498,7 +499,7 @@ public abstract class AbstractHorizontalClassMapping implements IClassMapping, I try { async = monitor.forkAsync(); - if (revision.isResourceFolder() || revision.isResource()) + if (revision.isResourceNode()) { checkDuplicateResources(accessor, revision); } diff --git a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java index a0f2454eaa..417a25d507 100644 --- a/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java +++ b/plugins/org.eclipse.emf.cdo.server.db/src/org/eclipse/emf/cdo/server/internal/db/mapping/horizontal/HorizontalBranchingClassMapping.java @@ -352,7 +352,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp IIDHandler idHandler = getMappingStrategy().getStore().getIDHandler(); IDBPreparedStatement stmt = null; boolean success = false; - + try { if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) @@ -381,7 +381,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp { DBUtil.close(stmt); } - + // Read multival tables only if revision exists if (success && revision.getVersion() >= CDOBranchVersion.FIRST_VERSION) { @@ -397,7 +397,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp IDBPreparedStatement stmt = accessor.getDBConnection().prepareStatement(sqlSelectAttributesByVersion, ReuseProbability.HIGH); boolean success = false; - + try { idHandler.setCDOID(stmt, 1, revision.getID()); @@ -415,7 +415,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp { DBUtil.close(stmt); } - + // Read multival tables only if revision exists if (success) { @@ -742,7 +742,7 @@ public class HorizontalBranchingClassMapping extends AbstractHorizontalClassMapp try { async = monitor.forkAsync(); - if (revision.isResourceFolder() || revision.isResource()) + if (revision.isResourceNode()) { checkDuplicateResources(accessor, revision); } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java index 8117d5b968..06aabd86ba 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/mem/MEMStore.java @@ -1226,7 +1226,7 @@ public class MEMStore extends LongIDStore implements IMEMStore, BranchLoader3, D private void addRevision(List<InternalCDORevision> list, InternalCDORevision revision, boolean raw) { - boolean resource = !(revision instanceof SyntheticCDORevision) && revision.isResource(); + boolean resource = !(revision instanceof SyntheticCDORevision) && revision.isResourceNode(); if (resource && resourceNameFeature == null) { resourceNameFeature = revision.getEClass().getEStructuralFeature(CDOModelConstants.RESOURCE_NODE_NAME_ATTRIBUTE); diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java index 906a03690d..bdf2e83812 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/LockingManagerTest.java @@ -299,11 +299,26 @@ public class LockingManagerTest extends AbstractLockingTest readLock(company); CDOTransaction transaction2 = session.openTransaction(); - Company company2 = (Company)transaction2.getResource(getResourcePath("/res1")).getContents().get(0); + final Company company2 = (Company)transaction2.getResource(getResourcePath("/res1")).getContents().get(0); - CDOObject cdoCompany2 = CDOUtil.getCDOObject(company2); - assertEquals(false, cdoCompany2.cdoWriteLock().isLockedByOthers()); - assertEquals(true, cdoCompany2.cdoReadLock().isLockedByOthers()); + new PollingTimeOuter() + { + @Override + protected boolean successful() + { + try + { + CDOObject cdoCompany2 = CDOUtil.getCDOObject(company2); + assertEquals(false, cdoCompany2.cdoWriteLock().isLockedByOthers()); + assertEquals(true, cdoCompany2.cdoReadLock().isLockedByOthers()); + return true; + } + catch (Exception ex) + { + return false; + } + } + }.assertNoTimeOut(); } public void testDetachedObjects() throws Exception @@ -317,7 +332,7 @@ public class LockingManagerTest extends AbstractLockingTest transaction.commit(); CDOTransaction transaction2 = session.openTransaction(); - Company company2 = (Company)transaction2.getResource(getResourcePath("/res1")).getContents().get(0); + final Company company2 = (Company)transaction2.getResource(getResourcePath("/res1")).getContents().get(0); res.getContents().remove(0); transaction.commit(); @@ -332,7 +347,23 @@ public class LockingManagerTest extends AbstractLockingTest } assertReadLock(false, company2); - assertEquals(false, CDOUtil.getCDOObject(company2).cdoReadLock().isLockedByOthers()); + + new PollingTimeOuter() + { + @Override + protected boolean successful() + { + try + { + assertEquals(false, CDOUtil.getCDOObject(company2).cdoReadLock().isLockedByOthers()); + return true; + } + catch (Exception ex) + { + return false; + } + } + }.assertNoTimeOut(); } public void testWriteLockByOthers() throws Exception @@ -348,11 +379,26 @@ public class LockingManagerTest extends AbstractLockingTest writeLock(company); CDOTransaction transaction2 = session.openTransaction(); - Company company2 = (Company)transaction2.getResource(getResourcePath("/res1")).getContents().get(0); + final Company company2 = (Company)transaction2.getResource(getResourcePath("/res1")).getContents().get(0); - CDOObject cdoCompany2 = CDOUtil.getCDOObject(company2); - assertEquals(true, cdoCompany2.cdoWriteLock().isLockedByOthers()); - assertEquals(false, cdoCompany2.cdoReadLock().isLockedByOthers()); + new PollingTimeOuter() + { + @Override + protected boolean successful() + { + try + { + CDOObject cdoCompany2 = CDOUtil.getCDOObject(company2); + assertEquals(true, cdoCompany2.cdoWriteLock().isLockedByOthers()); + assertEquals(false, cdoCompany2.cdoReadLock().isLockedByOthers()); + return true; + } + catch (Exception ex) + { + return false; + } + } + }.assertNoTimeOut(); } public void testWriteLock() throws Exception @@ -1085,9 +1131,9 @@ public class LockingManagerTest extends AbstractLockingTest controlView.options().setLockNotificationEnabled(true); CDOResource r = controlView.getResource(getResourcePath("/res1")); - CDOObject category1cv = CDOUtil.getCDOObject(r.getContents().get(0)); - CDOObject category2cv = CDOUtil.getCDOObject(r.getContents().get(1)); - CDOObject category3cv = CDOUtil.getCDOObject(r.getContents().get(2)); + final CDOObject category1cv = CDOUtil.getCDOObject(r.getContents().get(0)); + final CDOObject category2cv = CDOUtil.getCDOObject(r.getContents().get(1)); + final CDOObject category3cv = CDOUtil.getCDOObject(r.getContents().get(2)); assertEquals(true, category1cv.cdoReadLock().isLockedByOthers()); assertEquals(true, category2cv.cdoWriteLock().isLockedByOthers()); @@ -1097,9 +1143,24 @@ public class LockingManagerTest extends AbstractLockingTest writeUnlock(category2); writeUnoption(category3); - assertEquals(false, category1cv.cdoReadLock().isLockedByOthers()); - assertEquals(false, category2cv.cdoReadLock().isLockedByOthers()); - assertEquals(false, category3cv.cdoReadLock().isLockedByOthers()); + new PollingTimeOuter() + { + @Override + protected boolean successful() + { + try + { + assertEquals(false, category1cv.cdoReadLock().isLockedByOthers()); + assertEquals(false, category2cv.cdoReadLock().isLockedByOthers()); + assertEquals(false, category3cv.cdoReadLock().isLockedByOthers()); + return true; + } + catch (Exception ex) + { + return false; + } + } + }.assertNoTimeOut(); session1.close(); session2.close(); diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/TransactionalBackgroundAction.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/TransactionalBackgroundAction.java index d8fbe28991..6424c9dd66 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/TransactionalBackgroundAction.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/TransactionalBackgroundAction.java @@ -57,13 +57,14 @@ public abstract class TransactionalBackgroundAction extends LongRunningAction progressMonitor.beginTask(Messages.getString("TransactionalBackgroundAction_1"), 100); //$NON-NLS-1$ CDOTransaction transaction = openTransaction(object); - CDOObject transactionalObject = transaction.getObject(object); - progressMonitor.worked(5); - + CDOObject transactionalObject = null; CDOCommitInfo commitInfo = null; try { + transactionalObject = transaction.getObject(object); + progressMonitor.worked(5); + doRun(transaction, transactionalObject, new SubProgressMonitor(progressMonitor, 5)); commitInfo = transaction.commit(new SubProgressMonitor(progressMonitor, 90)); } 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 8251ac740f..4804bf4b0c 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 @@ -507,13 +507,14 @@ public final class CDOStateMachine extends FiniteStateMachine<CDOState, CDOEvent object.cdoInternalPostAttach(); // Compute a revision delta and register it with the tx - CDORevisionDelta revisionDelta = revision.compare(cleanRevision); + InternalCDORevisionDelta revisionDelta = revision.compare(cleanRevision); if (revisionDelta.isEmpty()) { changeState(object, CDOState.CLEAN); } else { + revisionDelta.setTarget(null); transaction.registerRevisionDelta(revisionDelta); transaction.registerDirty(object, (CDOFeatureDelta)null); changeState(object, CDOState.DIRTY); |