FELIX-3340 Allow the prompt to be a Function
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1346792 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Console.java b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Console.java
index 47c6d4c..ee21598 100644
--- a/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Console.java
+++ b/gogo/shell/src/main/java/org/apache/felix/gogo/shell/Console.java
@@ -21,8 +21,10 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
+
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Converter;
+import org.apache.felix.service.command.Function;
public class Console implements Runnable
{
@@ -46,13 +48,7 @@
{
while (!quit)
{
- Object prompt = session.get("prompt");
- if (prompt == null)
- {
- prompt = "g! ";
- }
-
- CharSequence line = getLine(prompt.toString());
+ CharSequence line = getLine(getPrompt());
if (line == null)
{
@@ -118,6 +114,30 @@
}
}
+ private String getPrompt()
+ {
+ Object prompt = session.get("prompt");
+ if (prompt instanceof Function)
+ {
+ try
+ {
+ prompt = ((Function) prompt).execute(session, null);
+ }
+ catch (Exception e)
+ {
+ out.println(prompt + ": " + e.getClass().getSimpleName() + ": " + e.getMessage());
+ prompt = null;
+ }
+ }
+
+ if (prompt == null)
+ {
+ prompt = "g! ";
+ }
+
+ return prompt.toString();
+ }
+
private CharSequence getLine(String prompt) throws IOException
{
StringBuilder sb = new StringBuilder();