Author: koen.aers(a)jboss.com
Date: 2011-07-18 16:06:00 -0400 (Mon, 18 Jul 2011)
New Revision: 33027
Added:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeHiddenOutputFilter.java
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/beans.xml
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/forge.xml
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/ShellDecorator.java
Modified:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/META-INF/MANIFEST.MF
trunk/forge/plugins/org.jboss.tools.forge.runtime/.classpath
trunk/forge/plugins/org.jboss.tools.forge.runtime/META-INF/MANIFEST.MF
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/ConsoleViewer.java
Log:
initial implementation of a decorator for Forge Shell and an observer for Forge events
Added:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeHiddenOutputFilter.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeHiddenOutputFilter.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeHiddenOutputFilter.java 2011-07-18
20:06:00 UTC (rev 33027)
@@ -0,0 +1,45 @@
+package org.jboss.tools.forge.core.io;
+
+public class ForgeHiddenOutputFilter implements ForgeOutputListener {
+
+ private static final String ESCAPE_SEQUENCE = new String(new char[] { 27, '[',
'%' });
+
+ private ForgeOutputListener target = null;
+ private boolean hidden = false;
+ private StringBuffer hiddenOutput = new StringBuffer();
+
+ public ForgeHiddenOutputFilter(ForgeOutputListener target) {
+ this.target = target;
+ }
+
+ @Override
+ public void outputAvailable(String output) {
+ System.out.println("ForgeHiddenOutputListener->outputAvailable: " +
output);
+ int i = output.indexOf(ESCAPE_SEQUENCE);
+ if (i != -1) {
+ if (hidden) {
+ hiddenOutput.append(output.substring(0, i));
+ handleHiddenOutput(hiddenOutput);
+ } else {
+ target.outputAvailable(output.substring(0, i));
+ hidden = true;
+ }
+ if (output.length() > i + 3) {
+ outputAvailable(output.substring(i + 3));
+ }
+ } else {
+ if (hidden) {
+ hiddenOutput.append(output);
+ } else {
+ target.outputAvailable(output);
+ }
+ }
+ }
+
+ private void handleHiddenOutput(StringBuffer output) {
+ System.out.println(output.toString());
+ output.setLength(0);
+ hidden = false;
+ }
+
+}
Modified: trunk/forge/plugins/org.jboss.tools.forge.runtime/.classpath
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.runtime/.classpath 2011-07-18 18:58:20 UTC
(rev 33026)
+++ trunk/forge/plugins/org.jboss.tools.forge.runtime/.classpath 2011-07-18 20:06:00 UTC
(rev 33027)
@@ -5,5 +5,6 @@
<classpathentry exported="true" kind="lib"
path="lib/forge-shell-api.jar"/>
<classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con"
path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="lib" path="lib/weld-core.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Modified: trunk/forge/plugins/org.jboss.tools.forge.runtime/META-INF/MANIFEST.MF
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.runtime/META-INF/MANIFEST.MF 2011-07-18
18:58:20 UTC (rev 33026)
+++ trunk/forge/plugins/org.jboss.tools.forge.runtime/META-INF/MANIFEST.MF 2011-07-18
20:06:00 UTC (rev 33027)
@@ -7,7 +7,8 @@
Bundle-ClassPath: lib/forge-shell-api.jar,
lib/cdi-api.jar,
lib/javax.inject.jar
-Export-Package: javax.enterprise.context,
+Export-Package: javax.decorator,
+ javax.enterprise.context,
javax.enterprise.event,
javax.inject,
org.jboss.forge,
Modified:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/META-INF/MANIFEST.MF
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/META-INF/MANIFEST.MF 2011-07-18
18:58:20 UTC (rev 33026)
+++
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/META-INF/MANIFEST.MF 2011-07-18
20:06:00 UTC (rev 33027)
@@ -1,6 +1,8 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
-Bundle-Name: Ext
+Bundle-Name: Forge Runtime Extensions
Bundle-SymbolicName: org.jboss.tools.forge.runtime.ext
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-Vendor: JBoss by Red Hat
+Require-Bundle: org.jboss.tools.forge.runtime;bundle-version="1.0.0"
Added:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/beans.xml
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/beans.xml
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/beans.xml 2011-07-18
20:06:00 UTC (rev 33027)
@@ -0,0 +1,8 @@
+<beans
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+
http://java.sun.com/xml/ns/javaee
+
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+ <decorators>
+ <class>org.jboss.tools.forge.runtime.ext.ShellDecorator</class>
+ </decorators>
+</beans>
Added:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/forge.xml
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/forge.xml
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/META-INF/forge.xml 2011-07-18
20:06:00 UTC (rev 33027)
@@ -0,0 +1 @@
+<forge/>
\ No newline at end of file
Added:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/EventHandler.java 2011-07-18
20:06:00 UTC (rev 33027)
@@ -0,0 +1,24 @@
+package org.jboss.tools.forge.runtime.ext;
+
+import javax.enterprise.event.Observes;
+import javax.inject.Inject;
+
+import org.jboss.forge.shell.Shell;
+import org.jboss.forge.shell.events.PostStartup;
+
+public class EventHandler {
+
+ private static final String ESCAPE = new String(new char[] { 27, '[',
'%'} );
+
+ @Inject
+ private Shell shell;
+
+ public void startup(@Observes PostStartup event) {
+ sendEscaped("PostStartup");
+ }
+
+ private void sendEscaped(String str) {
+ shell.print(ESCAPE + str + ESCAPE);
+ }
+
+}
Added:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/ShellDecorator.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/ShellDecorator.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/ShellDecorator.java 2011-07-18
20:06:00 UTC (rev 33027)
@@ -0,0 +1,37 @@
+package org.jboss.tools.forge.runtime.ext;
+
+import java.io.IOException;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+
+import org.jboss.forge.shell.Shell;
+
+@Decorator
+public abstract class ShellDecorator implements Shell {
+
+ private static final String ESCAPE = new String(new char[] { 27, '[',
'%' });
+
+ @Inject @Delegate Shell shell;
+
+ @Override
+ public String readLine() throws IOException {
+ String str = shell.readLine();
+ int i1 = str.indexOf(ESCAPE);
+ int i2 = str.indexOf(ESCAPE, i1 + 3);
+ if (i1 != -1 && str.length() > i1 + 3) {
+ i2 = str.indexOf(ESCAPE);
+ if (i2 != -1) {
+ handleHidden(str.substring(i1 + 3, i2));
+ }
+ return "";
+ }
+ return str;
+ }
+
+ private void handleHidden(String str) {
+ shell.println(ESCAPE + "hidden detected: " + str + ESCAPE);
+ }
+
+}
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
18:58:20 UTC (rev 33026)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/Console.java 2011-07-18
20:06:00 UTC (rev 33027)
@@ -10,6 +10,7 @@
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.ForgeHiddenOutputFilter;
import org.jboss.tools.forge.core.io.ForgeInputStream;
import org.jboss.tools.forge.core.io.ForgeOutputListener;
import org.jboss.tools.forge.core.process.ForgeRuntime;
@@ -27,11 +28,7 @@
public Console(ForgeRuntime runtime) {
super("Forge Console", null, null, true);
this.runtime = runtime;
- initInputStream();
- initPartitioner();
- initCommandRecorder();
- initOutputListener();
- initInputReadJob();
+ initialize();
}
protected void init() {
@@ -58,12 +55,14 @@
}
private void initOutputListener() {
- outputListener = new ForgeOutputListener() {
+ ForgeOutputListener target = new ForgeOutputListener() {
@Override
public void outputAvailable(String output) {
+ System.out.println("ForgeOutputListener->outputAvailable : " + output);
appendString(output);
}
};
+ outputListener = new ForgeHiddenOutputFilter(target);
runtime.addOutputListener(outputListener);
}
@@ -101,6 +100,7 @@
outputListener = null;
partitioner.disconnect();
inputStream.close();
+ inputStream = null;
} catch (IOException e) {
ForgeUIPlugin.log(e);
}
@@ -188,5 +188,5 @@
}
}
}
-
+
}
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
18:58:20 UTC (rev 33026)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/ConsoleViewer.java 2011-07-18
20:06:00 UTC (rev 33027)
@@ -23,7 +23,7 @@
public ConsoleViewer(Composite parent, ForgeRuntime runtime) {
super(parent, new Console(runtime));
this.runtime = runtime;
- getDocument().addDocumentListener(new DocumentListener());
+ getDocument().addDocumentListener(new DocumentListener());
}
protected void handleVerifyEvent(VerifyEvent e) {
@@ -44,7 +44,7 @@
}
private void handleF1Down() {
-// console.getInputStream().appendData((char)27 + "[%hidden blahblahblah
%");
+ runtime.sendInput((char)27 + "[%hidden blahblahblah" +(char)27 +
"[%");
}
protected StyledText createTextWidget(Composite parent, int styles) {