diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java
index 6f569e19447..f8579ae632a 100644
--- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java
@@ -11,7 +11,6 @@
package org.eclipse.dd.dsf.debug.ui.viewmodel.expression;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
-import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterGroupLayoutNode;
import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterLayoutNode;
@@ -25,6 +24,7 @@ import org.eclipse.dd.dsf.ui.viewmodel.IVMContext;
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
+import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IExpressionsListener;
import org.eclipse.debug.core.model.IExpression;
@@ -71,7 +71,7 @@ public class ExpressionVMProvider extends AbstractDMVMProviderWithCache
/*
* Create the top level node which provides the anchor starting point.
*/
- IVMRootLayoutNode debugViewSelectionNode = new DebugViewSelectionRootLayoutNode(this);
+ IVMRootLayoutNode debugViewSelectionNode = new DMVMRootLayoutNode(this);
/*
* Now the Overarching management node.
@@ -145,7 +145,7 @@ public class ExpressionVMProvider extends AbstractDMVMProviderWithCache
if (rootLayoutNode == null) {
return null;
}
- else if (element.equals(rootLayoutNode.getRootObject())) {
+ else if (element.equals(getRootElement())) {
return rootLayoutNode;
}
else if (element instanceof IVMContext){
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardLaunchRootLayoutNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardLaunchRootLayoutNode.java
index 38f3a669992..2ea7489c2f8 100644
--- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardLaunchRootLayoutNode.java
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/launch/StandardLaunchRootLayoutNode.java
@@ -17,7 +17,7 @@ import java.util.Map;
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider;
-import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMRootLayoutNode;
+import org.eclipse.dd.dsf.ui.viewmodel.VMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.VMDelta;
@@ -35,7 +35,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
* functionality, so the default adapters should be used to retrieve the label.
*/
@SuppressWarnings("restriction")
-public class StandardLaunchRootLayoutNode extends AbstractVMRootLayoutNode
+public class StandardLaunchRootLayoutNode extends VMRootLayoutNode
implements IVMRootLayoutNode
{
public static class LaunchesEvent {
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMProvider.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMProvider.java
index da5601af972..4e114c1d2d4 100644
--- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMProvider.java
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterVMProvider.java
@@ -11,13 +11,13 @@
package org.eclipse.dd.dsf.debug.ui.viewmodel.register;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
-import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
+import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@@ -43,7 +43,7 @@ public class RegisterVMProvider extends AbstractDMVMProviderWithCache implements
/*
* Create the top level node to deal with the root selection.
*/
- IVMRootLayoutNode debugViewSelection = new DebugViewSelectionRootLayoutNode(this);
+ IVMRootLayoutNode debugViewSelection = new DMVMRootLayoutNode(this);
/*
* Create the Group nodes next. They represent the first level shown in the view.
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java
index f7e053639e7..82c673a30f2 100644
--- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java
@@ -9,13 +9,13 @@
package org.eclipse.dd.dsf.debug.ui.viewmodel.variable;
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
-import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
import org.eclipse.dd.dsf.service.DsfSession;
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
+import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@@ -37,7 +37,7 @@ public class VariableVMProvider extends AbstractDMVMProviderWithCache implements
/*
* Create the top level node to deal with the root selection.
*/
- IVMRootLayoutNode debugViewSelection = new DebugViewSelectionRootLayoutNode(this);
+ IVMRootLayoutNode debugViewSelection = new DMVMRootLayoutNode(this);
/*
* Create the local variables nodes next. They represent the first level shown in the view.
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java
index a4ecedef72f..d74c297c78f 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java
@@ -67,15 +67,8 @@ abstract public class AbstractVMAdapter implements IVMAdapter
return fExecutor;
}
- /**
- * Creates a new View Model Provider for given presentation context. Returns null
- * if the presentation context is not supported.
- */
- @ThreadSafe
- abstract protected IVMProvider createViewModelProvider(IPresentationContext context);
-
@ThreadSafe
- private IVMProvider getViewModelProvider(IPresentationContext context) {
+ public IVMProvider getVMProvider(IPresentationContext context) {
synchronized(fViewModelProviders) {
if (fDisposed) return null;
@@ -142,7 +135,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter
}
private void callProviderWithUpdate(IViewerUpdate[] updates, int startIdx, int endIdx) {
- final IVMProvider provider = getViewModelProvider(updates[0].getPresentationContext());
+ final IVMProvider provider = getVMProvider(updates[0].getPresentationContext());
if (provider == null) {
for (IViewerUpdate update : updates) {
update.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfService.INTERNAL_ERROR,
@@ -175,7 +168,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter
}
public IModelProxy createModelProxy(Object element, IPresentationContext context) {
- IVMProvider provider = getViewModelProvider(context);
+ IVMProvider provider = getVMProvider(context);
if (provider != null) {
return provider.createModelProxy(element, context);
}
@@ -183,7 +176,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter
}
public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) {
- final IVMProvider provider = getViewModelProvider(context);
+ final IVMProvider provider = getVMProvider(context);
if (provider != null) {
return provider.createColumnPresentation(context, element);
}
@@ -191,12 +184,17 @@ abstract public class AbstractVMAdapter implements IVMAdapter
}
public String getColumnPresentationId(IPresentationContext context, Object element) {
- final IVMProvider provider = getViewModelProvider(context);
+ final IVMProvider provider = getVMProvider(context);
if (provider != null) {
return provider.getColumnPresentationId(context, element);
}
return null;
}
-
+ /**
+ * Creates a new View Model Provider for given presentation context. Returns null
+ * if the presentation context is not supported.
+ */
+ @ThreadSafe
+ abstract protected IVMProvider createViewModelProvider(IPresentationContext context);
}
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 e4e13f89850..7c5ddf8a59f 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
@@ -447,7 +447,7 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode {
return path.getLastSegment();
}
// Calculate the root of the viewer.
- return getVMProvider().getRootLayoutNode().getRootObject();
+ return getVMProvider().getRootElement();
}
public Object getElement() {
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 2372de3e1e3..2313a542c90 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
@@ -62,8 +62,21 @@ import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousLabelAdapt
@SuppressWarnings("restriction")
abstract public class AbstractVMProvider implements IVMProvider
{
+ /** Reference to the VM adapter that owns this provider */
private final AbstractVMAdapter fVMAdapter;
+
+ /** The presentation context that this provider is associated with */
private final IPresentationContext fPresentationContext;
+
+ /**
+ * The current root element of this view model. This element is obtained
+ * from the argument to {@link #createModelProxy(Object, IPresentationContext)}.
+ */
+ private Object fRootElement;
+
+ /**
+ *
+ */
private ModelProxy fModelProxy = new ModelProxy();
private boolean fDisposed = false;
@@ -104,10 +117,16 @@ abstract public class AbstractVMProvider implements IVMProvider
}
}
+ @ThreadSafe
protected synchronized ModelProxy getModelProxy() {
return fModelProxy;
}
+ @ThreadSafe
+ public synchronized Object getRootElement() {
+ return fRootElement;
+ }
+
@ThreadSafe
public IVMRootLayoutNode getRootLayoutNode() {
return fRootLayoutNodeRef.get();
@@ -385,18 +404,16 @@ abstract public class AbstractVMProvider implements IVMProvider
public ModelProxy createModelProxy(Object element, IPresentationContext context) {
/*
* Model proxy is the object that correlates events from the data model
- * into view model deltas that the view can process. We only need to
- * create a proxy for the root element of the tree.
+ * into view model deltas that the view can process. This method is called
+ * by the viewer when a new input object is set to the view. We need to create
+ * a new instance of the ModelProxy object with every call, because the viewer
+ * disposes the old proxy before calling this method.
*/
- if (getRootLayoutNode() != null &&
- element.equals(getRootLayoutNode().getRootObject()))
- {
- synchronized(this) {
- fModelProxy = new ModelProxy();
- }
- return fModelProxy;
- }
- return null;
+ synchronized(this) {
+ fRootElement = element;
+ fModelProxy = new ModelProxy();
+ }
+ return fModelProxy;
}
/**
@@ -456,7 +473,7 @@ abstract public class AbstractVMProvider implements IVMProvider
if (rootLayoutNode == null) {
return null;
}
- else if (element.equals(rootLayoutNode.getRootObject())) {
+ else if (element.equals(getRootElement())) {
return rootLayoutNode;
}
else if (element instanceof IVMContext){
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 85d5e3abadd..6c82f654f10 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
@@ -4,6 +4,7 @@ import org.eclipse.dd.dsf.concurrent.ThreadSafe;
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.IModelProxyFactory;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
/**
* The View Model adapter handles the layout of a given data model within a
@@ -16,4 +17,9 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactor
public interface IVMAdapter
extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory
{
+ /**
+ * Returns the View Model Provider that is registered for the given presentation
+ * context. Returns null
if there is none.
+ */
+ public IVMProvider getVMProvider(IPresentationContext presentationContext);
}
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 8228dea5a4d..1e96b5b81ee 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
@@ -22,6 +22,15 @@ public interface IVMProvider
*/
public IVMRootLayoutNode getRootLayoutNode();
+ /**
+ * Returns the root element of the view model. If the given view model is
+ * used to populate the entire contents of the view, then this is the input
+ * element for the viewer. If the view model is used to populate only a
+ * sub-tree section of the view, then this is the root element of that
+ * sub-tree.
+ */
+ public Object getRootElement();
+
/**
* Returns the presentation context of the viewer that this provider
* is configured for.
@@ -32,4 +41,5 @@ public interface IVMProvider
* Cleans up the resources associated with this provider.
*/
public void dispose();
+
}
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMRootLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMRootLayoutNode.java
index 34398603e7a..019b577ba32 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMRootLayoutNode.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMRootLayoutNode.java
@@ -21,14 +21,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
@SuppressWarnings("restriction")
public interface IVMRootLayoutNode extends IVMLayoutNode{
- /**
- * Returns the single element of this node. Root layout node can only have
- * one element, and this is a convenience method to access this element.
- * Alternatively getElements() could be used.
- * @return
- */
- public Object getRootObject();
-
/**
* Version of the {@link IVMLayoutNode#buildDelta(Object, ViewModelDelta, org.eclipse.dd.dsf.concurrent.RequestMonitor)}
* method, which creates and returns the root node of the delta. It does
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMRootLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMRootLayoutNode.java
similarity index 75%
rename from plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMRootLayoutNode.java
rename to plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMRootLayoutNode.java
index a7dfdc82e33..bfc29baab47 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMRootLayoutNode.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/VMRootLayoutNode.java
@@ -21,28 +21,29 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
/**
- *
+ * Default implementation of a root layout node. This class may be sub-classed
+ * to implement model-specific event handling.
*/
@SuppressWarnings("restriction")
-abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode implements IVMRootLayoutNode {
+public class VMRootLayoutNode extends AbstractVMLayoutNode implements IVMRootLayoutNode {
- public AbstractVMRootLayoutNode(AbstractVMProvider provider) {
+ public VMRootLayoutNode(AbstractVMProvider provider) {
super(provider);
}
/**
- * This implementation only fulfils the requirements of the super-interface.
+ * This implementation only fulfills the requirements of the super-interface.
* There is no use case for a root node implementing this method, but its
- * easier to just impelemnt it for sake of uniformity of model.
+ * easier to just implement it for sake of uniformity of model.
*/
public void updateElements(IChildrenUpdate update) {
// Ignore startIdx, endIdx, since there's only one element to be had.
- update.setChild(getRootObject(), 0);
+ update.setChild(getVMProvider().getRootElement(), 0);
update.done();
}
/**
- * This implementation only fulfils the requirements of the super-interface.
+ * This implementation only fulfills the requirements of the super-interface.
* There is no use case for a root node implementing this method, but its
* easier to just impelemnt it for sake of uniformity of model.
*/
@@ -52,9 +53,9 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
}
/**
- * This implementation only fulfils the requirements of the super-interface.
+ * This implementation only fulfills the requirements of the super-interface.
* There is no use case for a root node implementing this method, but its
- * easier to just impelemnt it for sake of uniformity of model.
+ * easier to just implement it for sake of uniformity of model.
*/
public void updateHasElements(IHasChildrenUpdate[] updates) {
for (IHasChildrenUpdate update : updates) {
@@ -64,9 +65,9 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
}
/**
- * This implementation only fulfils the requirements of the super-interface.
+ * This implementation only fulfills the requirements of the super-interface.
* There is no use case for a root node implementing this method, but its
- * easier to just impelemnt it for sake of uniformity of model.
+ * easier to just implement it for sake of uniformity of model.
*/
public void updateLabel(@SuppressWarnings("unused")
IVMContext vmc, ILabelUpdate update) {
@@ -82,7 +83,7 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
assert childNodeDeltas.size() != 0 : "Caller should make sure that there are deltas for given event."; //$NON-NLS-1$
// Always create the rootDelta, no matter what delta flags the child nodes have.
- final VMDelta rootDelta = new VMDelta(getRootObject(), IModelDelta.NO_CHANGE);
+ final VMDelta rootDelta = new VMDelta(getVMProvider().getRootElement(), IModelDelta.NO_CHANGE);
callChildNodesToBuildDelta(
childNodeDeltas, rootDelta, event,
@@ -99,4 +100,8 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
}
});
}
+
+ public Object getRootObject() {
+ return getVMProvider().getRootElement();
+ }
}
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 49629e6f888..9e591523af9 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
@@ -534,7 +534,7 @@ abstract public class AbstractDMVMLayoutNode extends Abstract
}
// Search the root object of the layout hierarchy.
if (retVal == null) {
- Object inputObject = getVMProvider().getRootLayoutNode().getRootObject();
+ Object inputObject = getVMProvider().getRootElement();
if (inputObject instanceof ITreeSelection) {
ITreeSelection inputSelection = (ITreeSelection)inputObject;
if (inputSelection.getPaths().length == 1) {
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMProviderWithCache.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMProviderWithCache.java
index 058ac9b90bb..79ff2ff8a05 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMProviderWithCache.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/AbstractDMVMProviderWithCache.java
@@ -34,7 +34,7 @@ public abstract class AbstractDMVMProviderWithCache extends AbstractDMVMProvider
public void cacheFlushed(Object context) {
if(getPresentationContext().equals(context))
- getModelProxy().fireModelChanged(new ModelDelta(this.getRootLayoutNode().getRootObject(),IModelDelta.CONTENT));
+ getModelProxy().fireModelChanged(new ModelDelta(getRootElement(),IModelDelta.CONTENT));
}
public AbstractDMVMProviderWithCache(AbstractVMAdapter adapter, IPresentationContext presentationContext, DsfSession session) {
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/DebugViewSelectionRootLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/DMVMRootLayoutNode.java
similarity index 69%
rename from plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/DebugViewSelectionRootLayoutNode.java
rename to plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/DMVMRootLayoutNode.java
index 0128ffaad5e..b2955c2a6cb 100644
--- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/DebugViewSelectionRootLayoutNode.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/dm/DMVMRootLayoutNode.java
@@ -8,21 +8,16 @@
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
-package org.eclipse.dd.dsf.debug.ui.viewmodel;
+package org.eclipse.dd.dsf.ui.viewmodel.dm;
import org.eclipse.dd.dsf.datamodel.DMContexts;
import org.eclipse.dd.dsf.datamodel.IDMContext;
import org.eclipse.dd.dsf.datamodel.IDMEvent;
-import org.eclipse.dd.dsf.debug.ui.DsfDebugUIPlugin;
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider;
-import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMRootLayoutNode;
+import org.eclipse.dd.dsf.ui.viewmodel.VMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMLayoutNode.DMVMContext;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
-import org.eclipse.debug.ui.DebugUITools;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.IWorkbenchWindow;
/**
* This is is a standard root node which listens to the selection in Debug View.
@@ -36,13 +31,11 @@ import org.eclipse.ui.IWorkbenchWindow;
* whole selection.
*/
@SuppressWarnings("restriction")
-public class DebugViewSelectionRootLayoutNode extends AbstractVMRootLayoutNode
+public class DMVMRootLayoutNode extends VMRootLayoutNode
implements IVMRootLayoutNode
{
- private final IWorkbenchWindow fWindow;
- public DebugViewSelectionRootLayoutNode(AbstractVMProvider provider) {
+ public DMVMRootLayoutNode(AbstractVMProvider provider) {
super(provider);
- fWindow = DsfDebugUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
}
/**
@@ -91,33 +84,14 @@ public class DebugViewSelectionRootLayoutNode extends AbstractVMRootLayoutNode
return super.getDeltaFlags(event);
}
- /**
- * Returns the full selection as it came from the DebugContextManager.
- * @return
- */
- public ISelection getSelection() {
- return DebugUITools.getDebugContextManager().getContextService(fWindow).getActiveContext();
- }
-
- public Object getRootObject() {
- ISelection selection = getSelection();
- if (selection instanceof IStructuredSelection) {
- return ((IStructuredSelection)selection).getFirstElement();
- }
- return null;
- }
-
private IDMContext> getSelectedDMC() {
- Object selection = getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structSelection = (IStructuredSelection)selection;
- if (structSelection.getFirstElement() instanceof DMVMContext)
- {
- // Correct cast: (AbstractDMVMLayoutNode>.DMVMContext) breaks the javac compiler
- @SuppressWarnings("unchecked")
- DMVMContext vmc = (DMVMContext)structSelection.getFirstElement();
- return vmc.getDMC();
- }
+ Object rootObject = getVMProvider().getRootElement();
+ if (rootObject instanceof DMVMContext)
+ {
+ // Correct cast: (AbstractDMVMLayoutNode>.DMVMContext) breaks the javac compiler
+ @SuppressWarnings("unchecked")
+ DMVMContext vmc = (DMVMContext)rootObject;
+ return vmc.getDMC();
}
return null;
}