diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java index e749e482e9e..a9b5463c5d6 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java @@ -24,12 +24,12 @@ import org.eclipse.dd.dsf.concurrent.MultiRequestMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactoryAdapter; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactoryAdapter; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.jface.viewers.TreePath; @@ -344,7 +344,17 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode { update.done(); } - public static class AbstractVMContext implements IVMContext { + /** + * Implementation of basic View Model Context node functionality. The main + * purpose of the VMC wrapper is to re-direct adapter queries to the IVMAdapter + * and the layout node that the given context was created by. + *
+ * Note: Deriving classes must override the Object.equals/hashCode methods. + * This is because the VMC objects are just wrappers that are created + * by the view model on demand, so the equals methods must use the object + * being wrapped by the VMC to perform a meaningful comparison. + */ + abstract public static class AbstractVMContext implements IVMContext { protected final IVMAdapter fVMAdapter; protected final IVMLayoutNode fLayoutNode; @@ -359,8 +369,8 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode { * IAdapter implementation returns the IVMAdapter instance for the * interfaces that are actually implemented by the VM Adapter. These * should at least include {@link IElementContentProvider}, - * {@link IModelProxyFactoryAdapter}, and - * {@link IColumnPresentationFactoryAdapter}. + * {@link IModelProxyFactory}, and + * {@link IColumnPresentationFactory}. */ @SuppressWarnings("unchecked") public Object getAdapter(Class adapter) { @@ -371,6 +381,14 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode { } return null; } + + /** Deriving classes must override. */ + @Override + abstract public boolean equals(Object obj); + + /** Deriving classes must override. */ + @Override + abstract public int hashCode(); } protected class ViewerUpdate implements IViewerUpdate { diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java index 227365734e7..27515202f9a 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java @@ -33,7 +33,7 @@ import org.eclipse.dd.dsf.ui.DsfUIPlugin; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactoryAdapter; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy; @@ -42,7 +42,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy; import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousContentAdapter; import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousLabelAdapter; -import org.eclipse.debug.internal.ui.viewers.provisional.IColumnEditorFactoryAdapter; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.Viewer; @@ -392,11 +391,11 @@ abstract public class AbstractVMProvider implements IVMProvider * the tree/table, so the VMProvider must be configured to own the root element * in the view in order for this setting to be effective. *
- * Note: since the IColumnEditorFactoryAdapter interface is synchronous, and since + * Note: since the IColumnEditorFactory interface is synchronous, and since * column info is fairly static, this method is thread-safe, and it will * not be called on the executor thread. * - * @see IColumnPresentationFactoryAdapter#createColumnPresentation(IPresentationContext, Object) + * @see IColumnPresentationFactory#createColumnPresentation(IPresentationContext, Object) */ public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) { return null; @@ -411,11 +410,11 @@ abstract public class AbstractVMProvider implements IVMProvider * the tree/table, so the VMProvider must be configured to own the root element * in the view in order for this setting to be effective. *
- * Note: since the IColumnEditorFactoryAdapter interface is synchronous, and since
+ * Note: since the IColumnEditorFactory interface is synchronous, and since
* column info is fairly static, this method is thread-safe, and it will
* not be called on the executor thread.
*
- * @see IColumnEditorFactoryAdapter#getColumnEditorId(IPresentationContext, Object)
+ * @see IColumnEditorFactory#getColumnEditorId(IPresentationContext, Object)
*/
public String getColumnPresentationId(IPresentationContext context, Object element) {
return null;
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java
index 2d1c9dfaa05..85d5e3abadd 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java
@@ -1,9 +1,9 @@
package org.eclipse.dd.dsf.ui.viewmodel;
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactoryAdapter;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactoryAdapter;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory;
/**
* The View Model adapter handles the layout of a given data model within a
@@ -14,6 +14,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactor
@ThreadSafe
@SuppressWarnings("restriction")
public interface IVMAdapter
- extends IElementContentProvider, IModelProxyFactoryAdapter, IColumnPresentationFactoryAdapter
+ extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory
{
}
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java
index c8bd7c4d542..8228dea5a4d 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java
@@ -1,9 +1,9 @@
package org.eclipse.dd.dsf.ui.viewmodel;
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactoryAdapter;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactoryAdapter;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
/**
@@ -14,7 +14,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationCont
@ThreadSafe
@SuppressWarnings("restriction")
public interface IVMProvider
- extends IElementContentProvider, IModelProxyFactoryAdapter, IColumnPresentationFactoryAdapter
+ extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory
{
/**
* Returns the root layout node that is configured in this provider.
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMLayoutNode.java
index df94f0e020c..c6fd3cfe9cb 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMLayoutNode.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMLayoutNode.java
@@ -16,10 +16,10 @@ import java.util.concurrent.RejectedExecutionException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.dd.dsf.concurrent.RequestMonitor;
-import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
+import org.eclipse.dd.dsf.concurrent.DsfRunnable;
import org.eclipse.dd.dsf.concurrent.Immutable;
+import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.datamodel.IDMData;
@@ -36,7 +36,7 @@ import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.VMDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactoryAdapter;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
@@ -345,7 +345,7 @@ abstract public class AbstractDMVMLayoutNode
+ * Note: The {@link #equals(Object)} and {@link #hashCode()} methods are
+ * made abstract to force the deriving classes to provide a proper
+ * implementation. Data Model Context objects are meant to be used as handles,
+ * therefore a proper equals implementation is critical.
+ *
- * Note: there should be only one instance of ServiceContext per service, so there
- * is no need to implement the equals() methods.
*/
public class ServiceDMContext
+ * 1) The {@link #getAdapter(Class)} implementation which retrieves model
+ * adapters registered with the session.
+ * 2) Methods to help compare DM Contexts.
+ *