Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-07-27 10:42:56 +0000
committerEike Stepper2015-07-27 10:42:56 +0000
commit84522d2039d55db41923ee4d5040d5b435e2e6d0 (patch)
tree6c19ba98482986eaffd2a182bc1b87d6aeb2bc4f /plugins
parentcd97c1bd00b002e29abc182e744b2f1ddf708bd1 (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml24
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java251
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/ResourceGroup.java181
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/AbstractBranchPointActionProvider.java7
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java6
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/properties/ExplorerUIAdapterFactory.java12
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/plugin.xml8
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutObjectProperties.java78
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/CDOElementTester.java51
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/object/ObjectProperties.java100
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();
- }
}
}

Back to the top