Author: rob.stryker(a)jboss.com
Date: 2011-06-27 05:48:30 -0400 (Mon, 27 Jun 2011)
New Revision: 32371
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/JBASConsoleWriter.java
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEHostShellModel.java
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/META-INF/MANIFEST.MF
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/RSEUIPlugin.java
Log:
JBIDE-8421 - initial implementation of adding console connection for RSE servers
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEHostShellModel.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEHostShellModel.java 2011-06-27
09:45:56 UTC (rev 32370)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.core/src/org/jboss/ide/eclipse/as/rse/core/RSEHostShellModel.java 2011-06-27
09:48:30 UTC (rev 32371)
@@ -11,7 +11,9 @@
******************************************************************************/
package org.jboss.ide.eclipse.as.rse.core;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -22,7 +24,10 @@
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
+import org.eclipse.rse.services.shells.IHostOutput;
import org.eclipse.rse.services.shells.IHostShell;
+import org.eclipse.rse.services.shells.IHostShellChangeEvent;
+import org.eclipse.rse.services.shells.IHostShellOutputListener;
import org.eclipse.rse.services.shells.IShellService;
import
org.eclipse.rse.subsystems.shells.core.subsystems.servicesubsystem.IShellServiceSubSystem;
import org.eclipse.wst.server.core.IServer;
@@ -39,13 +44,24 @@
return instance;
}
-
private HashMap<String, ServerShellModel> map =
new HashMap<String, ServerShellModel>();
RSEHostShellModel() {
}
+ public interface IJBASHostShellListener {
+ public void writeToShell(String serverId, String[] lines);
+ }
+
+ private ArrayList<IJBASHostShellListener> listeners = new
ArrayList<IJBASHostShellListener>();
+ public void addHostShellListener(IJBASHostShellListener listener) {
+ listeners.add(listener);
+ }
+ public void removeHostShellListener(IJBASHostShellListener listener) {
+ listeners.remove(listener);
+ }
+
public ServerShellModel getModel(IServer server) {
if( map.get(server.getId()) == null ) {
map.put(server.getId(), new ServerShellModel(server.getId()));
@@ -57,6 +73,7 @@
private String serverId;
private IHostShell startupShell;
private IHostShell singleUseShell;
+ private IHostShellOutputListener listener;
public ServerShellModel(String id) {
this.serverId = id;
}
@@ -79,7 +96,24 @@
try {
IHostShell hs = service.runCommand(initialWorkingDirectory,
command, environment, monitor);
+ hs.getStandardOutputReader().addOutputListener(new IHostShellOutputListener( ) {
+ public void shellOutputChanged(IHostShellChangeEvent event) {
+ System.out.println(event.getLines().length);
+ System.out.println(event.getLines());
+ }
+ });
+ listener = new IHostShellOutputListener() {
+ public void shellOutputChanged(IHostShellChangeEvent event) {
+ IHostOutput[] lines = event.getLines();
+ String[] lines2 = new String[lines.length];
+ for(int i = 0; i < lines.length; i++ ) {
+ lines2[i] = lines[i].getString();
+ }
+ writeToConsole(lines2);
+ }
+ };
startupShell = hs;
+ startupShell.addOutputListener(listener);
return hs;
} catch(RuntimeException re) {
throw new CoreException(new Status(IStatus.ERROR,
org.jboss.ide.eclipse.as.rse.core.RSECorePlugin.PLUGIN_ID,
@@ -87,6 +121,12 @@
}
}
+ protected void writeToConsole(String[] lines) {
+ Iterator<IJBASHostShellListener> i =
RSEHostShellModel.getInstance().listeners.iterator();
+ while(i.hasNext())
+ i.next().writeToShell(serverId, lines);
+ }
+
public void executeRemoteCommand(
String initialWorkingDirectory, String command,
String[] environment, IProgressMonitor monitor)
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/META-INF/MANIFEST.MF 2011-06-27
09:45:56 UTC (rev 32370)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/META-INF/MANIFEST.MF 2011-06-27
09:48:30 UTC (rev 32371)
@@ -31,7 +31,8 @@
org.eclipse.rse.subsystems.shells.dstore;bundle-version="2.1.300",
org.eclipse.rse.subsystems.shells.local;bundle-version="2.1.300",
org.eclipse.rse.subsystems.shells.ssh;bundle-version="2.1.300",
- org.eclipse.rse.subsystems.shells.telnet;bundle-version="1.2.200"
+ org.eclipse.rse.subsystems.shells.telnet;bundle-version="1.2.200",
+ org.eclipse.ui.console;bundle-version="3.5.100"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Localization: plugin
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/JBASConsoleWriter.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/JBASConsoleWriter.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/JBASConsoleWriter.java 2011-06-27
09:48:30 UTC (rev 32371)
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.ide.eclipse.as.rse.ui;
+
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleManager;
+import org.eclipse.ui.console.MessageConsole;
+import org.eclipse.ui.console.MessageConsoleStream;
+import org.jboss.ide.eclipse.as.rse.core.RSEHostShellModel.IJBASHostShellListener;
+
+public class JBASConsoleWriter implements IJBASHostShellListener {
+ public void writeToShell(String serverId, String[] lines) {
+ MessageConsole myConsole = findConsole(serverId);
+ MessageConsoleStream out = myConsole.newMessageStream();
+ for( int i = 0; i < lines.length; i++ )
+ out.println(lines[i]);
+ }
+
+ private MessageConsole findConsole(String name) {
+ ConsolePlugin plugin = ConsolePlugin.getDefault();
+ IConsoleManager conMan = plugin.getConsoleManager();
+ IConsole[] existing = conMan.getConsoles();
+ for (int i = 0; i < existing.length; i++)
+ if (name.equals(existing[i].getName()))
+ return (MessageConsole) existing[i];
+ //no console found, so create a new one
+ MessageConsole myConsole = new MessageConsole(name, null);
+ conMan.addConsoles(new IConsole[]{myConsole});
+ return myConsole;
+ }
+
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/RSEUIPlugin.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/RSEUIPlugin.java 2011-06-27
09:45:56 UTC (rev 32370)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.rse.ui/src/org/jboss/ide/eclipse/as/rse/ui/RSEUIPlugin.java 2011-06-27
09:48:30 UTC (rev 32371)
@@ -1,5 +1,6 @@
package org.jboss.ide.eclipse.as.rse.ui;
+import org.jboss.ide.eclipse.as.rse.core.RSEHostShellModel;
import org.jboss.ide.eclipse.as.rse.core.RSEPublishMethod;
import org.jboss.ide.eclipse.as.ui.editor.DeploymentModuleOptionCompositeAssistant;
import org.jboss.ide.eclipse.as.ui.launch.JBoss7LaunchConfigurationTabGroup;
@@ -10,7 +11,8 @@
public class RSEUIPlugin implements BundleActivator {
private static BundleContext context;
-
+ private JBASConsoleWriter consoleWriter;
+
static BundleContext getContext() {
return context;
}
@@ -24,6 +26,8 @@
DeploymentModuleOptionCompositeAssistant.addMapping(RSEPublishMethod.RSE_ID, new
RSEDeploymentPageCallback());
JBossLaunchConfigurationTabGroup.addTabProvider(new RSELaunchTabProvider());
JBoss7LaunchConfigurationTabGroup.addTabProvider(new RSELaunchTabProvider());
+ consoleWriter = new JBASConsoleWriter();
+ RSEHostShellModel.getInstance().addHostShellListener(consoleWriter);
}
/*
@@ -32,6 +36,7 @@
*/
public void stop(BundleContext bundleContext) throws Exception {
RSEUIPlugin.context = null;
+ RSEHostShellModel.getInstance().removeHostShellListener(consoleWriter);
}
}