From 66b4cc775043814cc6d28c4fb7786c4066e55b84 Mon Sep 17 00:00:00 2001 From: Martin Oberhuber < martin.oberhuber@windriver.com> Date: Tue, 18 Jul 2006 10:34:07 +0000 Subject: [PATCH] Automatically expand Daytime subsystem on connect --- .../DaytimeConnectorService.java | 1 - .../daytime/subsystems/DaytimeSubSystem.java | 39 +++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java index 6f91a48edbf..3cf02a2402e 100644 --- a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java +++ b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java @@ -22,7 +22,6 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.osgi.util.NLS; import org.eclipse.rse.core.subsystems.AbstractConnectorService; -import org.eclipse.rse.core.subsystems.CommunicationsEvent; import org.eclipse.rse.examples.daytime.DaytimeResources; import org.eclipse.rse.examples.daytime.service.DaytimeService; import org.eclipse.rse.examples.daytime.service.IDaytimeService; diff --git a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/subsystems/DaytimeSubSystem.java b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/subsystems/DaytimeSubSystem.java index 43e9206f455..3e3a7bd2ea2 100644 --- a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/subsystems/DaytimeSubSystem.java +++ b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/subsystems/DaytimeSubSystem.java @@ -12,6 +12,7 @@ package org.eclipse.rse.examples.daytime.subsystems; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.swt.widgets.Display; import org.eclipse.rse.core.subsystems.IConnectorService; import org.eclipse.rse.core.subsystems.SubSystem; @@ -19,7 +20,10 @@ import org.eclipse.rse.examples.daytime.model.DaytimeResource; import org.eclipse.rse.examples.daytime.service.IDaytimeService; import org.eclipse.rse.model.IHost; import org.eclipse.rse.model.ISystemMessageObject; +import org.eclipse.rse.model.ISystemRegistry; +import org.eclipse.rse.model.ISystemResourceChangeEvents; import org.eclipse.rse.model.SystemMessageObject; +import org.eclipse.rse.model.SystemResourceChangeEvent; import org.eclipse.rse.services.clientserver.messages.SystemMessage; import org.eclipse.rse.ui.ISystemMessages; import org.eclipse.rse.ui.RSEUIPlugin; @@ -38,7 +42,16 @@ public class DaytimeSubSystem extends SubSystem { } public void initializeSubSystem(IProgressMonitor monitor) { - // nothing to do + //This is called after connect - expand the daytime node. + //May be called in worker thread. + //TODO find a more elegant solution for expanding the item, e.g. use implicit connect like filters + final ISystemRegistry sr = RSEUIPlugin.getTheSystemRegistry(); + final SystemResourceChangeEvent event = new SystemResourceChangeEvent(this, ISystemResourceChangeEvents.EVENT_SELECT_EXPAND, null); + //TODO bug 150919: postEvent() should not be necessary asynchronously + //sr.postEvent(event); + Display.getDefault().asyncExec(new Runnable() { + public void run() { sr.postEvent(event); } + }); } public boolean hasChildren() { @@ -50,16 +63,20 @@ public class DaytimeSubSystem extends SubSystem { } public Object[] getChildren() { - try { - String daytime = fDaytimeService.getTimeOfDay(); - DaytimeResource node = new DaytimeResource(this); - node.setDaytime(daytime); - return new Object[] { node }; - } catch(Exception e) { - SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_CONNECT_FAILED); - msg.makeSubstitution(getHostName(), e); - SystemMessageObject msgobj = new SystemMessageObject(msg, ISystemMessageObject.MSGTYPE_ERROR,this); - return new Object[] { msgobj }; + if (isConnected()) { + try { + String daytime = fDaytimeService.getTimeOfDay(); + DaytimeResource node = new DaytimeResource(this); + node.setDaytime(daytime); + return new Object[] { node }; + } catch(Exception e) { + SystemMessage msg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_CONNECT_FAILED); + msg.makeSubstitution(getHostName(), e); + SystemMessageObject msgobj = new SystemMessageObject(msg, ISystemMessageObject.MSGTYPE_ERROR,this); + return new Object[] { msgobj }; + } + } else { + return new Object[0]; } }