diff options
author | Tobias Schwarz | 2014-01-10 11:31:56 +0000 |
---|---|---|
committer | Tobias Schwarz | 2014-01-10 11:31:56 +0000 |
commit | 011db9ec2da8a73801b3ec18122e34d17aa893c3 (patch) | |
tree | 56e949587504b9a023ba69a35c3a95da74b38779 | |
parent | 23f6541af12a8ce0dedd23932e4f48fd9c202477 (diff) | |
download | org.eclipse.tcf-011db9ec2da8a73801b3ec18122e34d17aa893c3.tar.gz org.eclipse.tcf-011db9ec2da8a73801b3ec18122e34d17aa893c3.tar.xz org.eclipse.tcf-011db9ec2da8a73801b3ec18122e34d17aa893c3.zip |
Target Explorer: fix processes editor tab refresh
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... |