Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-02-26 17:26:31 +0000
committerEike Stepper2015-02-26 17:26:31 +0000
commit4086386f0adefc75154c6b24ac21da81703d0ba2 (patch)
tree959d330b1721361fae3c156e421b081b7915f3c6
parent4437bef7a2489a7e2adc8a3ed94f56a61cfb0a6b (diff)
downloadcdo-4086386f0adefc75154c6b24ac21da81703d0ba2.tar.gz
cdo-4086386f0adefc75154c6b24ac21da81703d0ba2.tar.xz
cdo-4086386f0adefc75154c6b24ac21da81703d0ba2.zip
[458349] Consolidate UI
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/.settings/.api_filters11
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml2
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ObjectListController.java14
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java135
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutDropAdapterAssistant.java9
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelProvider.java251
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java360
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java141
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutViewerSorter.java13
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java113
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/AbstractNewWizard.java23
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/NewWizardPage.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerUtil.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java86
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/bundle/AbstractBundle.java56
-rw-r--r--plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OMBundle.java32
16 files changed, 972 insertions, 287 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
new file mode 100644
index 0000000000..fb5a265ed5
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.emf.cdo.explorer.ui" version="2">
+ <resource path="src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/NewActionProvider.java" type="org.eclipse.emf.cdo.explorer.ui.checkouts.actions.NewActionProvider">
+ <filter id="574664731">
+ <message_arguments>
+ <message_argument value="org.eclipse.emf.cdo.explorer.ui.checkouts.actions.NewActionProvider.init(ICommonActionExtensionSite)"/>
+ <message_argument value="IWizardRegistry"/>
+ </message_arguments>
+ </filter>
+ </resource>
+</component>
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml b/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml
index 5ac0788540..42b87ea0ca 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml
@@ -647,5 +647,5 @@
</command>
</menuContribution>
</extension>
-
+
</plugin>
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ObjectListController.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ObjectListController.java
index 3b77e9f0d5..fb175dcbb4 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ObjectListController.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/ObjectListController.java
@@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.explorer.ui;
import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
+import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutContentProvider;
import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutLabelProvider;
import org.eclipse.net4j.util.ui.views.ItemProvider;
@@ -44,7 +45,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
*/
public class ObjectListController
{
- private final LabelProvider labelProvider = new LabelProvider();
+ private final CDOCheckoutContentProvider contentProvider = new CDOCheckoutContentProvider();
+
+ private final LabelProvider labelProvider = new LabelProvider(contentProvider);
private final AtomicBoolean refreshing = new AtomicBoolean();
@@ -85,11 +88,15 @@ public class ObjectListController
public void configure(final TreeViewer treeViewer)
{
+ Control control = treeViewer.getControl();
+ contentProvider.disposeWith(control);
+
+ // The contentProvider field just makes the labelProvider happy.
treeViewer.setContentProvider(new ContentProvider());
treeViewer.setLabelProvider(new DecoratingStyledCellLabelProvider(labelProvider, new LabelDecorator(), null));
treeViewer.setInput(wrappers);
- treeViewer.getControl().getDisplay().asyncExec(new Runnable()
+ control.getDisplay().asyncExec(new Runnable()
{
public void run()
{
@@ -301,8 +308,9 @@ public class ObjectListController
*/
private static final class LabelProvider extends CDOCheckoutLabelProvider
{
- public LabelProvider()
+ public LabelProvider(CDOCheckoutContentProvider contentProvider)
{
+ super(contentProvider);
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java
index 5cbb846ecc..6a89b605d4 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutContentProvider.java
@@ -27,7 +27,6 @@ import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckoutManager.CheckoutOpenEve
import org.eclipse.emf.cdo.explorer.ui.ViewerUtil;
import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
import org.eclipse.emf.cdo.explorer.ui.checkouts.actions.OpenWithActionProvider;
-import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision;
import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionCache;
import org.eclipse.emf.cdo.util.CDOUtil;
@@ -39,16 +38,12 @@ import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.spi.cdo.FSMUtil;
import org.eclipse.emf.spi.cdo.InternalCDOObject;
import org.eclipse.emf.spi.cdo.InternalCDOView;
@@ -61,21 +56,29 @@ import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
import org.eclipse.ui.part.IPage;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.IPropertySourceProvider;
import org.eclipse.ui.views.properties.PropertySheet;
import org.eclipse.ui.views.properties.PropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
@@ -83,6 +86,7 @@ import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@@ -93,8 +97,10 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* @author Eike Stepper
*/
-public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider implements IOpenListener
+public class CDOCheckoutContentProvider implements ICommonContentProvider, IPropertySourceProvider, IOpenListener
{
+ private static final Map<String, CDOCheckoutContentProvider> INSTANCES = new HashMap<String, CDOCheckoutContentProvider>();
+
private static final Set<Object> LOADING_OBJECTS = new HashSet<Object>();
private static final Method GET_CHILDREN_FEATURES_METHOD = getMethod(ItemProviderAdapter.class,
@@ -104,8 +110,6 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
private static final CDOCheckoutManager CHECKOUT_MANAGER = CDOExplorerUtil.getCheckoutManager();
- private static CDOCheckoutContentProvider instance;
-
private final IListener checkoutManagerListener = new IListener()
{
public void notifyEvent(IEvent event)
@@ -229,11 +233,13 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
}
};
+ private final CDOCheckoutStateManager stateManager = new CDOCheckoutStateManager(this);
+
private final Map<CDOCheckout, CDOCheckout> openingCheckouts = new ConcurrentHashMap<CDOCheckout, CDOCheckout>();
private final Map<Object, Object[]> childrenCache = new ConcurrentHashMap<Object, Object[]>();
- private final ComposedAdapterFactory adapterFactory;
+ private String viewerID;
private TreeViewer viewer;
@@ -241,26 +247,57 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
public CDOCheckoutContentProvider()
{
- super(null);
-
- adapterFactory = CDOEditor.createAdapterFactory(true);
- setAdapterFactory(adapterFactory);
+ }
+ public void init(ICommonContentExtensionSite config)
+ {
+ viewerID = config.getService().getViewerId();
+ INSTANCES.put(viewerID, this);
CHECKOUT_MANAGER.addListener(checkoutManagerListener);
- instance = this;
}
- @Override
- public void dispose()
+ public void saveState(IMemento aMemento)
+ {
+ // Do nothing.
+ }
+
+ public void restoreState(IMemento aMemento)
{
- instance = null;
- super.dispose();
+ // Do nothing.
+ }
+ public void dispose()
+ {
CHECKOUT_MANAGER.removeListener(checkoutManagerListener);
- adapterFactory.dispose();
+ INSTANCES.remove(viewerID);
+ }
+
+ public void disposeWith(Control control)
+ {
+ control.addDisposeListener(new DisposeListener()
+ {
+ public void widgetDisposed(DisposeEvent e)
+ {
+ dispose();
+ }
+ });
+ }
+
+ public final CDOCheckoutStateManager getStateManager()
+ {
+ return stateManager;
+ }
+
+ public final TreeViewer getViewer()
+ {
+ return viewer;
+ }
+
+ public final Object getInput()
+ {
+ return input;
}
- @Override
public void inputChanged(Viewer newViewer, Object oldInput, Object newInput)
{
TreeViewer newTreeViewer = null;
@@ -285,11 +322,9 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
}
input = newInput;
-
- super.inputChanged(newTreeViewer, oldInput, newInput);
+ stateManager.inputChanged(newTreeViewer, oldInput, newInput);
}
- @Override
public boolean hasChildren(Object object)
{
if (object == input)
@@ -335,7 +370,7 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
InternalCDORevision revision = cdoObject.cdoRevision(false);
if (revision != null)
{
- ITreeItemContentProvider provider = (ITreeItemContentProvider)adapterFactory.adapt(object,
+ ITreeItemContentProvider provider = (ITreeItemContentProvider)stateManager.adapt(object,
ITreeItemContentProvider.class);
if (provider instanceof ItemProviderAdapter)
{
@@ -352,10 +387,10 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
}
}
- return super.hasChildren(object);
+ ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
+ return contentProvider.hasChildren(object);
}
- @Override
public Object[] getChildren(Object object)
{
if (object == input)
@@ -445,7 +480,9 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
loadedRevisions.addAll(revisions);
}
- Object[] children = CDOCheckoutContentProvider.super.getChildren(finalObject);
+ ITreeContentProvider contentProvider = stateManager.getContentProvider(finalObject);
+ Object[] children = contentProvider.getChildren(finalObject);
+
children = CDOCheckoutContentModifier.Registry.INSTANCE.modifyChildren(finalObject, children);
childrenCache.put(originalObject, children);
}
@@ -557,7 +594,7 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
InternalCDORevision revision = cdoObject.cdoRevision(false);
if (revision != null)
{
- ITreeItemContentProvider provider = (ITreeItemContentProvider)adapterFactory.adapt(object,
+ ITreeItemContentProvider provider = (ITreeItemContentProvider)stateManager.adapt(object,
ITreeItemContentProvider.class);
if (provider instanceof ItemProviderAdapter)
{
@@ -573,7 +610,8 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
if (missingIDs.isEmpty())
{
// All revisions are cached. Just return the objects without server round-trips.
- return super.getChildren(object);
+ ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
+ return contentProvider.getChildren(object);
}
}
}
@@ -583,13 +621,11 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
return null;
}
- @Override
public Object[] getElements(Object object)
{
return getChildren(object);
}
- @Override
public Object getParent(Object object)
{
if (object == input)
@@ -626,37 +662,19 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
}
}
- return super.getParent(object);
+ ITreeContentProvider contentProvider = stateManager.getContentProvider(object);
+ return contentProvider.getParent(object);
}
- @Override
- public void notifyChanged(Notification notification)
+ public IPropertySource getPropertySource(Object object)
{
- Object notifier = notification.getNotifier();
- if (notifier instanceof EObject)
+ IPropertySourceProvider contentProvider = stateManager.getContentProvider(object);
+ if (contentProvider != null)
{
- EObject eObject = (EObject)notifier;
-
- Object feature = notification.getFeature();
- if (feature instanceof EReference)
- {
- EReference reference = (EReference)feature;
- if (reference.isContainment())
- {
- Adapter adapter = EcoreUtil.getAdapter(eObject.eAdapters(), CDOCheckout.class);
- if (adapter instanceof CDOCheckout)
- {
- CDOCheckout checkout = (CDOCheckout)adapter;
- if (checkout.isOpen())
- {
- notification = new ViewerNotification(notification, checkout, true, true);
- }
- }
- }
- }
+ return contentProvider.getPropertySource(object);
}
- super.notifyChanged(notification);
+ return null;
}
public void selectObject(final Object object)
@@ -735,6 +753,7 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
{
EObject eObject = (EObject)element;
IWorkbenchPage page = getWorkbenchPage();
+ ComposedAdapterFactory adapterFactory = stateManager.getAdapterFactory(eObject);
OpenWithActionProvider.openEditor(page, adapterFactory, eObject, null);
}
}
@@ -860,8 +879,8 @@ public class CDOCheckoutContentProvider extends AdapterFactoryContentProvider im
}
}
- public static final CDOCheckoutContentProvider getInstance()
+ public static final CDOCheckoutContentProvider getInstance(String viewerID)
{
- return instance;
+ return INSTANCES.get(viewerID);
}
}
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 ac9b35e57f..6137777e85 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
@@ -25,7 +25,6 @@ import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil;
import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.view.CDOViewOpener;
import org.eclipse.net4j.util.AdapterUtil;
import org.eclipse.net4j.util.ObjectUtil;
@@ -126,14 +125,18 @@ public class CDOCheckoutDropAdapterAssistant extends CommonDropAdapterAssistant
else if (dropOperation == DND.DROP_COPY)
{
// Merge From (online + offline)
+ CDORepository repository = checkout.getRepository();
+ CDOBranchPoint left = checkout.getBranchPoint();
+ CDOBranchPoint right = branchPoint;
+ CDOCompareEditorUtil.openEditor(repository, repository, left, right, null, true);
}
else if (dropOperation == DND.DROP_LINK)
{
// Compare With (online + offline)
- CDOViewOpener viewOpener = checkout.getRepository();
+ CDORepository repository = checkout.getRepository();
CDOBranchPoint left = checkout.getBranchPoint();
CDOBranchPoint right = branchPoint;
- CDOCompareEditorUtil.openEditor(viewOpener, left, right, null, true);
+ CDOCompareEditorUtil.openEditor(repository, left, right, null, true);
}
return Status.OK_STATUS;
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelProvider.java
index 569f58ecaa..0c0866b966 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelProvider.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutLabelProvider.java
@@ -10,244 +10,170 @@
*/
package org.eclipse.emf.cdo.explorer.ui.checkouts;
-import org.eclipse.emf.cdo.CDOElement;
-import org.eclipse.emf.cdo.eresource.CDOResourceLeaf;
-import org.eclipse.emf.cdo.eresource.CDOResourceNode;
-import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.ui.ViewerUtil;
-import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
-import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor;
import org.eclipse.emf.cdo.transfer.CDOTransferElement;
-import org.eclipse.emf.cdo.ui.CDOEditorUtil;
-import org.eclipse.emf.cdo.ui.CDOLabelDecorator;
import org.eclipse.net4j.util.ui.views.ContainerItemProvider;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.resource.LocalResourceManager;
-import org.eclipse.jface.resource.ResourceManager;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorRegistry;
+import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPropertyListener;
-import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
/**
* @author Eike Stepper
*/
-public class CDOCheckoutLabelProvider extends AdapterFactoryLabelProvider implements IColorProvider,
+public class CDOCheckoutLabelProvider extends LabelProvider implements ICommonLabelProvider, IColorProvider,
IStyledLabelProvider
{
- private static final Image CHECKOUT_IMAGE = OM.getImage("icons/checkout.gif");
-
- private static final Image CHECKOUT_CLOSED_IMAGE = OM.getImage("icons/checkout_closed.gif");
-
- private static final Image FOLDER_IMAGE = OM.getImage("icons/CDOResourceFolder.gif");
-
- private static final Image ERROR_IMAGE = PlatformUI.getWorkbench().getSharedImages()
- .getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
-
private static final IEditorRegistry EDITOR_REGISTRY = PlatformUI.getWorkbench().getEditorRegistry();
- private final ComposedAdapterFactory adapterFactory;
+ private final EditorRegistryListener editorRegistryListener = new EditorRegistryListener();
- private IPropertyListener editorRegistryListener;
+ private ICommonContentExtensionSite config;
- private ResourceManager resourceManager;
+ private CDOCheckoutStateManager stateManager;
public CDOCheckoutLabelProvider()
{
- super(null);
+ }
- adapterFactory = CDOEditor.createAdapterFactory(true);
- setAdapterFactory(adapterFactory);
+ public CDOCheckoutLabelProvider(CDOCheckoutContentProvider contentProvider)
+ {
+ stateManager = contentProvider.getStateManager();
+ }
+
+ public void init(ICommonContentExtensionSite config)
+ {
+ this.config = config;
+ EDITOR_REGISTRY.addPropertyListener(editorRegistryListener);
}
@Override
public void dispose()
{
- if (editorRegistryListener != null)
- {
- EDITOR_REGISTRY.removePropertyListener(editorRegistryListener);
- resourceManager = null;
- }
+ EDITOR_REGISTRY.removePropertyListener(editorRegistryListener);
+ super.dispose();
+ }
- if (resourceManager != null)
- {
- resourceManager.dispose();
- resourceManager = null;
- }
+ public void saveState(IMemento aMemento)
+ {
+ // Do nothing.
+ }
- super.dispose();
+ public void restoreState(IMemento aMemento)
+ {
+ // Do nothing.
+ }
- // Must come after super.dispose().
- adapterFactory.dispose();
+ public void fireLabelProviderChanged()
+ {
+ fireLabelProviderChanged(new LabelProviderChangedEvent(this));
}
- @Override
public Color getForeground(Object object)
{
- if (object instanceof ViewerUtil.Pending)
+ IColorProvider provider = getStateManager().getLabelProvider(object);
+ if (provider != null)
{
- return ContainerItemProvider.PENDING_COLOR;
+ return provider.getForeground(object);
}
- return super.getForeground(object);
+ return null;
}
- @Override
- public String getText(Object element)
+ public Color getBackground(Object object)
{
- try
+ IColorProvider provider = getStateManager().getLabelProvider(object);
+ if (provider != null)
{
- if (element instanceof CDOCheckout)
- {
- CDOCheckout checkout = (CDOCheckout)element;
- return checkout.getLabel();
- }
-
- if (element instanceof CDOElement)
- {
- CDOElement checkoutElement = (CDOElement)element;
- return checkoutElement.toString();
- }
-
- if (element instanceof EObject)
- {
- CDOElement checkoutElement = (CDOElement)EcoreUtil.getExistingAdapter((Notifier)element, CDOElement.class);
- if (checkoutElement != null)
- {
- return checkoutElement.toString(element);
- }
-
- if (element instanceof CDOResourceNode)
- {
- CDOResourceNode resourceNode = (CDOResourceNode)element;
-
- String name = resourceNode.getName();
- if (name == null)
- {
- // This must be the root resource.
- return "";
- }
+ return provider.getBackground(object);
+ }
- return name;
- }
- }
+ return null;
+ }
- if (element instanceof ViewerUtil.Pending)
- {
- ViewerUtil.Pending pending = (ViewerUtil.Pending)element;
- return pending.getText();
- }
+ public String getDescription(Object object)
+ {
+ int xxx;
+ return null;
+ }
- return super.getText(element);
- }
- catch (Exception ex)
+ public StyledString getStyledText(Object object)
+ {
+ IStyledLabelProvider provider = getStateManager().getLabelProvider(object);
+ if (provider != null)
{
- return ex.getMessage();
+ return provider.getStyledText(object);
}
+
+ String text = getText(object);
+ return new StyledString(text);
}
@Override
- public Image getImage(Object element)
+ public String getText(Object object)
{
- try
+ if (object instanceof ViewerUtil.Pending)
{
- if (element instanceof CDOCheckout)
- {
- CDOCheckout checkout = (CDOCheckout)element;
- if (checkout.isOpen())
- {
- return CDOLabelDecorator.decorate(CHECKOUT_IMAGE, checkout.getRootObject());
- }
-
- return CHECKOUT_CLOSED_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);
- }
-
- return doGetImage(element);
+ ViewerUtil.Pending pending = (ViewerUtil.Pending)object;
+ return pending.getText();
}
- catch (Exception ex)
+
+ ILabelProvider provider = getStateManager().getLabelProvider(object);
+ if (provider != null)
{
- return ERROR_IMAGE;
+ return provider.getText(object);
}
+
+ return super.getText(object);
}
- private Image doGetImage(Object element)
+ @Override
+ public Image getImage(Object object)
{
- if (element instanceof CDOResourceLeaf)
+ if (object instanceof ViewerUtil.Pending)
{
- String name = ((CDOResourceLeaf)element).getName();
- if (name == null)
- {
- // This must be the root resource.
- return FOLDER_IMAGE;
- }
+ return ContainerItemProvider.PENDING_IMAGE;
+ }
- IEditorDescriptor editorDescriptor = EDITOR_REGISTRY.getDefaultEditor(name);
- if (editorDescriptor != null && !CDOEditorUtil.TEXT_EDITOR_ID.equals(editorDescriptor.getId()))
- {
- Image image = getWorkbenchImage(name);
- if (image != null)
- {
- return image;
- }
- }
+ ILabelProvider provider = getStateManager().getLabelProvider(object);
+ if (provider != null)
+ {
+ return provider.getImage(object);
}
- return super.getImage(element);
+ return super.getImage(object);
}
- protected Image getWorkbenchImage(String name)
+ public CDOCheckoutStateManager getStateManager()
{
- ImageDescriptor imageDescriptor = EDITOR_REGISTRY.getImageDescriptor(name);
- if (imageDescriptor != null)
+ if (stateManager == null)
{
- if (editorRegistryListener == null)
+ String viewerID = config.getService().getViewerId();
+ CDOCheckoutContentProvider contentProvider = CDOCheckoutContentProvider.getInstance(viewerID);
+ if (contentProvider != null)
{
- editorRegistryListener = new EditorRegistryListener();
- EDITOR_REGISTRY.addPropertyListener(editorRegistryListener);
+ stateManager = contentProvider.getStateManager();
}
-
- ResourceManager resourceManager = getResourceManager();
- return (Image)resourceManager.get(imageDescriptor);
}
- return null;
+ return stateManager;
}
- protected ResourceManager getResourceManager()
+ public void setStateManager(CDOCheckoutStateManager stateManager)
{
- if (resourceManager == null)
- {
- resourceManager = new LocalResourceManager(JFaceResources.getResources());
- }
-
- return resourceManager;
+ this.stateManager = stateManager;
}
/**
@@ -255,9 +181,8 @@ public class CDOCheckoutLabelProvider extends AdapterFactoryLabelProvider implem
* from the associated {@link #getItemProvider() item provider} when {@link CDOTransferElement element} labels need to be updated.
*
* @author Eike Stepper
- * @since 4.2
*/
- protected class EditorRegistryListener implements IPropertyListener
+ private class EditorRegistryListener implements IPropertyListener
{
public void propertyChanged(Object source, int propId)
{
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
new file mode 100644
index 0000000000..8d00fb51b2
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutState.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright (c) 2004-2014 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.cdo.explorer.ui.checkouts;
+
+import org.eclipse.emf.cdo.CDOElement;
+import org.eclipse.emf.cdo.eresource.CDOResourceLeaf;
+import org.eclipse.emf.cdo.eresource.CDOResourceNode;
+import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
+import org.eclipse.emf.cdo.explorer.ui.ViewerUtil;
+import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
+import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor;
+import org.eclipse.emf.cdo.ui.CDOEditorUtil;
+import org.eclipse.emf.cdo.ui.CDOLabelDecorator;
+
+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.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+
+import org.eclipse.core.commands.common.EventManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceManager;
+import org.eclipse.jface.util.SafeRunnable;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.LabelProviderChangedEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IEditorDescriptor;
+import org.eclipse.ui.IEditorRegistry;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author Eike Stepper
+ */
+public final class CDOCheckoutState
+{
+ private static final Image CHECKOUT_IMAGE = OM.getImage("icons/checkout.gif");
+
+ private static final Image CHECKOUT_CLOSED_IMAGE = OM.getImage("icons/checkout_closed.gif");
+
+ private static final Image FOLDER_IMAGE = OM.getImage("icons/CDOResourceFolder.gif");
+
+ private static final Image ERROR_IMAGE = PlatformUI.getWorkbench().getSharedImages()
+ .getImage(ISharedImages.IMG_OBJS_ERROR_TSK);
+
+ private static final IEditorRegistry EDITOR_REGISTRY = PlatformUI.getWorkbench().getEditorRegistry();
+
+ private final EventBroker eventBroker = new EventBroker();
+
+ private final CDOCheckout checkout;
+
+ private final ComposedAdapterFactory adapterFactory;
+
+ private final ContentProvider contentProvider;
+
+ private final LabelProvider labelProvider;
+
+ CDOCheckoutState(CDOCheckoutStateManager stateManager, CDOCheckout checkout)
+ {
+ this.checkout = checkout;
+
+ adapterFactory = CDOEditor.createAdapterFactory(true);
+
+ CDOCheckoutContentProvider main = stateManager.getMainContentProvider();
+ contentProvider = new ContentProvider(adapterFactory);
+ contentProvider.inputChanged(main.getViewer(), null, main.getInput());
+
+ ResourceManager resourceManager = stateManager.getResourceManager();
+ labelProvider = new LabelProvider(adapterFactory, resourceManager);
+ labelProvider.addListener(eventBroker);
+ }
+
+ public CDOCheckout getCheckout()
+ {
+ return checkout;
+ }
+
+ public ComposedAdapterFactory getAdapterFactory()
+ {
+ return adapterFactory;
+ }
+
+ public ContentProvider getContentProvider()
+ {
+ return contentProvider;
+ }
+
+ public LabelProvider getLabelProvider()
+ {
+ return labelProvider;
+ }
+
+ public void addListener(ILabelProviderListener listener)
+ {
+ eventBroker.addListener(listener);
+ }
+
+ public void removeListener(ILabelProviderListener listener)
+ {
+ eventBroker.removeListener(listener);
+ }
+
+ public void dispose()
+ {
+ labelProvider.dispose();
+ contentProvider.dispose();
+ adapterFactory.dispose();
+ eventBroker.dispose();
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class EventBroker extends EventManager implements ILabelProviderListener
+ {
+ public void addListener(ILabelProviderListener listener)
+ {
+ addListenerObject(listener);
+ }
+
+ public void removeListener(ILabelProviderListener listener)
+ {
+ removeListenerObject(listener);
+ }
+
+ public void labelProviderChanged(final LabelProviderChangedEvent event)
+ {
+ Object[] listeners = getListeners();
+ for (int i = 0; i < listeners.length; ++i)
+ {
+ final ILabelProviderListener listener = (ILabelProviderListener)listeners[i];
+ SafeRunnable.run(new SafeRunnable()
+ {
+ public void run()
+ {
+ listener.labelProviderChanged(event);
+ }
+ });
+ }
+ }
+
+ public void dispose()
+ {
+ clearListeners();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class ContentProvider extends AdapterFactoryContentProvider
+ {
+ public ContentProvider(AdapterFactory adapterFactory)
+ {
+ super(adapterFactory);
+ }
+
+ @Override
+ public void notifyChanged(Notification notification)
+ {
+ Object notifier = notification.getNotifier();
+ if (notifier instanceof EObject)
+ {
+ EObject eObject = (EObject)notifier;
+
+ Object feature = notification.getFeature();
+ if (feature instanceof EReference)
+ {
+ EReference reference = (EReference)feature;
+ if (reference.isContainment())
+ {
+ Adapter adapter = EcoreUtil.getAdapter(eObject.eAdapters(), CDOCheckout.class);
+ if (adapter instanceof CDOCheckout)
+ {
+ CDOCheckout checkout = (CDOCheckout)adapter;
+ if (checkout.isOpen())
+ {
+ notification = new ViewerNotification(notification, checkout, true, true);
+ }
+ }
+ }
+ }
+ }
+
+ super.notifyChanged(notification);
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class LabelProvider extends AdapterFactoryLabelProvider implements IColorProvider,
+ IStyledLabelProvider
+ {
+ private final ResourceManager resourceManager;
+
+ public LabelProvider(AdapterFactory adapterFactory, ResourceManager resourceManager)
+ {
+ super(adapterFactory);
+ this.resourceManager = resourceManager;
+ }
+
+ @Override
+ public Color getForeground(Object object)
+ {
+ if (object instanceof ViewerUtil.Pending)
+ {
+ return ContainerItemProvider.PENDING_COLOR;
+ }
+
+ return super.getForeground(object);
+ }
+
+ @Override
+ public String getText(Object element)
+ {
+ try
+ {
+ if (element instanceof CDOCheckout)
+ {
+ CDOCheckout checkout = (CDOCheckout)element;
+ return checkout.getLabel();
+ }
+
+ if (element instanceof CDOElement)
+ {
+ CDOElement checkoutElement = (CDOElement)element;
+ return checkoutElement.toString();
+ }
+
+ if (element instanceof EObject)
+ {
+ CDOElement checkoutElement = (CDOElement)EcoreUtil.getExistingAdapter((Notifier)element, CDOElement.class);
+ if (checkoutElement != null)
+ {
+ return checkoutElement.toString(element);
+ }
+
+ if (element instanceof CDOResourceNode)
+ {
+ CDOResourceNode resourceNode = (CDOResourceNode)element;
+
+ String name = resourceNode.getName();
+ if (name == null)
+ {
+ // This must be the root resource.
+ return "";
+ }
+
+ return name;
+ }
+ }
+
+ if (element instanceof ViewerUtil.Pending)
+ {
+ ViewerUtil.Pending pending = (ViewerUtil.Pending)element;
+ return pending.getText();
+ }
+
+ return super.getText(element);
+ }
+ catch (Exception ex)
+ {
+ return ex.getMessage();
+ }
+ }
+
+ @Override
+ public Image getImage(Object element)
+ {
+ try
+ {
+ if (element instanceof CDOCheckout)
+ {
+ CDOCheckout checkout = (CDOCheckout)element;
+ if (checkout.isOpen())
+ {
+ return CDOLabelDecorator.decorate(CHECKOUT_IMAGE, checkout.getRootObject());
+ }
+
+ return CHECKOUT_CLOSED_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);
+ }
+
+ return doGetImage(element);
+ }
+ catch (Exception ex)
+ {
+ return ERROR_IMAGE;
+ }
+ }
+
+ private Image doGetImage(Object element)
+ {
+ if (element instanceof CDOResourceLeaf)
+ {
+ String name = ((CDOResourceLeaf)element).getName();
+ if (name == null)
+ {
+ // This must be the root resource.
+ return FOLDER_IMAGE;
+ }
+
+ IEditorDescriptor editorDescriptor = EDITOR_REGISTRY.getDefaultEditor(name);
+ if (editorDescriptor != null && !CDOEditorUtil.TEXT_EDITOR_ID.equals(editorDescriptor.getId()))
+ {
+ Image image = getWorkbenchImage(name);
+ if (image != null)
+ {
+ return image;
+ }
+ }
+ }
+
+ return super.getImage(element);
+ }
+
+ private Image getWorkbenchImage(String name)
+ {
+ ImageDescriptor imageDescriptor = EDITOR_REGISTRY.getImageDescriptor(name);
+ if (imageDescriptor != null)
+ {
+ return (Image)resourceManager.get(imageDescriptor);
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java
new file mode 100644
index 0000000000..0555e082ef
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutStateManager.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2004-2014 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.cdo.explorer.ui.checkouts;
+
+import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
+import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
+import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutState.ContentProvider;
+import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutState.LabelProvider;
+
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.resource.ResourceManager;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public final class CDOCheckoutStateManager
+{
+ private final ResourceManager resourceManager = new LocalResourceManager(JFaceResources.getResources());
+
+ private final Map<CDOCheckout, CDOCheckoutState> states = new HashMap<CDOCheckout, CDOCheckoutState>();
+
+ private final CDOCheckoutContentProvider mainContentProvider;
+
+ public CDOCheckoutStateManager(CDOCheckoutContentProvider mainContentProvider)
+ {
+ this.mainContentProvider = mainContentProvider;
+ }
+
+ public CDOCheckoutContentProvider getMainContentProvider()
+ {
+ return mainContentProvider;
+ }
+
+ public ResourceManager getResourceManager()
+ {
+ return resourceManager;
+ }
+
+ public CDOCheckoutState[] getStates()
+ {
+ synchronized (states)
+ {
+ return states.values().toArray(new CDOCheckoutState[states.size()]);
+ }
+ }
+
+ public CDOCheckoutState getState(Object object)
+ {
+ CDOCheckout checkout = CDOExplorerUtil.getCheckout(object);
+ if (checkout != null)
+ {
+ synchronized (states)
+ {
+ CDOCheckoutState state = states.get(checkout);
+ if (state == null)
+ {
+ state = new CDOCheckoutState(this, checkout);
+ states.put(checkout, state);
+ }
+
+ return state;
+ }
+ }
+
+ return null;
+ }
+
+ public void inputChanged(TreeViewer newTreeViewer, Object oldInput, Object newInput)
+ {
+ for (CDOCheckoutState state : getStates())
+ {
+ IContentProvider contentProvider = state.getContentProvider();
+ contentProvider.inputChanged(newTreeViewer, oldInput, newInput);
+ }
+ }
+
+ public Object adapt(Object target, Object type)
+ {
+ CDOCheckoutState state = getState(target);
+ if (state != null)
+ {
+ return state.getAdapterFactory().adapt(target, type);
+ }
+
+ return null;
+ }
+
+ public ComposedAdapterFactory getAdapterFactory(Object object)
+ {
+ CDOCheckoutState state = getState(object);
+ if (state != null)
+ {
+ return state.getAdapterFactory();
+ }
+
+ return null;
+ }
+
+ public ContentProvider getContentProvider(Object object)
+ {
+ CDOCheckoutState state = getState(object);
+ if (state != null)
+ {
+ return state.getContentProvider();
+ }
+
+ return null;
+ }
+
+ public LabelProvider getLabelProvider(Object object)
+ {
+ CDOCheckoutState state = getState(object);
+ if (state != null)
+ {
+ return state.getLabelProvider();
+ }
+
+ return null;
+ }
+
+ public void dispose()
+ {
+ resourceManager.dispose();
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutViewerSorter.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutViewerSorter.java
index 605c64e91e..fbd40d38bb 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutViewerSorter.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOCheckoutViewerSorter.java
@@ -47,11 +47,14 @@ public class CDOCheckoutViewerSorter extends ViewerSorter
EObject child2 = (EObject)e2;
EObject parent = CDOElement.getParentOf(child1);
- EList<EObject> children = parent.eContents();
-
- int pos1 = children.indexOf(child1);
- int pos2 = children.indexOf(child2);
- return pos1 - pos2;
+ if (parent != null)
+ {
+ EList<EObject> children = parent.eContents();
+
+ int pos1 = children.indexOf(child1);
+ int pos2 = children.indexOf(child2);
+ return pos1 - pos2;
+ }
}
return super.compare(viewer, e1, e2);
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 b3d7441ebf..09b2eaa194 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
@@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutContentProvider;
+import org.eclipse.emf.cdo.explorer.ui.checkouts.wizards.AbstractNewWizard;
import org.eclipse.emf.cdo.internal.ui.actions.TransactionalBackgroundAction;
import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor;
import org.eclipse.emf.cdo.internal.ui.editor.CDOEditor.NewRootMenuPopulator;
@@ -59,6 +60,9 @@ import org.eclipse.ui.navigator.ICommonMenuConstants;
import org.eclipse.ui.navigator.ICommonViewerSite;
import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
import org.eclipse.ui.navigator.WizardActionGroup;
+import org.eclipse.ui.wizards.IWizardCategory;
+import org.eclipse.ui.wizards.IWizardDescriptor;
+import org.eclipse.ui.wizards.IWizardRegistry;
import java.util.Collection;
@@ -69,7 +73,9 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
{
private static final String NEW_MENU_NAME = "common.new.menu"; //$NON-NLS-1$
- private final ComposedAdapterFactory adapterFactory;
+ private ICommonActionExtensionSite extensionSite;
+
+ private CDOCheckoutContentProvider contentProvider;
private ActionFactory.IWorkbenchAction showDlgAction;
@@ -83,12 +89,12 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
public NewActionProvider()
{
- adapterFactory = CDOEditor.createAdapterFactory(true);
}
@Override
public void init(ICommonActionExtensionSite extensionSite)
{
+ this.extensionSite = extensionSite;
ICommonViewerSite viewSite = extensionSite.getViewSite();
if (viewSite instanceof ICommonViewerWorkbenchSite)
{
@@ -97,8 +103,41 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
showDlgAction = ActionFactory.NEW.create(window);
- newWizardActionGroup = new WizardActionGroup(window, PlatformUI.getWorkbench().getNewWizardRegistry(),
- WizardActionGroup.TYPE_NEW, extensionSite.getContentService());
+ 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);
+ }
+ };
+
+ newWizardActionGroup = new WizardActionGroup(window, wrapperRegistry, WizardActionGroup.TYPE_NEW,
+ extensionSite.getContentService());
viewer = (TreeViewer)extensionSite.getStructuredViewer();
viewer.addSelectionChangedListener(this);
@@ -120,7 +159,6 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
showDlgAction = null;
}
- adapterFactory.dispose();
super.dispose();
}
@@ -207,7 +245,13 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
@Override
protected IAction createAction(EObject object)
{
- return new NewRootAction(resource, object);
+ CDOCheckoutContentProvider contentProvider = getContentProvider();
+ ComposedAdapterFactory adapterFactory = contentProvider.getStateManager().getState(object).getAdapterFactory();
+
+ Object image = CDOEditor.getLabelImage(adapterFactory, object);
+ ImageDescriptor imageDescriptor = ExtendedImageRegistry.getInstance().getImageDescriptor(image);
+
+ return new NewRootAction(resource, object, imageDescriptor);
}
};
@@ -219,6 +263,9 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
CDOCheckout checkout = CDOExplorerUtil.getCheckout(object);
ResourceSet resourceSet = checkout.getView().getResourceSet();
+ CDOCheckoutContentProvider contentProvider = getContentProvider();
+ ComposedAdapterFactory adapterFactory = contentProvider.getStateManager().getState(checkout).getAdapterFactory();
+
EditingDomain editingDomain = new AdapterFactoryEditingDomain(adapterFactory, new BasicCommandStack(), resourceSet);
IStructuredSelection selection = new StructuredSelection(object);
CDOObject cdoObject = CDOUtil.getCDOObject(object);
@@ -236,6 +283,17 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
}
}
+ private CDOCheckoutContentProvider getContentProvider()
+ {
+ if (contentProvider == null)
+ {
+ String viewerID = extensionSite.getContentService().getViewerId();
+ contentProvider = CDOCheckoutContentProvider.getInstance(viewerID);
+ }
+
+ return contentProvider;
+ }
+
/**
* @author Eike Stepper
*/
@@ -276,7 +334,7 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
EObject object = view.getObject(newObject);
if (object != null)
{
- CDOCheckoutContentProvider contentProvider = CDOCheckoutContentProvider.getInstance();
+ CDOCheckoutContentProvider contentProvider = getContentProvider();
if (contentProvider != null)
{
contentProvider.selectObject(object);
@@ -293,10 +351,9 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
{
private final EObject object;
- public NewRootAction(CDOResource resource, EObject object)
+ public NewRootAction(CDOResource resource, EObject object, ImageDescriptor image)
{
- super(object.eClass().getName(), null, ExtendedImageRegistry.getInstance().getImageDescriptor(
- CDOEditor.getLabelImage(adapterFactory, object)), resource);
+ super(object.eClass().getName(), null, image, resource);
this.object = object;
}
@@ -326,24 +383,34 @@ public class NewActionProvider extends CommonActionProvider implements ISelectio
@Override
protected EObject doRun(CDOTransaction transaction, CDOObject parent, ISelection selection)
{
- BasicCommandStack commandStack = new BasicCommandStack();
- ResourceSet resourceSet = transaction.getResourceSet();
- EditingDomain editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, resourceSet);
+ ComposedAdapterFactory adapterFactory = CDOEditor.createAdapterFactory(true);
- CreateChildAction delegate = new CreateChildAction(editingDomain, selection, childDescriptor);
- delegate.run();
-
- if (childDescriptor instanceof CommandParameter)
+ try
{
- CommandParameter parameter = (CommandParameter)childDescriptor;
- Object value = parameter.getValue();
- if (value instanceof EObject)
+ BasicCommandStack commandStack = new BasicCommandStack();
+ ResourceSet resourceSet = transaction.getResourceSet();
+
+ EditingDomain editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, resourceSet);
+
+ CreateChildAction delegate = new CreateChildAction(editingDomain, selection, childDescriptor);
+ delegate.run();
+
+ if (childDescriptor instanceof CommandParameter)
{
- return (EObject)value;
+ CommandParameter parameter = (CommandParameter)childDescriptor;
+ Object value = parameter.getValue();
+ if (value instanceof EObject)
+ {
+ return (EObject)value;
+ }
}
- }
- return null;
+ return null;
+ }
+ finally
+ {
+ adapterFactory.dispose();
+ }
}
}
}
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 771ab2c11a..aab9a5a268 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
@@ -43,6 +43,8 @@ public abstract class AbstractNewWizard extends Wizard implements INewWizard
private IStructuredSelection selection;
+ private CDOCheckoutContentProvider contentProvider;
+
private NewWizardPage page;
protected AbstractNewWizard(String resourceType, String title)
@@ -56,6 +58,11 @@ public abstract class AbstractNewWizard extends Wizard implements INewWizard
this.selection = selection;
}
+ public void setContentProvider(CDOCheckoutContentProvider contentProvider)
+ {
+ this.contentProvider = contentProvider;
+ }
+
public final String getResourceType()
{
return resourceType;
@@ -130,17 +137,13 @@ public abstract class AbstractNewWizard extends Wizard implements INewWizard
"An error occured while creating the " + title.toLowerCase() + ".", status);
}
- if (commitInfo != null)
+ if (commitInfo != null && contentProvider != null)
{
- CDOCheckoutContentProvider contentProvider = CDOCheckoutContentProvider.getInstance();
- if (contentProvider != null)
- {
- CDOView view = checkout.getView();
- view.waitForUpdate(commitInfo.getTimeStamp());
-
- CDOObject newObject = view.getObject(newID);
- contentProvider.selectObject(newObject);
- }
+ CDOView view = checkout.getView();
+ view.waitForUpdate(commitInfo.getTimeStamp());
+
+ CDOObject newObject = view.getObject(newID);
+ contentProvider.selectObject(newObject);
}
return Status.OK_STATUS;
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/NewWizardPage.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/NewWizardPage.java
index a0ea83ed85..804df47180 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/NewWizardPage.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/NewWizardPage.java
@@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.eresource.CDOResourceNode;
import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
+import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutContentProvider;
import org.eclipse.emf.cdo.explorer.ui.checkouts.CDOCheckoutLabelProvider;
import org.eclipse.emf.cdo.ui.CDOItemProvider;
@@ -155,10 +156,15 @@ public class NewWizardPage extends WizardPage
}
};
+ CDOCheckoutContentProvider contentProvider = new CDOCheckoutContentProvider();
+ contentProvider.disposeWith(parentControl);
+
+ CDOCheckoutLabelProvider labelProvider = new CDOCheckoutLabelProvider(contentProvider);
+
parentViewer = new TreeViewer(container, SWT.BORDER);
parentViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
parentViewer.setContentProvider(parentItemProvider);
- parentViewer.setLabelProvider(new CDOCheckoutLabelProvider());
+ parentViewer.setLabelProvider(labelProvider);
parentViewer.setInput(CDOExplorerUtil.getCheckoutManager());
parentViewer.addSelectionChangedListener(new ISelectionChangedListener()
{
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerUtil.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerUtil.java
index 670b7e631a..0dd267d342 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerUtil.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerUtil.java
@@ -88,6 +88,11 @@ public final class CDOExplorerUtil
path.addFirst(object);
}
+ if (object instanceof CDOCheckout)
+ {
+ return (CDOCheckout)object;
+ }
+
if (object instanceof EObject)
{
EObject eObject = (EObject)object;
diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java
index 70ef2f68e3..c33c0b20b8 100644
--- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java
+++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java
@@ -17,6 +17,8 @@ import org.eclipse.emf.cdo.compare.CDOCompareUtil;
import org.eclipse.emf.cdo.session.CDORepositoryInfo;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.transaction.CDOTransactionOpener;
import org.eclipse.emf.cdo.ui.CDOItemProvider;
import org.eclipse.emf.cdo.ui.internal.compare.bundle.OM;
import org.eclipse.emf.cdo.view.CDOView;
@@ -30,6 +32,7 @@ import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.domain.ICompareEditingDomain;
import org.eclipse.emf.compare.domain.impl.EMFCompareEditingDomain;
import org.eclipse.emf.compare.scope.IComparisonScope;
+import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.edit.EMFEditPlugin;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
@@ -37,6 +40,8 @@ import org.eclipse.emf.spi.cdo.InternalCDOView;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.CompareUI;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.swt.graphics.Image;
@@ -62,11 +67,20 @@ public class CDOCompareEditorUtil
public static boolean openEditor(CDOViewOpener viewOpener, CDOBranchPoint leftPoint, CDOBranchPoint rightPoint,
CDOView[] originView, boolean activate)
{
+ return openEditor(null, viewOpener, leftPoint, rightPoint, originView, activate);
+ }
+
+ /**
+ * @since 4.3
+ */
+ public static boolean openEditor(CDOTransactionOpener transactionOpener, CDOViewOpener viewOpener,
+ CDOBranchPoint leftPoint, CDOBranchPoint rightPoint, CDOView[] originView, boolean activate)
+ {
ACTIVATE_EDITOR.set(activate);
try
{
- return openDialog(viewOpener, leftPoint, rightPoint, originView);
+ return openDialog(transactionOpener, viewOpener, leftPoint, rightPoint, originView);
}
finally
{
@@ -139,6 +153,15 @@ public class CDOCompareEditorUtil
public static boolean openDialog(CDOViewOpener viewOpener, CDOBranchPoint leftPoint, CDOBranchPoint rightPoint,
CDOView[] originView)
{
+ return openDialog(null, viewOpener, leftPoint, rightPoint, originView);
+ }
+
+ /**
+ * @since 4.3
+ */
+ public static boolean openDialog(CDOTransactionOpener transactionOpener, CDOViewOpener viewOpener,
+ CDOBranchPoint leftPoint, CDOBranchPoint rightPoint, CDOView[] originView)
+ {
final Boolean activateEditor = ACTIVATE_EDITOR.get();
final CDOView[] leftAndRightView = { null, null };
@@ -153,7 +176,17 @@ public class CDOCompareEditorUtil
try
{
- leftAndRightView[0] = viewOpener.openView(leftPoint, new ResourceSetImpl());
+ ResourceSet leftResourceSet = new ResourceSetImpl();
+ if (transactionOpener != null)
+ {
+ leftPoint = leftPoint.getBranch().getHead();
+ leftAndRightView[0] = transactionOpener.openTransaction(leftPoint, leftResourceSet);
+ }
+ else
+ {
+ leftAndRightView[0] = viewOpener.openView(leftPoint, leftResourceSet);
+ }
+
leftAndRightView[1] = viewOpener.openView(rightPoint, new ResourceSetImpl());
return openDialog(leftAndRightView[0], leftAndRightView[1], originView);
@@ -251,18 +284,23 @@ public class CDOCompareEditorUtil
String rightLabel = itemProvider.getText(rightBranchPoint);
itemProvider.dispose();
+ boolean leftEditable = !leftView.isReadOnly();
+ boolean rightEditable = !rightView.isReadOnly();
+
CompareConfiguration configuration = new CompareConfiguration();
configuration.setLeftImage(leftImage);
- configuration.setLeftLabel(leftLabel);
- configuration.setLeftEditable(!leftView.isReadOnly());
+ configuration.setLeftLabel("Target: " + leftLabel);
+ configuration.setLeftEditable(leftEditable);
configuration.setRightImage(rightImage);
- configuration.setRightLabel(rightLabel);
- configuration.setRightEditable(!rightView.isReadOnly());
+ configuration.setRightLabel("Source: " + rightLabel);
+ configuration.setRightEditable(rightEditable);
- String title = "Compare " + ((InternalCDOView)leftView).getRepositoryName() + " " + leftLabel + " and "
+ boolean merge = leftEditable || rightEditable;
+ String repositoryName = ((InternalCDOView)leftView).getRepositoryName();
+ String title = (merge ? "Merge " : "Compare ") + repositoryName + " " + leftLabel + (merge ? " from " : " and ")
+ rightLabel;
- Input input = new Input(configuration, comparison, editingDomain, adapterFactory);
+ Input input = new Input(leftView, configuration, comparison, editingDomain, adapterFactory);
input.setTitle(title);
return input;
}
@@ -315,15 +353,18 @@ public class CDOCompareEditorUtil
{
private static final Image COMPARE_IMAGE = OM.getImage("icons/compare.gif");
+ private final CDOView leftView;
+
private List<Runnable> disposeRunnables;
private boolean ok;
- private Input(CompareConfiguration configuration, Comparison comparison, ICompareEditingDomain editingDomain,
- AdapterFactory adapterFactory)
+ private Input(CDOView leftView, CompareConfiguration configuration, Comparison comparison,
+ ICompareEditingDomain editingDomain, AdapterFactory adapterFactory)
{
super(new org.eclipse.emf.compare.ide.ui.internal.configuration.EMFCompareConfiguration(configuration),
comparison, editingDomain, adapterFactory);
+ this.leftView = leftView;
}
private void dispose()
@@ -350,6 +391,31 @@ public class CDOCompareEditorUtil
this.disposeRunnables = disposeRunnables;
}
+ @Override
+ public void cancelPressed()
+ {
+ super.cancelPressed();
+ }
+
+ @Override
+ public void saveChanges(IProgressMonitor monitor) throws CoreException
+ {
+ if (leftView instanceof CDOTransaction)
+ {
+ CDOTransaction transaction = (CDOTransaction)leftView;
+
+ try
+ {
+ transaction.commit(monitor);
+ setDirty(false);
+ }
+ catch (Exception ex)
+ {
+ OM.BUNDLE.coreException(ex);
+ }
+ }
+ }
+
public boolean isOK()
{
return ok;
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/bundle/AbstractBundle.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/bundle/AbstractBundle.java
index 183ccacc3a..708e31ae55 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/bundle/AbstractBundle.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/internal/util/bundle/AbstractBundle.java
@@ -20,6 +20,11 @@ import org.eclipse.net4j.util.om.log.OMLogger;
import org.eclipse.net4j.util.om.trace.OMTracer;
import org.eclipse.net4j.util.om.trace.Tracer;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -200,6 +205,57 @@ public abstract class AbstractBundle implements OMBundle, OMBundle.DebugSupport,
return logger;
}
+ public IStatus getStatus(Object obj)
+ {
+ if (obj instanceof CoreException)
+ {
+ CoreException coreException = (CoreException)obj;
+ return coreException.getStatus();
+ }
+
+ if (obj instanceof Throwable)
+ {
+ Throwable t = (Throwable)obj;
+ String msg = t.getLocalizedMessage();
+ if (msg == null || msg.length() == 0)
+ {
+ msg = t.getClass().getName();
+ }
+
+ return new Status(IStatus.ERROR, getBundleID(), msg, t);
+ }
+
+ return new Status(IStatus.INFO, getBundleID(), obj.toString(), null);
+ }
+
+ public void coreException(Throwable t) throws CoreException
+ {
+ if (t instanceof CoreException)
+ {
+ CoreException ex = (CoreException)t;
+ IStatus status = ex.getStatus();
+ if (status != null && status.getSeverity() == IStatus.CANCEL)
+ {
+ throw new OperationCanceledException();
+ }
+
+ throw ex;
+ }
+
+ if (t instanceof OperationCanceledException)
+ {
+ throw (OperationCanceledException)t;
+ }
+
+ if (t instanceof Error)
+ {
+ throw (Error)t;
+ }
+
+ IStatus status = getStatus(t);
+ throw new CoreException(status);
+ }
+
public File getConfigFile()
{
return platform.getConfigFile(getConfigFileName());
diff --git a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OMBundle.java b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OMBundle.java
index 870d19187f..4433f4c53d 100644
--- a/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OMBundle.java
+++ b/plugins/org.eclipse.net4j.util/src/org/eclipse/net4j/util/om/OMBundle.java
@@ -4,7 +4,7 @@
* 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
*/
@@ -14,6 +14,8 @@ import org.eclipse.net4j.util.om.log.OMLogger;
import org.eclipse.net4j.util.om.pref.OMPreferences;
import org.eclipse.net4j.util.om.trace.OMTracer;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.osgi.service.debug.DebugOptions;
import org.osgi.framework.Bundle;
@@ -28,7 +30,7 @@ import java.util.ResourceBundle;
/**
* Represents a {@link Bundle bundle}, whether OSGi {@link OMPlatform#isOSGiRunning() is running} or not.
- *
+ *
* @author Eike Stepper
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
@@ -59,6 +61,16 @@ public interface OMBundle
public OMPreferences preferences();
+ /**
+ * @since 3.5
+ */
+ public IStatus getStatus(Object obj);
+
+ /**
+ * @since 3.5
+ */
+ public void coreException(Throwable t) throws CoreException;
+
public File getConfigFile();
public Properties getConfigProperties();
@@ -80,7 +92,7 @@ public interface OMBundle
/**
* A facility for accessing OSGi {@link DebugOptions debug options}, whether OSGi {@link OMPlatform#isOSGiRunning() is
* running} or not.
- *
+ *
* @author Eike Stepper
*/
public interface DebugSupport
@@ -106,21 +118,21 @@ public interface OMBundle
/**
* A facility for accessing {@link ResourceBundle resource bundles}.
- *
+ *
* @author Eike Stepper
*/
public interface TranslationSupport
{
/**
* Indicates whether strings should be translated by default.
- *
+ *
* @return <code>true</code> if strings should be translated by default; <code>false</code> otherwise.
*/
public boolean shouldTranslate();
/**
* Sets whether strings should be translated by default.
- *
+ *
* @param shouldTranslate
* whether strings should be translated by default.
*/
@@ -128,7 +140,7 @@ public interface OMBundle
/**
* Returns the string resource associated with the key.
- *
+ *
* @param key
* the key of the string resource.
* @return the string resource associated with the key.
@@ -137,7 +149,7 @@ public interface OMBundle
/**
* Returns the string resource associated with the key.
- *
+ *
* @param key
* the key of the string resource.
* @param translate
@@ -148,7 +160,7 @@ public interface OMBundle
/**
* Returns a string resource associated with the key, and performs substitutions.
- *
+ *
* @param key
* the key of the string.
* @param args
@@ -161,7 +173,7 @@ public interface OMBundle
/**
* Returns a string resource associated with the key, and performs substitutions.
- *
+ *
* @param key
* the key of the string.
* @param translate

Back to the top