Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Schwarz2014-01-10 11:31:56 +0000
committerTobias Schwarz2014-01-10 11:31:56 +0000
commit011db9ec2da8a73801b3ec18122e34d17aa893c3 (patch)
tree56e949587504b9a023ba69a35c3a95da74b38779
parent23f6541af12a8ce0dedd23932e4f48fd9c202477 (diff)
downloadorg.eclipse.tcf-011db9ec2da8a73801b3ec18122e34d17aa893c3.tar.gz
org.eclipse.tcf-011db9ec2da8a73801b3ec18122e34d17aa893c3.tar.xz
org.eclipse.tcf-011db9ec2da8a73801b3ec18122e34d17aa893c3.zip
Target Explorer: fix processes editor tab refresh
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.runtime.model/src/org/eclipse/tcf/te/runtime/model/ContainerModelNode.java7
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/runtime/RuntimeModel.java29
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEventListener.java29
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/ContentProvider.java26
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.properties2
8 files changed, 94 insertions, 5 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.runtime.model/src/org/eclipse/tcf/te/runtime/model/ContainerModelNode.java b/target_explorer/plugins/org.eclipse.tcf.te.runtime.model/src/org/eclipse/tcf/te/runtime/model/ContainerModelNode.java
index 510225757..abf30e38b 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.runtime.model/src/org/eclipse/tcf/te/runtime/model/ContainerModelNode.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.runtime.model/src/org/eclipse/tcf/te/runtime/model/ContainerModelNode.java
@@ -185,10 +185,11 @@ public class ContainerModelNode extends ModelNode implements IContainerModelNode
boolean removed = false;
boolean changed = setChangeEventsEnabled(false);
+ IModelNode[] children = null;
try {
childListLock.lock();
- IModelNode[] children = internalGetChildren();
+ children = internalGetChildren();
for (IModelNode element : children) {
removed |= remove(element, true);
}
@@ -198,6 +199,10 @@ public class ContainerModelNode extends ModelNode implements IContainerModelNode
if (changed) setChangeEventsEnabled(true);
+ if (removed) {
+ fireChangeEvent(NOTIFY_REMOVED, children, null);
+ }
+
return removed;
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/runtime/RuntimeModel.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/runtime/RuntimeModel.java
index 71b0a950e..59da8a2ed 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/runtime/RuntimeModel.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.core/src/org/eclipse/tcf/te/tcf/processes/core/model/runtime/RuntimeModel.java
@@ -9,14 +9,19 @@
*******************************************************************************/
package org.eclipse.tcf.te.tcf.processes.core.model.runtime;
+import java.util.EventObject;
import java.util.Timer;
import java.util.TimerTask;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.tcf.protocol.Protocol;
+import org.eclipse.tcf.te.core.interfaces.IConnectable;
import org.eclipse.tcf.te.core.interfaces.IFilterable;
import org.eclipse.tcf.te.runtime.callback.Callback;
+import org.eclipse.tcf.te.runtime.events.ChangeEvent;
+import org.eclipse.tcf.te.runtime.events.EventManager;
+import org.eclipse.tcf.te.runtime.interfaces.events.IEventListener;
import org.eclipse.tcf.te.runtime.model.ContainerModelNode;
import org.eclipse.tcf.te.runtime.model.contexts.AsyncRefreshableCtxAdapter;
import org.eclipse.tcf.te.runtime.model.factory.Factory;
@@ -30,6 +35,7 @@ import org.eclipse.tcf.te.tcf.core.model.interfaces.services.IModelRefreshServic
import org.eclipse.tcf.te.tcf.core.model.interfaces.services.IModelService;
import org.eclipse.tcf.te.tcf.core.model.interfaces.services.IModelUpdateService;
import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNodeProperties;
import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModel;
import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModelLookupService;
import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModelRefreshService;
@@ -70,6 +76,8 @@ public final class RuntimeModel extends ContainerModelNode implements IRuntimeMo
// The auto-refresh timer
/* default */ Timer timer = null;
+ private IEventListener listener = null;
+
/**
* Constructor.
*
@@ -85,6 +93,23 @@ public final class RuntimeModel extends ContainerModelNode implements IRuntimeMo
Assert.isNotNull(peerNode);
this.peerNode = peerNode;
+ if (listener == null) {
+ listener = new IEventListener() {
+ @Override
+ public void eventFired(EventObject event) {
+ if (event instanceof ChangeEvent) {
+ ChangeEvent changeEvent = (ChangeEvent)event;
+ if (IPeerNodeProperties.PROP_CONNECT_STATE.equals(changeEvent.getEventId())) {
+ if (!changeEvent.getNewValue().equals(new Integer(IConnectable.STATE_CONNECTED))) {
+ clear();
+ }
+ }
+ }
+ }
+ };
+ EventManager.getInstance().addEventListener(listener, ChangeEvent.class);
+ }
+
// No initial context query required
refreshableCtxAdapter.setQueryState(QueryType.CONTEXT, QueryState.DONE);
}
@@ -105,6 +130,10 @@ public final class RuntimeModel extends ContainerModelNode implements IRuntimeMo
Assert.isTrue(checkThreadAccess(), "Illegal Thread Access"); //$NON-NLS-1$
disposed = true;
+ if (listener != null) {
+ EventManager.getInstance().removeEventListener(listener);
+ }
+
// Close the active channel (if any)
channelService.closeChannel();
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEventListener.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEventListener.java
index 2fb043fa8..759f1b9e1 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEventListener.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/ProcessMonitorEventListener.java
@@ -12,10 +12,17 @@ package org.eclipse.tcf.te.tcf.processes.ui.editor;
import java.util.EventObject;
import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.tcf.protocol.Protocol;
+import org.eclipse.tcf.te.core.interfaces.IConnectable;
import org.eclipse.tcf.te.runtime.events.ChangeEvent;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNodeProperties;
+import org.eclipse.tcf.te.tcf.processes.core.model.ModelManager;
import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.IProcessContextNode;
import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModel;
+import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModelRefreshService;
import org.eclipse.tcf.te.ui.events.AbstractEventListener;
import org.eclipse.tcf.te.ui.trees.TreeControl;
@@ -62,7 +69,29 @@ public class ProcessMonitorEventListener extends AbstractEventListener {
((TreeViewer)treeControl.getViewer()).refresh(source, true);
}
}
+
+ else if (source instanceof IPeerNode && source == getPeerNode()) {
+ if (IPeerNodeProperties.PROP_CONNECT_STATE.equals(changeEvent.getEventId()) &&
+ changeEvent.getNewValue().equals(new Integer(IConnectable.STATE_CONNECTED))) {
+ Protocol.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ ModelManager.getRuntimeModel(getPeerNode()).getService(IRuntimeModelRefreshService.class).refresh(null);
+ }
+ });
+ }
+ }
}
}
}
+
+ protected IPeerNode getPeerNode() {
+ Object element = treeControl.getViewer().getInput();
+ IPeerNode peerNode = element instanceof IPeerNode ? (IPeerNode)element : null;
+ if (peerNode == null && element instanceof IAdaptable) {
+ peerNode = (IPeerNode)((IAdaptable)element).getAdapter(IPeerNode.class);
+ }
+ return peerNode;
+ }
+
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/ContentProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/ContentProvider.java
index c579540df..5a63a9634 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/ContentProvider.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/ContentProvider.java
@@ -9,10 +9,15 @@
*******************************************************************************/
package org.eclipse.tcf.te.tcf.processes.ui.editor.tree;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.tcf.te.core.interfaces.IConnectable;
+import org.eclipse.tcf.te.runtime.model.MessageModelNode;
import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode;
import org.eclipse.tcf.te.tcf.processes.core.model.ModelManager;
import org.eclipse.tcf.te.tcf.processes.core.model.interfaces.runtime.IRuntimeModel;
+import org.eclipse.tcf.te.tcf.processes.ui.nls.Messages;
/**
* Process tree control content provider implementation.
@@ -41,9 +46,26 @@ public class ContentProvider extends org.eclipse.tcf.te.tcf.processes.ui.navigat
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
super.inputChanged(viewer, oldInput, newInput);
- if (newInput instanceof IPeerNode) {
- peerNode = (IPeerNode) newInput;
+ peerNode = getPeerNode(newInput);
+ }
+
+ protected IPeerNode getPeerNode(Object input) {
+ IPeerNode peerNode = input instanceof IPeerNode ? (IPeerNode)input : null;
+ if (peerNode == null && input instanceof IAdaptable) {
+ peerNode = (IPeerNode)((IAdaptable)input).getAdapter(IPeerNode.class);
+ }
+ return peerNode;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.tcf.te.tcf.processes.ui.navigator.runtime.ContentProvider#getChildren(java.lang.Object)
+ */
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if (peerNode != null && peerNode.getConnectState() == IConnectable.STATE_CONNECTED) {
+ return super.getChildren(parentElement);
}
+ return new Object[]{new MessageModelNode(Messages.ContentProvider_notConnected, IStatus.INFO, false)};
}
/* (non-Javadoc)
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java
index c1a12491e..ca5b51318 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PIDLabelProvider.java
@@ -63,6 +63,6 @@ public class PIDLabelProvider extends AbstractLabelProviderDelegate {
return newId != null ? newId : id;
}
- return super.getText(element);
+ return ""; //$NON-NLS-1$
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java
index 2cb8a8769..b886c64be 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/editor/tree/columns/PPIDLabelProvider.java
@@ -61,6 +61,6 @@ public class PPIDLabelProvider extends AbstractLabelProviderDelegate {
return newId != null ? newId : id;
}
- return super.getText(element);
+ return ""; //$NON-NLS-1$
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java
index c1467fba8..3b82fb12c 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.java
@@ -57,6 +57,8 @@ public class Messages extends NLS {
public static String ProcessLabelProvider_NullNameNodeLabel;
+ public static String ContentProvider_notConnected;
+
public static String ProcessPreferencePage_BiggerThanZero;
public static String ProcessPreferencePage_DefineMoreThanOne;
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.properties
index 9a4e7d230..43ba0a10d 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.processes.ui/src/org/eclipse/tcf/te/tcf/processes/ui/nls/Messages.properties
@@ -12,6 +12,8 @@ PossibleCause=Possible Cause:\n{0}
ProcessLabelProvider_NullNameNodeLabel=System
+ContentProvider_notConnected=Please connect to see processes on the target.
+
ProcessPreferencePage_BiggerThanZero=The number must be bigger than zero\!
ProcessPreferencePage_DefineMoreThanOne=Please define at least one grade of speed\!
ProcessPreferencePage_EditButtonLabel=&Edit...

Back to the top