diff options
author | Eike Stepper | 2015-07-27 10:42:56 +0000 |
---|---|---|
committer | Eike Stepper | 2015-07-27 10:42:56 +0000 |
commit | 84522d2039d55db41923ee4d5040d5b435e2e6d0 (patch) | |
tree | 6c19ba98482986eaffd2a182bc1b87d6aeb2bc4f /plugins | |
parent | cd97c1bd00b002e29abc182e744b2f1ddf708bd1 (diff) | |
download | cdo-84522d2039d55db41923ee4d5040d5b435e2e6d0.tar.gz cdo-84522d2039d55db41923ee4d5040d5b435e2e6d0.tar.xz cdo-84522d2039d55db41923ee4d5040d5b435e2e6d0.zip |
[458349] Consolidate UI - Hide edit commands on read-only checkouts / checkout state synchronization
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
Diffstat (limited to 'plugins')
11 files changed, 477 insertions, 246 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml b/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml index e2270a07c4..90c29bfade 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml @@ -513,9 +513,17 @@ <activeWhen> <iterate ifEmpty="false"> <or> - <adapt type="org.eclipse.emf.cdo.CDOElement"/> + <adapt type="org.eclipse.emf.cdo.CDOElement"> + <and> + <test property="org.eclipse.emf.cdo.explorer.object.inCheckout" value="true"/> + <test property="org.eclipse.emf.cdo.explorer.object.readOnlyCheckout" value="false"/> + </and> + </adapt> <adapt type="org.eclipse.emf.ecore.EObject"> - <test property="org.eclipse.emf.cdo.explorer.object.inCheckout" value="true"/> + <and> + <test property="org.eclipse.emf.cdo.explorer.object.inCheckout" value="true"/> + <test property="org.eclipse.emf.cdo.explorer.object.readOnlyCheckout" value="false"/> + </and> </adapt> </or> </iterate> @@ -655,9 +663,17 @@ <with variable="activeMenuSelection"> <iterate ifEmpty="false"> <or> - <adapt type="org.eclipse.emf.cdo.CDOElement"/> + <adapt type="org.eclipse.emf.cdo.CDOElement"> + <and> + <test property="org.eclipse.emf.cdo.explorer.object.inCheckout" value="true"/> + <test property="org.eclipse.emf.cdo.explorer.object.readOnlyCheckout" value="false"/> + </and> + </adapt> <adapt type="org.eclipse.emf.ecore.EObject"> - <test property="org.eclipse.emf.cdo.explorer.object.inCheckout" value="true"/> + <and> + <test property="org.eclipse.emf.cdo.explorer.object.inCheckout" value="true"/> + <test property="org.eclipse.emf.cdo.explorer.object.readOnlyCheckout" value="false"/> + </and> </adapt> </or> </iterate> diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java index f8ee800fc8..b3344f5733 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java @@ -30,7 +30,6 @@ import org.eclipse.net4j.util.event.IListener; import org.eclipse.net4j.util.ui.views.ContainerItemProvider; import org.eclipse.emf.common.notify.Adapter; -import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.ecore.EClass; @@ -53,6 +52,7 @@ import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorRegistry; @@ -121,11 +121,11 @@ public final class CDOCheckoutState ViewerRefresh viewerRefresh = stateManager.getViewerRefresh(); CDOCheckoutContentProvider main = stateManager.getMainContentProvider(); - contentProvider = new ContentProvider(adapterFactory, viewerRefresh); + contentProvider = new ContentProvider(this, viewerRefresh); contentProvider.inputChanged(main.getViewer(), null, main.getInput()); ResourceManager resourceManager = stateManager.getResourceManager(); - labelProvider = new LabelProvider(adapterFactory, resourceManager); + labelProvider = new LabelProvider(this, resourceManager); labelProvider.addListener(eventBroker); initTreeExpansionAgent(); @@ -258,13 +258,52 @@ public final class CDOCheckoutState */ public static final class ContentProvider extends AdapterFactoryContentProvider { - public ContentProvider(AdapterFactory adapterFactory, ViewerRefresh viewerRefresh) + private final CDOCheckoutState checkoutState; + + public ContentProvider(CDOCheckoutState checkoutState, ViewerRefresh viewerRefresh) { - super(adapterFactory); + super(checkoutState.getAdapterFactory()); + this.checkoutState = checkoutState; this.viewerRefresh = viewerRefresh; } @Override + public Object[] getElements(Object object) + { + synchronized (checkoutState) + { + return super.getElements(object); + } + } + + @Override + public Object[] getChildren(Object object) + { + synchronized (checkoutState) + { + return super.getChildren(object); + } + } + + @Override + public boolean hasChildren(Object object) + { + synchronized (checkoutState) + { + return super.hasChildren(object); + } + } + + @Override + public Object getParent(Object object) + { + synchronized (checkoutState) + { + return super.getParent(object); + } + } + + @Override public void notifyChanged(Notification notification) { Object notifier = notification.getNotifier(); @@ -301,154 +340,184 @@ public final class CDOCheckoutState public static final class LabelProvider extends AdapterFactoryLabelProvider implements IColorProvider, IStyledLabelProvider { + private final CDOCheckoutState checkoutState; + private final ResourceManager resourceManager; - public LabelProvider(AdapterFactory adapterFactory, ResourceManager resourceManager) + public LabelProvider(CDOCheckoutState checkoutState, ResourceManager resourceManager) { - super(adapterFactory); + super(checkoutState.getAdapterFactory()); + this.checkoutState = checkoutState; this.resourceManager = resourceManager; } @Override public Color getForeground(Object object) { - if (object instanceof ViewerUtil.Pending) + synchronized (checkoutState) { - return ContainerItemProvider.PENDING_COLOR; + if (object instanceof ViewerUtil.Pending) + { + return ContainerItemProvider.PENDING_COLOR; + } + + return super.getForeground(object); } + } - return super.getForeground(object); + @Override + public Color getBackground(Object object) + { + synchronized (checkoutState) + { + return super.getBackground(object); + } } @Override - public String getText(Object element) + public Font getFont(Object object) { - try + synchronized (checkoutState) { - if (element instanceof CDOCheckout) - { - CDOCheckout checkout = (CDOCheckout)element; - String text = checkout.getLabel(); - if (!StringUtil.isEmpty(text)) - { - return text; - } - } + return super.getFont(object); + } + } - if (element instanceof CDOElement) + @Override + public String getText(Object element) + { + synchronized (checkoutState) + { + try { - CDOElement checkoutElement = (CDOElement)element; - String text = checkoutElement.toString(); - if (!StringUtil.isEmpty(text)) + if (element instanceof CDOCheckout) { - return text; + CDOCheckout checkout = (CDOCheckout)element; + String text = checkout.getLabel(); + if (!StringUtil.isEmpty(text)) + { + return text; + } } - } - if (element instanceof EObject) - { - CDOElement checkoutElement = (CDOElement)EcoreUtil.getExistingAdapter((Notifier)element, CDOElement.class); - if (checkoutElement != null) + if (element instanceof CDOElement) { - String text = checkoutElement.toString(element); + CDOElement checkoutElement = (CDOElement)element; + String text = checkoutElement.toString(); if (!StringUtil.isEmpty(text)) { return text; } } - if (element instanceof CDOResourceNode) + if (element instanceof EObject) { - CDOResourceNode resourceNode = (CDOResourceNode)element; + CDOElement checkoutElement = (CDOElement)EcoreUtil.getExistingAdapter((Notifier)element, CDOElement.class); + if (checkoutElement != null) + { + String text = checkoutElement.toString(element); + if (!StringUtil.isEmpty(text)) + { + return text; + } + } - String name = resourceNode.getName(); - if (name == null) + if (element instanceof CDOResourceNode) { - // This must be the root resource. - return ""; + CDOResourceNode resourceNode = (CDOResourceNode)element; + + String name = resourceNode.getName(); + if (name == null) + { + // This must be the root resource. + return ""; + } + + return name; } + } - return name; + if (element instanceof ViewerUtil.Pending) + { + ViewerUtil.Pending pending = (ViewerUtil.Pending)element; + return pending.getText(); } - } - if (element instanceof ViewerUtil.Pending) - { - ViewerUtil.Pending pending = (ViewerUtil.Pending)element; - return pending.getText(); + String text = super.getText(element); + if (!StringUtil.isEmpty(text)) + { + return text; + } } - - String text = super.getText(element); - if (!StringUtil.isEmpty(text)) + catch (Exception ex) { - return text; + //$FALL-THROUGH$ } - } - catch (Exception ex) - { - //$FALL-THROUGH$ - } - try - { - if (element instanceof EObject) + try { - EObject eObject = (EObject)element; - EClass eClass = eObject.eClass(); - String text = getText(eClass); - if (!StringUtil.isEmpty(text)) + if (element instanceof EObject) { - return text; + EObject eObject = (EObject)element; + EClass eClass = eObject.eClass(); + String text = getText(eClass); + if (!StringUtil.isEmpty(text)) + { + return text; + } } } - } - catch (Exception ignore) - { - //$FALL-THROUGH$ - } + catch (Exception ignore) + { + //$FALL-THROUGH$ + } - return element.getClass().getSimpleName(); + return element.getClass().getSimpleName(); + } } @Override public Image getImage(Object element) { - try + synchronized (checkoutState) { - if (element instanceof CDOCheckout) + try { - CDOCheckout checkout = (CDOCheckout)element; - if (checkout.isOpen()) + if (element instanceof CDOCheckout) { - return CDOLabelDecorator.decorate(CHECKOUT_IMAGE, checkout.getRootObject()); + CDOCheckout checkout = (CDOCheckout)element; + if (checkout.isOpen()) + { + return CDOLabelDecorator.decorate(CHECKOUT_IMAGE, checkout.getRootObject()); + } + + return CHECKOUT_CLOSED_IMAGE; } - return CHECKOUT_CLOSED_IMAGE; - } + if (element instanceof ViewerUtil.Pending) + { + return ContainerItemProvider.PENDING_IMAGE; + } - if (element instanceof ViewerUtil.Pending) - { - return ContainerItemProvider.PENDING_IMAGE; - } + if (element instanceof CDOElement) + { + element = ((CDOElement)element).getDelegate(); + Image image = doGetImage(element); + return CDOLabelDecorator.decorate(image, element); + } - if (element instanceof CDOElement) - { - element = ((CDOElement)element).getDelegate(); Image image = doGetImage(element); - return CDOLabelDecorator.decorate(image, element); - } + if (image == null) + { + return ERROR_IMAGE; + } - Image image = doGetImage(element); - if (image == null) + return image; + } + catch (Exception ex) { return ERROR_IMAGE; } - - return image; - } - catch (Exception ex) - { - return ERROR_IMAGE; } } diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/ResourceGroup.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/ResourceGroup.java index 028ed22759..bde71d9f91 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/ResourceGroup.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/ResourceGroup.java @@ -32,7 +32,7 @@ import org.eclipse.core.runtime.jobs.Job; /** * @author Eike Stepper */ -public class ResourceGroup extends CDOElement implements CDORenameContext +public class ResourceGroup extends CDOElement { private String name; @@ -48,104 +48,123 @@ public class ResourceGroup extends CDOElement implements CDORenameContext return (CDOResourceNode)super.getDelegate(); } - public String getType() - { - return "Resource Group"; - } - - public String getName() + @Override + public void reset() { - return name; + super.reset(); + name = getDelegate().trimExtension(); } - public void setName(final String name) + @Override + public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) { - final String type = getType(); - new Job("Rename " + type.toLowerCase()) + if (adapter == CDORenameContext.class) { - @Override - protected IStatus run(IProgressMonitor monitor) + CDOResourceNode delegate = getDelegate(); + CDOCheckout checkout = CDOExplorerUtil.getCheckout(delegate); + if (checkout != null && checkout.isOpen() && !checkout.isReadOnly()) { - CDOResourceNode resourceNode = getDelegate(); - CDOCheckout checkout = CDOExplorerUtil.getCheckout(resourceNode); - CDOTransaction transaction = checkout.openTransaction(); - - CDOCommitInfo commitInfo = null; - - try + return new CDORenameContext() { - for (Object child : getChildren()) - { - if (child instanceof CDOResourceNode) - { - CDOResourceNode childNode = (CDOResourceNode)child; - CDOResourceNode transactionalChildNode = transaction.getObject(childNode); - String extension = transactionalChildNode.getExtension(); - transactionalChildNode.setName(name + "." + extension); - } + public String getType() + { + return "Resource Group"; } - commitInfo = transaction.commit(); - } - catch (Exception ex) - { - OM.LOG.error(ex); - } - finally - { - transaction.close(); - } - - if (commitInfo != null) - { - checkout.getView().waitForUpdate(commitInfo.getTimeStamp()); - - CDOCheckoutManagerImpl checkoutManager = (CDOCheckoutManagerImpl)CDOExplorerUtil.getCheckoutManager(); - checkoutManager.fireElementChangedEvent(ElementsChangedEvent.StructuralImpact.PARENT, ResourceGroup.this); - } + public String getName() + { + return name; + } - return Status.OK_STATUS; - } - }.schedule(); - } + public void setName(final String name) + { + final String type = getType(); + new Job("Rename " + type.toLowerCase()) + { + @Override + protected IStatus run(IProgressMonitor monitor) + { + CDOResourceNode resourceNode = getDelegate(); + CDOCheckout checkout = CDOExplorerUtil.getCheckout(resourceNode); + CDOTransaction transaction = checkout.openTransaction(); + + CDOCommitInfo commitInfo = null; + + try + { + for (Object child : getChildren()) + { + if (child instanceof CDOResourceNode) + { + CDOResourceNode childNode = (CDOResourceNode)child; + CDOResourceNode transactionalChildNode = transaction.getObject(childNode); + String extension = transactionalChildNode.getExtension(); + + transactionalChildNode.setName(name + "." + extension); + } + } + + commitInfo = transaction.commit(); + } + catch (Exception ex) + { + OM.LOG.error(ex); + } + finally + { + transaction.close(); + } + + if (commitInfo != null) + { + checkout.getView().waitForUpdate(commitInfo.getTimeStamp()); + + CDOCheckoutManagerImpl checkoutManager = (CDOCheckoutManagerImpl)CDOExplorerUtil.getCheckoutManager(); + checkoutManager.fireElementChangedEvent(ElementsChangedEvent.StructuralImpact.PARENT, + ResourceGroup.this); + } + + return Status.OK_STATUS; + } + }.schedule(); + } - public String validateName(String name) - { - String type = getType(); - if (StringUtil.isEmpty(name)) - { - return type + " name is empty."; - } + public String validateName(String name) + { + String type = getType(); + if (StringUtil.isEmpty(name)) + { + return type + " name is empty."; + } - if (name.equals(getName())) - { - return null; - } + if (name.equals(getName())) + { + return null; + } - for (Object child : getChildren()) - { - if (child instanceof CDOResourceNode) - { - CDOResourceNode childNode = (CDOResourceNode)child; - String extension = childNode.getExtension(); + for (Object child : getChildren()) + { + if (child instanceof CDOResourceNode) + { + CDOResourceNode childNode = (CDOResourceNode)child; + String extension = childNode.getExtension(); + + String error = ExplorerUIAdapterFactory.checkUniqueName(childNode, name + "." + extension, type); + if (error != null) + { + return error; + } + } + } - String error = ExplorerUIAdapterFactory.checkUniqueName(childNode, name + "." + extension, type); - if (error != null) - { - return error; - } + return null; + } + }; } } - return null; - } - - @Override - public void reset() - { - super.reset(); - name = getDelegate().trimExtension(); + return super.getAdapter(adapter); } @Override diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/AbstractBranchPointActionProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/AbstractBranchPointActionProvider.java index bc6dd22647..762cd945d3 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/AbstractBranchPointActionProvider.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/AbstractBranchPointActionProvider.java @@ -50,10 +50,15 @@ public abstract class AbstractBranchPointActionProvider extends AbstractActionPr super(CDOCheckout.class, id, title, ICommonMenuConstants.GROUP_ADDITIONS); } + protected boolean createSubMenu(CDOCheckout checkout) + { + return checkout.isOpen(); + } + @Override protected final boolean fillSubMenu(ICommonViewerWorkbenchSite viewSite, IMenuManager subMenu, CDOCheckout checkout) { - if (checkout.isOpen()) + if (createSubMenu(checkout)) { IWorkbenchPage page = viewSite.getPage(); subMenu.add(new Separator("top")); diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java index 7f877147b0..9dd4b8cf4c 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java @@ -29,6 +29,12 @@ public class MergeFromActionProvider extends AbstractBranchPointActionProvider } @Override + protected boolean createSubMenu(CDOCheckout checkout) + { + return super.createSubMenu(checkout) && !checkout.isReadOnly(); + } + + @Override protected String getHistorizedBranchPointToolTip(boolean allowTimeStamp) { return allowTimeStamp ? "Merge from this branch point" : "Merge from this branch"; 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 084093776a..8e4f7cb49e 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 @@ -168,18 +168,19 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio @Override public void fillContextMenu(IMenuManager menu) { - IMenuManager submenu = new MenuManager("&New", NEW_MENU_NAME); if (viewer == null) { return; } CDOCheckout checkout = CDOExplorerUtil.getCheckout(selectedObject); - if (checkout == null) + if (checkout == null || checkout.isReadOnly()) { return; } + IMenuManager submenu = new MenuManager("&New", NEW_MENU_NAME); + // Fill the menu from the commonWizard contributions. newWizardActionGroup.setContext(getContext()); newWizardActionGroup.fillContextMenu(submenu); diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java index 1f8cf53f1f..dbba91d79a 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java @@ -67,15 +67,21 @@ public class ExplorerUIAdapterFactory implements IAdapterFactory AbstractElement element = (AbstractElement)adaptableObject; return (T)createRenameContext(element); } - else if (adaptableObject instanceof CDOBranch) + + if (adaptableObject instanceof CDOBranch) { CDOBranch branch = (CDOBranch)adaptableObject; return (T)createRenameContext(branch); } - else if (adaptableObject instanceof CDOResourceNode) + + if (adaptableObject instanceof CDOResourceNode) { CDOResourceNode resourceNode = (CDOResourceNode)adaptableObject; - return (T)createRenameContext(resourceNode); + CDOCheckout checkout = CDOExplorerUtil.getCheckout(resourceNode); + if (checkout != null && !checkout.isReadOnly()) + { + return (T)createRenameContext(resourceNode); + } } } else if (adapterType == CLASS_STATE_PROVIDER) diff --git a/plugins/org.eclipse.emf.cdo.explorer/plugin.xml b/plugins/org.eclipse.emf.cdo.explorer/plugin.xml index 5177eb8a6a..a1b4b19133 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/plugin.xml +++ b/plugins/org.eclipse.emf.cdo.explorer/plugin.xml @@ -44,8 +44,14 @@ id="org.eclipse.emf.cdo.explorer.object.properties" type="org.eclipse.emf.ecore.EObject" namespace="org.eclipse.emf.cdo.explorer.object" - properties="inCheckout" + properties="inCheckout,stateCheckout,openCheckout,typeCheckout,readOnlyCheckout" class="org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutObjectProperties$Tester"/> + <propertyTester + id="org.eclipse.emf.cdo.explorer.element.properties" + type="org.eclipse.emf.cdo.CDOElement" + namespace="org.eclipse.emf.cdo.explorer.object" + properties="inCheckout,stateCheckout,openCheckout,typeCheckout,readOnlyCheckout" + class="org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutObjectProperties$ElementTester"/> </extension> <extension point="org.eclipse.emf.cdo.viewProviders"> diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutObjectProperties.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutObjectProperties.java index 3b0a81b3aa..42ef112512 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutObjectProperties.java +++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutObjectProperties.java @@ -11,6 +11,9 @@ package org.eclipse.emf.cdo.internal.explorer.checkouts; import org.eclipse.emf.cdo.explorer.CDOExplorerUtil; +import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout; + +import org.eclipse.emf.internal.cdo.object.CDOElementTester; import org.eclipse.net4j.util.properties.DefaultPropertyTester; import org.eclipse.net4j.util.properties.IProperties; @@ -26,6 +29,8 @@ public class CDOCheckoutObjectProperties extends Properties<EObject> { public static final IProperties<EObject> INSTANCE = new CDOCheckoutObjectProperties(); + public static final String NAMESPACE = "org.eclipse.emf.cdo.explorer.object"; + private CDOCheckoutObjectProperties() { super(EObject.class); @@ -38,6 +43,66 @@ public class CDOCheckoutObjectProperties extends Properties<EObject> return CDOExplorerUtil.getCheckout(object) != null; } }); + + add(new Property<EObject>("stateCheckout") + { + @Override + protected Object eval(EObject object) + { + CDOCheckout checkout = CDOExplorerUtil.getCheckout(object); + if (checkout == null) + { + return null; + } + + return checkout.getState(); + } + }); + + add(new Property<EObject>("openCheckout") + { + @Override + protected Object eval(EObject object) + { + CDOCheckout checkout = CDOExplorerUtil.getCheckout(object); + if (checkout == null) + { + return null; + } + + return checkout.isOpen(); + } + }); + + add(new Property<EObject>("typeCheckout") + { + @Override + protected Object eval(EObject object) + { + CDOCheckout checkout = CDOExplorerUtil.getCheckout(object); + if (checkout == null) + { + return null; + } + + return checkout.getType(); + } + }); + + add(new Property<EObject>("readOnlyCheckout") + { + @Override + protected Object eval(EObject object) + { + CDOCheckout checkout = CDOExplorerUtil.getCheckout(object); + if (checkout == null) + { + return null; + } + + return checkout.isReadOnly(); + } + }); } public static void main(String[] args) @@ -50,11 +115,20 @@ public class CDOCheckoutObjectProperties extends Properties<EObject> */ public static final class Tester extends DefaultPropertyTester<EObject> { - public static final String NAMESPACE = "org.eclipse.emf.cdo.explorer.object"; - public Tester() { super(NAMESPACE, INSTANCE); } } + + /** + * @author Eike Stepper + */ + public static final class ElementTester extends CDOElementTester + { + public ElementTester() + { + super(NAMESPACE, INSTANCE); + } + } } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOElementTester.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOElementTester.java new file mode 100644 index 0000000000..e0c8f2c9f2 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOElementTester.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2004-2015 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.internal.cdo.object; + +import org.eclipse.emf.cdo.CDOElement; + +import org.eclipse.net4j.util.properties.DefaultPropertyTester; +import org.eclipse.net4j.util.properties.IProperties; + +import org.eclipse.emf.ecore.EObject; + +/** + * @author Eike Stepper + */ +public abstract class CDOElementTester extends DefaultPropertyTester<EObject> +{ + public CDOElementTester(String namespace, IProperties<EObject> properties) + { + super(namespace, properties); + } + + @Override + protected EObject convertReceiver(Object receiver) + { + if (receiver instanceof CDOElement) + { + CDOElement element = (CDOElement)receiver; + Object delegate = element.getDelegate(); + if (delegate instanceof EObject) + { + return (EObject)delegate; + } + } + + return super.convertReceiver(receiver); + } + + @Override + protected String getReceiverTypeName() + { + return CDOElement.class.getName(); + } +}
\ No newline at end of file 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 ac776bca33..9f726b234e 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 @@ -46,13 +46,13 @@ 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) @@ -131,7 +131,7 @@ public class ObjectProperties extends Properties<EObject> }); add(new Property<EObject>("transactional") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -149,10 +149,10 @@ public class ObjectProperties extends Properties<EObject> return !view.isReadOnly(); } - }); + }); add(new Property<EObject>("readable") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -164,10 +164,10 @@ public class ObjectProperties extends Properties<EObject> return cdoObject.cdoPermission() != CDOPermission.NONE; } - }); + }); add(new Property<EObject>("writable") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -185,10 +185,10 @@ public class ObjectProperties extends Properties<EObject> return !view.isReadOnly() && cdoObject.cdoPermission() == CDOPermission.WRITE; } - }); + }); add(new Property<EObject>("writableContainer") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -212,10 +212,10 @@ public class ObjectProperties extends Properties<EObject> return !view.isReadOnly() && cdoContainer.cdoPermission() == CDOPermission.WRITE; } - }); + }); add(new Property<EObject>("container") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -233,16 +233,16 @@ public class ObjectProperties extends Properties<EObject> return true; } - }); + }); add(new Property<EObject>("children") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { return !object.eContents().isEmpty(); } - }); + }); add(new Property<EObject>("permission", //$NON-NLS-1$ "Permission", "The permission the current user has for this object.", CATEGORY_CDO) @@ -261,7 +261,7 @@ public class ObjectProperties extends Properties<EObject> }); add(new Property<EObject>("permissionContainer") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -289,7 +289,7 @@ public class ObjectProperties extends Properties<EObject> return cdoObject.cdoPermission(); } - }); + }); add(new Property<EObject>("readLocks", //$NON-NLS-1$ "Read Locks", "The owner of read locks on this object.", CATEGORY_CDO) @@ -314,7 +314,7 @@ public class ObjectProperties extends Properties<EObject> }); add(new Property<EObject>("readLocked")//$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -323,7 +323,7 @@ public class ObjectProperties extends Properties<EObject> { return false; } - + CDOView view = cdoObject.cdoView(); if (view == null) { @@ -338,10 +338,10 @@ public class ObjectProperties extends Properties<EObject> return lock.isLocked(); } - }); + }); add(new Property<EObject>("readLockedByOthers")//$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -350,7 +350,7 @@ public class ObjectProperties extends Properties<EObject> { return false; } - + CDOView view = cdoObject.cdoView(); if (view == null) { @@ -365,7 +365,7 @@ public class ObjectProperties extends Properties<EObject> return lock.isLockedByOthers(); } - }); + }); add(new Property<EObject>("writeLock", //$NON-NLS-1$ "Write Lock", "The owner of a write lock on this object.", CATEGORY_CDO) @@ -390,7 +390,7 @@ public class ObjectProperties extends Properties<EObject> }); add(new Property<EObject>("writeLocked")//$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -399,7 +399,7 @@ public class ObjectProperties extends Properties<EObject> { return false; } - + CDOView view = cdoObject.cdoView(); if (view == null) { @@ -414,10 +414,10 @@ public class ObjectProperties extends Properties<EObject> return lock.isLocked(); } - }); + }); add(new Property<EObject>("writeLockedByOthers")//$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -426,7 +426,7 @@ public class ObjectProperties extends Properties<EObject> { return false; } - + CDOView view = cdoObject.cdoView(); if (view == null) { @@ -441,7 +441,7 @@ public class ObjectProperties extends Properties<EObject> return lock.isLockedByOthers(); } - }); + }); add(new Property<EObject>("writeOption", //$NON-NLS-1$ "Write Option", "The owner of a write option on this object.", CATEGORY_CDO) @@ -466,7 +466,7 @@ public class ObjectProperties extends Properties<EObject> }); add(new Property<EObject>("writeOptioned")//$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -475,7 +475,7 @@ public class ObjectProperties extends Properties<EObject> { return false; } - + CDOView view = cdoObject.cdoView(); if (view == null) { @@ -490,10 +490,10 @@ public class ObjectProperties extends Properties<EObject> return lock.isLocked(); } - }); + }); add(new Property<EObject>("writeOptionedByOthers")//$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -502,7 +502,7 @@ public class ObjectProperties extends Properties<EObject> { return false; } - + CDOView view = cdoObject.cdoView(); if (view == null) { @@ -517,10 +517,10 @@ public class ObjectProperties extends Properties<EObject> return lock.isLockedByOthers(); } - }); + }); add(new Property<EObject>("viewHistorical") //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -538,10 +538,10 @@ public class ObjectProperties extends Properties<EObject> return view.getTimeStamp() != CDOBranchPoint.UNSPECIFIED_DATE; } - }); + }); add(new Property<EObject>("uri", "URI", "The URI of this object.", CATEGORY_CDO) //$NON-NLS-1$ - { + { @Override protected Object eval(EObject object) { @@ -561,7 +561,7 @@ public class ObjectProperties extends Properties<EObject> String fragment = id != null ? id.toURIFragment() : resource.getURIFragment(cdoObject); return resource.getURI().appendFragment(fragment).toString(); } - }); + }); } private static CDOObject getCDOObject(EObject object) @@ -589,33 +589,11 @@ public class ObjectProperties extends Properties<EObject> /** * @author Eike Stepper */ - public static final class ElementTester extends DefaultPropertyTester<EObject> + public static final class ElementTester extends CDOElementTester { public ElementTester() { super(NAMESPACE, INSTANCE); } - - @Override - protected EObject convertReceiver(Object receiver) - { - if (receiver instanceof CDOElement) - { - CDOElement element = (CDOElement)receiver; - Object delegate = element.getDelegate(); - if (delegate instanceof EObject) - { - return (EObject)delegate; - } - } - - return super.convertReceiver(receiver); - } - - @Override - protected String getReceiverTypeName() - { - return CDOElement.class.getName(); - } } } |