Author: koen.aers(a)jboss.com
Date: 2011-07-18 07:00:38 -0400 (Mon, 18 Jul 2011)
New Revision: 33004
Added:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputStream.java
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputListener.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeInputReadJob.java
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputStreamTest.java
Removed:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ConsoleInputStream.java
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputReadJob.java
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputReadJobTest.java
Modified:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntime.java
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeRuntime.java
trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartition.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartitioner.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/Console.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsolePage.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsoleViewer.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ConsoleView.java
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntimeTest.java
Log:
encapsulate the input and output streams of the forge runtime
Deleted:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ConsoleInputStream.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ConsoleInputStream.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ConsoleInputStream.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -1,66 +0,0 @@
-package org.jboss.tools.forge.core.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-public class ConsoleInputStream extends InputStream {
-
- private byte[] input = new byte[0];
- private int outPointer = 0;
- private int size = 0;
- private boolean eofSent = false;
- private boolean closed = false;
-
- public synchronized int read() throws IOException {
- waitForData();
- if (available() == -1) {
- return -1;
- }
-
- byte b = input[outPointer];
- outPointer++;
- if (outPointer == input.length) {
- outPointer = 0;
- }
- size -= 1;
- return b;
- }
-
- private void waitForData() {
- while (size == 0 && !closed) {
- try {
- wait();
- } catch (InterruptedException e) {}
- }
- }
-
- public synchronized void appendData(String text) {
- input = text.getBytes();
- size = text.length();
- outPointer = 0;
- notifyAll();
- }
-
- public int available() throws IOException {
- if (closed && eofSent) {
- throw new IOException("Input Stream Closed");
- } else if (size == 0) {
- if (!eofSent) {
- eofSent = true;
- return -1;
- }
- throw new IOException("Input Stream Closed");
- }
-
- return size;
- }
-
- public synchronized void close() throws IOException {
- if(closed) {
- throw new IOException("Input Stream Closed");
- }
- closed = true;
- notifyAll();
- }
-
-}
Deleted:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputReadJob.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputReadJob.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputReadJob.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -1,36 +0,0 @@
-package org.jboss.tools.forge.core.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.model.IStreamsProxy;
-import org.jboss.tools.forge.core.ForgeCorePlugin;
-
-public class ForgeInputReadJob extends Job {
-
- private IStreamsProxy streamsProxy;
- private InputStream input;
-
- public ForgeInputReadJob(IStreamsProxy streamsProxy, InputStream input) {
- super("Forge Input Read Job");
- this.input = input;
- this.streamsProxy = streamsProxy;
- }
-
- protected IStatus run(IProgressMonitor monitor) {
- try {
- int read;
- while (input != null && (read = input.read()) != -1) {
- streamsProxy.write(new String(new char[] { (char)read }));
- }
- } catch (IOException e) {
- ForgeCorePlugin.log(e);
- }
- return Status.OK_STATUS;
- }
-
-}
Copied:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputStream.java
(from rev 32710,
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ConsoleInputStream.java)
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputStream.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeInputStream.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -0,0 +1,66 @@
+package org.jboss.tools.forge.core.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+public class ForgeInputStream extends InputStream {
+
+ private byte[] input = new byte[0];
+ private int outPointer = 0;
+ private int size = 0;
+ private boolean eofSent = false;
+ private boolean closed = false;
+
+ public synchronized int read() throws IOException {
+ waitForData();
+ if (available() == -1) {
+ return -1;
+ }
+
+ byte b = input[outPointer];
+ outPointer++;
+ if (outPointer == input.length) {
+ outPointer = 0;
+ }
+ size -= 1;
+ return b;
+ }
+
+ private void waitForData() {
+ while (size == 0 && !closed) {
+ try {
+ wait();
+ } catch (InterruptedException e) {}
+ }
+ }
+
+ public synchronized void appendData(String text) {
+ input = text.getBytes();
+ size = text.length();
+ outPointer = 0;
+ notifyAll();
+ }
+
+ public int available() throws IOException {
+ if (closed && eofSent) {
+ throw new IOException("Input Stream Closed");
+ } else if (size == 0) {
+ if (!eofSent) {
+ eofSent = true;
+ return -1;
+ }
+ throw new IOException("Input Stream Closed");
+ }
+
+ return size;
+ }
+
+ public synchronized void close() throws IOException {
+ if(closed) {
+ throw new IOException("Input Stream Closed");
+ }
+ closed = true;
+ notifyAll();
+ }
+
+}
Added:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputListener.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputListener.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputListener.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -0,0 +1,7 @@
+package org.jboss.tools.forge.core.io;
+
+public interface ForgeOutputListener {
+
+ void outputAvailable(String output);
+
+}
Modified:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntime.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntime.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntime.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -2,6 +2,9 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
@@ -14,15 +17,18 @@
import org.eclipse.debug.core.model.IStreamMonitor;
import org.eclipse.debug.core.model.IStreamsProxy;
import org.jboss.tools.forge.core.ForgeCorePlugin;
+import org.jboss.tools.forge.core.io.ForgeOutputListener;
public abstract class ForgeAbstractRuntime implements ForgeRuntime {
private IProcess process = null;
- private String state = STATE_NOT_RUNNING;
- private final TerminateListener terminateListener = new TerminateListener();
-
+ private String state = STATE_NOT_RUNNING;
+ private final TerminateListener terminateListener = new TerminateListener();
+ private MasterOutputListener masterOutputListener = new MasterOutputListener();
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
+ private List<ForgeOutputListener> outputListeners = new
ArrayList<ForgeOutputListener>();
+
public IProcess getProcess() {
return process;
}
@@ -32,17 +38,26 @@
}
public void start(IProgressMonitor progressMonitor) {
- IStreamListener streamListener = null;
+ IStreamListener startupListener = null;
if (progressMonitor == null) {
progressMonitor = new NullProgressMonitor();
}
try {
progressMonitor.beginTask("Starting Forge", IProgressMonitor.UNKNOWN);
- streamListener = new StartupListener();
+ startupListener = new StartupListener();
process = ForgeLaunchHelper.launch(getName(), getLocation());
- setNewState(STATE_STARTING);
- DebugPlugin.getDefault().addDebugEventListener(terminateListener);
- process.getStreamsProxy().getOutputStreamMonitor().addListener(streamListener);
+ if (process != null) {
+ setNewState(STATE_STARTING);
+ DebugPlugin.getDefault().addDebugEventListener(terminateListener);
+ IStreamsProxy streamsProxy = process.getStreamsProxy();
+ if (streamsProxy != null) {
+ IStreamMonitor streamMonitor = streamsProxy.getOutputStreamMonitor();
+ if (streamMonitor != null) {
+ streamMonitor.addListener(startupListener);
+ streamMonitor.addListener(masterOutputListener);
+ }
+ }
+ }
progressMonitor.worked(1);
while (STATE_STARTING.equals(state)) {
if (progressMonitor.isCanceled()) {
@@ -62,7 +77,7 @@
if (streamsProxy != null) {
IStreamMonitor outputStreamMonitor = streamsProxy.getOutputStreamMonitor();
if (outputStreamMonitor != null) {
- outputStreamMonitor.removeListener(streamListener);
+ outputStreamMonitor.removeListener(startupListener);
}
}
}
@@ -70,6 +85,19 @@
}
}
+ public void sendInput(String str) {
+ if (process != null && !process.isTerminated()) {
+ IStreamsProxy streamProxy = process.getStreamsProxy();
+ if (streamProxy != null) {
+ try {
+ streamProxy.write(str);
+ } catch (IOException e) {
+ ForgeCorePlugin.log(e);
+ }
+ }
+ }
+ }
+
public void stop(IProgressMonitor progressMonitor) {
if (progressMonitor == null) {
progressMonitor = new NullProgressMonitor();
@@ -85,6 +113,13 @@
private void terminate() {
try {
if (process != null) {
+ IStreamsProxy streamsProxy = process.getStreamsProxy();
+ if (streamsProxy != null) {
+ IStreamMonitor streamMonitor = streamsProxy.getOutputStreamMonitor();
+ if (streamMonitor != null) {
+ streamMonitor.removeListener(masterOutputListener);
+ }
+ }
process.terminate();
}
} catch (DebugException e) {
@@ -106,6 +141,14 @@
propertyChangeSupport.removePropertyChangeListener(propertyChangeListener);
}
+ public void addOutputListener(ForgeOutputListener listener) {
+ outputListeners.add(listener);
+ }
+
+ public void removeOutputListener(ForgeOutputListener listener) {
+ outputListeners.remove(listener);
+ }
+
private class StartupListener implements IStreamListener {
@Override
public void streamAppended(String text, IStreamMonitor monitor) {
@@ -114,6 +157,15 @@
}
}
+ private class MasterOutputListener implements IStreamListener {
+ @Override
+ public void streamAppended(String text, IStreamMonitor monitor) {
+ for (ForgeOutputListener listener : outputListeners) {
+ listener.outputAvailable(text);
+ }
+ }
+ }
+
private class TerminateListener implements IDebugEventSetListener {
@Override
public void handleDebugEvents(DebugEvent[] events) {
Modified:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeRuntime.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeRuntime.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeRuntime.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -3,7 +3,7 @@
import java.beans.PropertyChangeListener;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.model.IProcess;
+import org.jboss.tools.forge.core.io.ForgeOutputListener;
public interface ForgeRuntime {
@@ -17,9 +17,14 @@
String getLocation();
String getType();
String getState();
- IProcess getProcess();
void start(IProgressMonitor progressMonitor);
void stop(IProgressMonitor progressMonitor);
+
+ void sendInput(String str);
+
+ void addOutputListener(ForgeOutputListener outputListener);
+ void removeOutputListener(ForgeOutputListener outputListener);
+
void addPropertyChangeListener(PropertyChangeListener propertyChangeListener);
void removePropertyChangeListener(PropertyChangeListener propertyChangeListener);
Modified: trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF 2011-07-18 10:58:26
UTC (rev 33003)
+++ trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF 2011-07-18 11:00:38
UTC (rev 33004)
@@ -20,3 +20,4 @@
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.jboss.tools.forge.ui.ForgeUIPlugin
Bundle-ClassPath: .
+Export-Package: org.jboss.tools.forge.ui.console
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartition.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartition.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartition.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -5,7 +5,7 @@
import org.eclipse.jface.text.ITypedRegion;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.ui.console.ConsolePlugin;
-import org.jboss.tools.forge.core.io.ConsoleInputStream;
+import org.jboss.tools.forge.core.io.ForgeInputStream;
public class ConsolePartition implements ITypedRegion {
public static final String OUTPUT_PARTITION_TYPE = ConsolePlugin.getUniqueIdentifier() +
".io_console_output_partition_type"; //$NON-NLS-1$
@@ -28,7 +28,7 @@
*/
private OutputStream outputStream;
@SuppressWarnings("unused")
- private ConsoleInputStream inputStream;
+ private ForgeInputStream inputStream;
private int length;
/**
@@ -44,7 +44,7 @@
/**
* Creates a new partition to contain input from a console
*/
- public ConsolePartition(ConsoleInputStream inputStream, String text) {
+ public ConsolePartition(ForgeInputStream inputStream, String text) {
this.inputStream = inputStream;
buffer = new StringBuffer(text);
length = text.length();
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartitioner.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartitioner.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/old/ConsolePartitioner.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -25,7 +25,7 @@
import org.eclipse.ui.console.IConsoleDocumentPartitioner;
import org.eclipse.ui.progress.UIJob;
import org.eclipse.ui.progress.WorkbenchJob;
-import org.jboss.tools.forge.core.io.ConsoleInputStream;
+import org.jboss.tools.forge.core.io.ForgeInputStream;
import org.jboss.tools.forge.ui.console.Console;
/**
@@ -58,7 +58,7 @@
/**
* The input stream attached to this document.
*/
- private ConsoleInputStream inputStream;
+ private ForgeInputStream inputStream;
/**
* Flag to indicate that the updateJob is updating the document.
*/
@@ -94,7 +94,7 @@
private int fBuffer;
- private ConsolePartitioner(ConsoleInputStream inputStream, Console console) {
+ private ConsolePartitioner(ForgeInputStream inputStream, Console console) {
this.inputStream = inputStream;
this.console = console;
trimJob.setRule(console.getSchedulingRule());
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/Console.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/Console.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/Console.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -1,73 +1,74 @@
package org.jboss.tools.forge.ui.console;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.io.IOException;
-import org.eclipse.debug.core.DebugEvent;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.IDebugEventSetListener;
-import org.eclipse.debug.core.IStreamListener;
-import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.debug.core.model.IStreamMonitor;
-import org.eclipse.debug.core.model.IStreamsProxy;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.console.IConsoleDocumentPartitioner;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.console.TextConsole;
import org.eclipse.ui.part.IPageBookViewPage;
-import org.jboss.tools.forge.core.io.ConsoleInputStream;
-import org.jboss.tools.forge.core.io.ForgeInputReadJob;
+import org.jboss.tools.forge.core.io.ForgeInputStream;
+import org.jboss.tools.forge.core.io.ForgeOutputListener;
+import org.jboss.tools.forge.core.process.ForgeRuntime;
+import org.jboss.tools.forge.ui.ForgeUIPlugin;
-public class Console extends TextConsole implements IDebugEventSetListener {
+public class Console extends TextConsole {
private ConsolePartitioner partitioner;
- private ConsoleInputStream inputStream;
- private IProcess process = null;
- private IStreamListener outputStreamListener;
+ private ForgeInputStream inputStream;
+ private RuntimeStopListener stopListener;
+ private ForgeOutputListener outputListener;
+ private ForgeRuntime runtime;
- public Console(IProcess process) {
+ public Console(ForgeRuntime runtime) {
super("Forge Console", null, null, true);
- this.process = process;
+ this.runtime = runtime;
initInputStream();
initPartitioner();
initCommandRecorder();
- initOutputStream();
+ initOutputListener();
initInputReadJob();
}
+ protected void init() {
+ super.init();
+ initInputStream();
+ initPartitioner();
+ initCommandRecorder();
+ initOutputListener();
+ initStopListener();
+ initInputReadJob();
+ }
+
private void initCommandRecorder() {
getDocument().addDocumentListener(new CommandRecorder());
}
private void initInputStream() {
- inputStream = new ConsoleInputStream();
+ inputStream = new ForgeInputStream();
}
- private void initOutputStream() {
- outputStreamListener = new IStreamListener() {
+ private void initStopListener() {
+ stopListener = new RuntimeStopListener();
+ runtime.addPropertyChangeListener(stopListener);
+ }
+
+ private void initOutputListener() {
+ outputListener = new ForgeOutputListener() {
@Override
- public void streamAppended(String text, IStreamMonitor monitor) {
- appendString(text);
+ public void outputAvailable(String output) {
+ appendString(output);
}
};
- IStreamMonitor streamMonitor = getOutputStreamMonitor();
- synchronized(streamMonitor) {
- streamMonitor.addListener(outputStreamListener);
- }
+ runtime.addOutputListener(outputListener);
}
- private IStreamMonitor getOutputStreamMonitor() {
- IStreamMonitor streamMonitor = null;
- IStreamsProxy streamsProxy = process.getStreamsProxy();
- if (streamsProxy != null) {
- streamMonitor = streamsProxy.getOutputStreamMonitor();
- }
- return streamMonitor;
- }
-
private void initInputReadJob() {
- ForgeInputReadJob inputReadJob = new ForgeInputReadJob(process.getStreamsProxy(),
inputStream);
+ ForgeInputReadJob inputReadJob = new ForgeInputReadJob(runtime, inputStream);
inputReadJob.setSystem(true);
inputReadJob.schedule();
}
@@ -81,62 +82,31 @@
throw new UnsupportedOperationException();
}
- public ConsoleInputStream getInputStream() {
- return inputStream;
- }
-
protected IConsoleDocumentPartitioner getPartitioner() {
return partitioner;
}
public void dispose() {
+ if (!ForgeRuntime.STATE_NOT_RUNNING.equals(runtime.getState())) {
+ runtime.stop(null);
+ }
super.dispose();
- partitioner.disconnect();
- closeStreams();
- disposeStreams();
- DebugPlugin.getDefault().removeDebugEventListener(this);
}
-
- private synchronized void closeStreams() {
- try {
- inputStream.close();
- } catch (IOException e) {}
- }
-
- private synchronized void disposeStreams() {
- IStreamMonitor streamMonitor = getOutputStreamMonitor();
- if (streamMonitor != null) {
- synchronized(streamMonitor) {
- if (outputStreamListener != null) {
- streamMonitor.removeListener(outputStreamListener);
- }
- }
+
+ private void handleRuntimeStopped() {
+ try {
+ runtime.removePropertyChangeListener(stopListener);
+ stopListener = null;
+ runtime.removeOutputListener(outputListener);
+ outputListener = null;
+ partitioner.disconnect();
+ inputStream.close();
+ } catch (IOException e) {
+ ForgeUIPlugin.log(e);
}
- outputStreamListener = null;
- inputStream = null;
}
- public void handleDebugEvents(DebugEvent[] events) {
- for (int i = 0; i < events.length; i++) {
- DebugEvent event = events[i];
- if (event.getSource().equals(process)) {
- if (event.getKind() == DebugEvent.TERMINATE) {
- closeStreams();
- DebugPlugin.getDefault().removeDebugEventListener(this);
- }
- }
- }
- }
- protected void init() {
- super.init();
- if (process.isTerminated()) {
- closeStreams();
- } else {
- DebugPlugin.getDefault().addDebugEventListener(this);
- }
- }
-
private int lastLineLength = 0;
private int lastLinePosition = 0;
private StringBuffer escapeSequence = new StringBuffer();
@@ -208,5 +178,15 @@
private void handleMetaData(String metaData) {
System.out.println("meta data detected: " + metaData);
}
+
+ private class RuntimeStopListener implements PropertyChangeListener {
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (ForgeRuntime.PROPERTY_STATE.equals(evt.getPropertyName()) &&
+ ForgeRuntime.STATE_NOT_RUNNING.equals(evt.getNewValue())) {
+ handleRuntimeStopped();
+ }
+ }
+ }
}
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsolePage.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsolePage.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsolePage.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -1,26 +1,23 @@
package org.jboss.tools.forge.ui.console;
-import org.eclipse.debug.core.model.IProcess;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.console.TextConsoleViewer;
import org.eclipse.ui.part.Page;
+import org.jboss.tools.forge.core.process.ForgeRuntime;
public class ConsolePage extends Page {
private TextConsoleViewer viewer;
- private Console console;
- private IProcess process;
+ private ForgeRuntime runtime;
- public ConsolePage(IProcess process) {
- this.process = process;
+ public ConsolePage(ForgeRuntime runtime) {
+ this.runtime = runtime;
}
@Override
public void createControl(Composite parent) {
- console = new Console(process);
- viewer = new ConsoleViewer(parent, console);
- console.initialize();
+ viewer = new ConsoleViewer(parent, runtime);
}
@Override
@@ -33,8 +30,4 @@
viewer.getControl().setFocus();
}
- public Console getConsole() {
- return console;
- }
-
}
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsoleViewer.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsoleViewer.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsoleViewer.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -10,6 +10,7 @@
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.console.TextConsoleViewer;
+import org.jboss.tools.forge.core.process.ForgeRuntime;
public class ConsoleViewer extends TextConsoleViewer {
@@ -17,29 +18,29 @@
private static String UP_ARROW = new Character((char)16).toString();
private static String DOWN_ARROW = new Character((char)14).toString();
- private Console console = null;
-
- public ConsoleViewer(Composite parent, Console console) {
- super(parent, console);
- this.console = console;
- getDocument().addDocumentListener(new DocumentListener());
+ private ForgeRuntime runtime = null;
+
+ public ConsoleViewer(Composite parent, ForgeRuntime runtime) {
+ super(parent, new Console(runtime));
+ this.runtime = runtime;
+ getDocument().addDocumentListener(new DocumentListener());
}
protected void handleVerifyEvent(VerifyEvent e) {
- console.getInputStream().appendData(e.text);
+ runtime.sendInput(e.text);
e.doit = false;
}
private void handleBackspace() {
- console.getInputStream().appendData(BACKSPACE);
+ runtime.sendInput(BACKSPACE);
}
private void handleArrowUp() {
- console.getInputStream().appendData(UP_ARROW);
+ runtime.sendInput(UP_ARROW);
}
private void handleArrowDown() {
- console.getInputStream().appendData(DOWN_ARROW);
+ runtime.sendInput(DOWN_ARROW);
}
private void handleF1Down() {
Added:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeInputReadJob.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeInputReadJob.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ForgeInputReadJob.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -0,0 +1,38 @@
+package org.jboss.tools.forge.ui.console;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.jboss.tools.forge.core.ForgeCorePlugin;
+import org.jboss.tools.forge.core.process.ForgeRuntime;
+
+public class ForgeInputReadJob extends Job {
+
+ private ForgeRuntime runtime;
+ private InputStream input;
+
+ public ForgeInputReadJob(ForgeRuntime runtime, InputStream input) {
+ super("Forge Input Read Job");
+ this.input = input;
+ this.runtime = runtime;
+ }
+
+ protected IStatus run(IProgressMonitor monitor) {
+ try {
+ int read;
+ while (input != null && (read = input.read()) != -1) {
+ runtime.sendInput(new String(new char[] { (char)read }));
+ }
+ } catch (IOException e) {
+ ForgeCorePlugin.log(e);
+ }
+ return Status.OK_STATUS;
+ }
+
+
+
+}
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ConsoleView.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ConsoleView.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ConsoleView.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -7,7 +7,6 @@
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
@@ -19,7 +18,6 @@
import org.jboss.tools.forge.core.preferences.ForgeRuntimesPreferences;
import org.jboss.tools.forge.core.process.ForgeRuntime;
import org.jboss.tools.forge.ui.ForgeUIPlugin;
-import org.jboss.tools.forge.ui.console.Console;
import org.jboss.tools.forge.ui.console.ConsolePage;
public class ConsoleView extends ViewPart implements PropertyChangeListener {
@@ -123,16 +121,16 @@
private void createRunningPage() {
Control oldForgeIsRunning = running;
ConsolePage oldForgeIsRunningPage = runningPage;
- runningPage = new ConsolePage(runtime.getProcess());
+ runningPage = new ConsolePage(runtime);
runningPage.createControl(pageBook);
runningPage.init(new PageSite(getViewSite()));
running = runningPage.getControl();
if (oldForgeIsRunningPage != null) {
- Console oldConsole = oldForgeIsRunningPage.getConsole();
- if (oldConsole != null) {
- DebugPlugin.getDefault().removeDebugEventListener(oldConsole);
- oldConsole.dispose();
- }
+// Console oldConsole = oldForgeIsRunningPage.getConsole();
+// if (oldConsole != null) {
+// DebugPlugin.getDefault().removeDebugEventListener(oldConsole);
+// oldConsole.dispose();
+// }
oldForgeIsRunningPage.dispose();
}
if (oldForgeIsRunning != null) {
Deleted:
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputReadJobTest.java
===================================================================
---
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputReadJobTest.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputReadJobTest.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -1,66 +0,0 @@
-package org.jboss.tools.forge.core.io;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.debug.core.model.IStreamMonitor;
-import org.eclipse.debug.core.model.IStreamsProxy;
-import org.junit.Before;
-import org.junit.Test;
-
-public class ForgeInputReadJobTest {
-
- private int[] in;
- private String out;
-
- @Before
- public void setUp() {
- in = null;
- out = "";
- }
-
- @Test
- public void testNullInput() {
- ForgeInputReadJob forgeInputReadJob = new ForgeInputReadJob(new TestStreamProxy(),
null);
- forgeInputReadJob.schedule();
- try {
- forgeInputReadJob.join();
- } catch (InterruptedException e) {}
- assertEquals("", out);
- }
-
- @Test
- public void testNormalInput() {
- in = new int[] { 'b', 'l', 'a', 'h', -1 };
- ForgeInputReadJob forgeInputReadJob = new ForgeInputReadJob(new TestStreamProxy(), new
TestInputStream());
- forgeInputReadJob.schedule();
- try {
- forgeInputReadJob.join();
- } catch (InterruptedException e) {}
- assertEquals("blah", out);
- }
-
- private class TestStreamProxy implements IStreamsProxy {
- public IStreamMonitor getErrorStreamMonitor() {
- return null;
- }
- public IStreamMonitor getOutputStreamMonitor() {
- return null;
- }
- public void write(String str) throws IOException {
- out += str;
- }
- }
-
- private class TestInputStream extends InputStream {
- int index = 0;
- public int read() throws IOException {
- int result = in.length > index ? in[index] : -1;
- index++;
- return result;
- }
- }
-
-}
Added:
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputStreamTest.java
===================================================================
---
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputStreamTest.java
(rev 0)
+++
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/io/ForgeInputStreamTest.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -0,0 +1,14 @@
+package org.jboss.tools.forge.core.io;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class ForgeInputStreamTest {
+
+ @Test
+ public void test() {
+ fail("Not yet implemented");
+ }
+
+}
Modified:
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntimeTest.java
===================================================================
---
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntimeTest.java 2011-07-18
10:58:26 UTC (rev 33003)
+++
trunk/forge/tests/org.jboss.tools.forge.core.test/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntimeTest.java 2011-07-18
11:00:38 UTC (rev 33004)
@@ -17,6 +17,8 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.debug.core.model.IStreamMonitor;
+import org.eclipse.debug.core.model.IStreamsProxy;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;