Author: koen.aers(a)jboss.com
Date: 2011-08-01 14:59:35 -0400 (Mon, 01 Aug 2011)
New Revision: 33421
Added:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputFilter.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/commands/
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/commands/ForgeCommandListHandler.java
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/dialog/
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/dialog/ForgeCommandListDialog.java
Modified:
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/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.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/MetaCommandTriggeredAction.java
trunk/forge/plugins/org.jboss.tools.forge.runtime/META-INF/MANIFEST.MF
trunk/forge/plugins/org.jboss.tools.forge.ui/plugin.xml
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/part/ConsoleView.java
Log:
initial try-out of generating a popup with forge commands when issuing Cmd+4
Modified:
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 2011-08-01
18:28:45 UTC (rev 33420)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeHiddenOutputFilter.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -1,6 +1,6 @@
package org.jboss.tools.forge.core.io;
-public class ForgeHiddenOutputFilter implements ForgeOutputListener {
+public abstract class ForgeHiddenOutputFilter implements ForgeOutputFilter {
private ForgeOutputListener target = null;
private boolean hidden = false;
@@ -8,6 +8,8 @@
private StringBuffer targetBuffer = new StringBuffer();
private StringBuffer escapeSequence = new StringBuffer();
+ public ForgeHiddenOutputFilter() {}
+
public ForgeHiddenOutputFilter(ForgeOutputListener target) {
this.target = target;
}
@@ -43,12 +45,14 @@
} else if (c == '%') {
if (escapeSequence.length() == 2) {
if (hidden) {
- handleHiddenOutput(hiddenBuffer);
+ handleFilteredString(hiddenBuffer.toString());
hiddenBuffer.setLength(0);
} else {
String out = targetBuffer.toString();
targetBuffer.setLength(0);
- target.outputAvailable(out);
+ if (target != null) {
+ target.outputAvailable(out);
+ }
}
escapeSequence.setLength(0);
hidden = !hidden;
@@ -78,22 +82,11 @@
if (hiddenBuffer.length() == 0 && targetBuffer.length() != 0) {
String out = targetBuffer.toString();
targetBuffer.setLength(0);
- target.outputAvailable(out);
+ if (target != null) {
+ target.outputAvailable(out);
+ }
}
}
- private void handleHiddenOutput(StringBuffer output) {
- System.out.println("handleHiddenOutput : " + output.toString());
- }
-
- private void appendToTargetBuffer(StringBuffer buffer) {
- System.out.println("appendToTargetBuffer : " + buffer);
- targetBuffer.append(buffer);
- }
-
- private void appendToHiddenBuffer(StringBuffer buffer) {
- System.out.println("appendToHiddenBuffer : " + buffer);
- }
-
}
Added:
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputFilter.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputFilter.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/io/ForgeOutputFilter.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -0,0 +1,7 @@
+package org.jboss.tools.forge.core.io;
+
+public interface ForgeOutputFilter extends ForgeOutputListener {
+
+ void handleFilteredString(String str);
+
+}
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-08-01
18:28:45 UTC (rev 33420)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeAbstractRuntime.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -17,6 +17,7 @@
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.ForgeHiddenOutputFilter;
import org.jboss.tools.forge.core.io.ForgeOutputListener;
public abstract class ForgeAbstractRuntime implements ForgeRuntime {
@@ -25,6 +26,7 @@
private String state = STATE_NOT_RUNNING;
private final TerminateListener terminateListener = new TerminateListener();
private MasterOutputListener masterOutputListener = new MasterOutputListener();
+ private CommandResultListener commandResultListener = new CommandResultListener();
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
private List<ForgeOutputListener> outputListeners = new
ArrayList<ForgeOutputListener>();
@@ -85,6 +87,37 @@
}
}
+ public String sendCommand(String str) {
+ String result = null;
+ if (process != null && !process.isTerminated()) {
+ IStreamsProxy streamsProxy = process.getStreamsProxy();
+ if (streamsProxy != null) {
+ IStreamMonitor streamMonitor = streamsProxy.getOutputStreamMonitor();
+ if (streamMonitor != null) {
+ commandResultListener.command = str + '\n';
+ streamMonitor.removeListener(masterOutputListener);
+ streamMonitor.addListener(commandResultListener);
+ try {
+ streamsProxy.write(new Character((char)31).toString() + str + '\n');
+ } catch (IOException e) {
+ ForgeCorePlugin.log(e);
+ }
+ try {
+ while (commandResultListener.result == null) {
+ Thread.sleep(100);
+ }
+ } catch (InterruptedException e) {}
+ result = commandResultListener.result;
+ commandResultListener.result = null;
+ commandResultListener.command = null;
+ streamMonitor.removeListener(commandResultListener);
+ streamMonitor.addListener(masterOutputListener);
+ }
+ }
+ }
+ return result;
+ }
+
public void sendInput(String str) {
if (process != null && !process.isTerminated()) {
IStreamsProxy streamProxy = process.getStreamsProxy();
@@ -166,6 +199,21 @@
}
}
+ private class CommandResultListener extends ForgeHiddenOutputFilter implements
IStreamListener {
+ String result = null;
+ String command = null;
+ @Override
+ public void streamAppended(String text, IStreamMonitor monitor) {
+ outputAvailable(text);
+ }
+ @Override
+ public void handleFilteredString(String str) {
+ if (!str.endsWith(command)) {
+ result = str;
+ }
+ }
+ }
+
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-08-01
18:28:45 UTC (rev 33420)
+++
trunk/forge/plugins/org.jboss.tools.forge.core/src/org/jboss/tools/forge/core/process/ForgeRuntime.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -17,10 +17,12 @@
String getLocation();
String getType();
String getState();
+
void start(IProgressMonitor progressMonitor);
void stop(IProgressMonitor progressMonitor);
void sendInput(String str);
+ String sendCommand(String str);
void addOutputListener(ForgeOutputListener outputListener);
void removeOutputListener(ForgeOutputListener outputListener);
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-08-01
18:28:45 UTC (rev 33420)
+++ trunk/forge/plugins/org.jboss.tools.forge.runtime/META-INF/MANIFEST.MF 2011-08-01
18:59:35 UTC (rev 33421)
@@ -14,6 +14,7 @@
javax.inject,
org.jboss.forge,
org.jboss.forge.shell,
+ org.jboss.forge.shell.command,
org.jboss.forge.shell.events,
org.jboss.forge.shell.plugins,
org.jboss.forge.shell.spi
Modified:
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/MetaCommandTriggeredAction.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/MetaCommandTriggeredAction.java 2011-08-01
18:28:45 UTC (rev 33420)
+++
trunk/forge/plugins/org.jboss.tools.forge.runtime.ext/org.jboss.tools.forge.runtime.ext/src/org/jboss/tools/forge/runtime/ext/MetaCommandTriggeredAction.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -7,6 +7,7 @@
import javax.inject.Inject;
import org.jboss.forge.shell.Shell;
+import org.jboss.forge.shell.command.PluginRegistry;
import org.jboss.forge.shell.spi.TriggeredAction;
public class MetaCommandTriggeredAction implements TriggeredAction {
@@ -14,6 +15,8 @@
private static final String ESCAPE = new String(new char[] { 27, '[',
'%' });
@Inject Shell shell;
+
+ @Inject PluginRegistry registry;
@Override
public ActionListener getListener() {
@@ -33,8 +36,18 @@
}
private void handleHiddenCommand(String text) {
- shell.print(ESCAPE + "handling hidden command : " + text + ESCAPE);
+ if ("command-list-query".equals(text)) {
+ shell.print(ESCAPE + "command-list-answer: " + getCommandList() + ESCAPE);
+ }
}
+
+ private String getCommandList() {
+ StringBuffer resultBuffer = new StringBuffer();
+ for (String name : registry.getPlugins().keySet()) {
+ resultBuffer.append(name).append(" ");
+ }
+ return resultBuffer.toString();
+ }
@Override
public char getTrigger() {
Modified: trunk/forge/plugins/org.jboss.tools.forge.ui/plugin.xml
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.ui/plugin.xml 2011-08-01 18:28:45 UTC (rev
33420)
+++ trunk/forge/plugins/org.jboss.tools.forge.ui/plugin.xml 2011-08-01 18:59:35 UTC (rev
33421)
@@ -57,5 +57,21 @@
id="org.jboss.tools.forge.runtimes">
</page>
</extension>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ categoryId="org.eclipse.ui.category.window"
+
defaultHandler="org.jboss.tools.forge.ui.commands.ForgeCommandListHandler"
+ description="Quickly access the list of Forge commands"
+ id="org.jboss.tools.forge.ui.commandList"
+ name="Forge Command List"/>
+ </extension>
+ <extension
+ point="org.eclipse.ui.bindings">
+ <key
+ commandId="org.jboss.tools.forge.ui.commandList"
+ sequence="M1+4"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" />
+ </extension>
</plugin>
Added:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/commands/ForgeCommandListHandler.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/commands/ForgeCommandListHandler.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/commands/ForgeCommandListHandler.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -0,0 +1,37 @@
+package org.jboss.tools.forge.ui.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.jboss.tools.forge.core.process.ForgeRuntime;
+import org.jboss.tools.forge.ui.dialog.ForgeCommandListDialog;
+import org.jboss.tools.forge.ui.part.ConsoleView;
+
+public class ForgeCommandListHandler extends AbstractHandler {
+
+ public Object execute(ExecutionEvent executionEvent) {
+
+ IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(executionEvent);
+ if (window == null) {
+ return null;
+ }
+ IViewPart part = window.getActivePage().findView(ConsoleView.ID);
+ if (part == null || !(part instanceof ConsoleView)) {
+ return null;
+ }
+
+ ForgeRuntime runtime = ((ConsoleView)part).getRuntime();
+ if (runtime == null || !(ForgeRuntime.STATE_RUNNING.equals(runtime.getState()))) {
+ return null;
+ }
+
+ String result = runtime.sendCommand("command-list-query");
+
+ new ForgeCommandListDialog(window, result).open();
+
+ return null;
+ }
+
+}
\ No newline at end of file
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-08-01
18:28:45 UTC (rev 33420)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/Console.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -61,7 +61,12 @@
appendString(output);
}
};
- outputListener = new ForgeHiddenOutputFilter(target);
+ outputListener = new ForgeHiddenOutputFilter(target) {
+ @Override
+ public void handleFilteredString(String str) {
+ System.out.println("handleHiddenOutput : " + str);
+ }
+ };
runtime.addOutputListener(outputListener);
}
Added:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/dialog/ForgeCommandListDialog.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/dialog/ForgeCommandListDialog.java
(rev 0)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/dialog/ForgeCommandListDialog.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -0,0 +1,50 @@
+package org.jboss.tools.forge.ui.dialog;
+
+import java.util.SortedSet;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+import org.eclipse.jface.dialogs.PopupDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.ui.IWorkbenchWindow;
+
+public class ForgeCommandListDialog extends PopupDialog {
+
+ private SortedSet<String> commandSet = new TreeSet<String>();
+
+ public ForgeCommandListDialog(IWorkbenchWindow window, String commands) {
+ super(window.getShell(),
+ SWT.RESIZE,
+ true,
+ true, // persist size
+ false, // but not location
+ true,
+ true,
+ "Select the command you want Forge to execute",
+ null);
+ StringTokenizer tokenizer = new StringTokenizer(commands);
+ if (tokenizer.hasMoreTokens()) {
+ String first = tokenizer.nextToken();
+ if ("command-list-answer:".equals(first)) {
+ while (tokenizer.hasMoreTokens()) {
+ commandSet.add(tokenizer.nextToken());
+ }
+ }
+ }
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite result = (Composite)super.createDialogArea(parent);
+ result.setLayout(new FillLayout());
+ List list = new List(result, SWT.SINGLE);
+ for (String command : commandSet) {
+ list.add(command);
+ }
+ return result;
+ }
+
+}
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-08-01
18:28:45 UTC (rev 33420)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/part/ConsoleView.java 2011-08-01
18:59:35 UTC (rev 33421)
@@ -21,6 +21,8 @@
import org.jboss.tools.forge.ui.console.ConsolePage;
public class ConsoleView extends ViewPart implements PropertyChangeListener {
+
+ public static final String ID = "org.jboss.tools.forge.console";
private static final String NOT_RUNNING_MESSAGE = "Forge is not running.";
private static final String STARTING_MESSAGE = "Please wait while Forge is
starting";
@@ -193,5 +195,9 @@
private Display getDisplay() {
return getViewSite().getPage().getWorkbenchWindow().getShell().getDisplay();
}
+
+ public ForgeRuntime getRuntime() {
+ return runtime;
+ }
}