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();