Author: anovarini
Date: Sat Mar 10 22:17:17 2012
New Revision: 1299288

URL: http://svn.apache.org/viewvc?rev=1299288&view=rev
Log:
Extracted the responsibility of reading and writing on terminal, minor 
refactoring

Added:
    incubator/kitty/trunk/src/main/groovy/org/apache/kitty/IODevice.groovy
    incubator/kitty/trunk/src/main/groovy/org/apache/kitty/Terminal.groovy
Modified:
    incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShell.groovy
    
incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShellBuilder.groovy
    incubator/kitty/trunk/src/main/groovy/org/apache/kitty/utils/Help.groovy

Modified: incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShell.groovy
URL: 
http://svn.apache.org/viewvc/incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShell.groovy?rev=1299288&r1=1299287&r2=1299288&view=diff
==============================================================================
--- incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShell.groovy 
(original)
+++ incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShell.groovy Sat 
Mar 10 22:17:17 2012
@@ -18,10 +18,6 @@
 
 package org.apache.kitty
 
-import jline.ConsoleReader
-import jline.History
-import jline.SimpleCompletor
-
 import org.apache.kitty.client.Client
 import org.apache.kitty.utils.Constants
 import org.apache.kitty.utils.Help
@@ -39,15 +35,12 @@ import org.apache.kitty.utils.Help
  *
  */
 class CmdShell {
-
-       static final PROMPT = "kitty> "
-
        static final String HOST = "localhost"
 
        static final String PORT = "1099"
 
        Client client
-    ConsoleReader reader = new ConsoleReader()
+    IODevice ioDevice
 
        def remote
 
@@ -67,26 +60,14 @@ class CmdShell {
                "setdomain"
        ]
 
-    CmdShell(Client client) {
+    CmdShell(IODevice ioDevice, Client client) {
+        this.ioDevice = ioDevice
         this.client = client
     }
 
        void startShell() {
-
-               // TODO add Windows compatibility check
-               def historyFile = new File(System.getProperty("user.home"), 
"kitty.history")
-               historyFile.createNewFile()
-
-               def history = new History(historyFile)
-
-               reader.setBellEnabled false
-               reader.setUseHistory true
-        reader.setHistory history
-        reader.setDefaultPrompt PROMPT
-               reader.addCompletor(new SimpleCompletor(commands as String[]))
-
                LOOP: while (true) {
-                       def input = reader?.readLine().trim()
+                       def input = ioDevice.read()
 
                        if (input.length() == 0)
                                continue
@@ -104,7 +85,6 @@ class CmdShell {
        }
 
        void inputHandler(String input) {
-               Integer index = 0
                String[] params
 
                if (input.contains(" ")) {
@@ -116,8 +96,7 @@ class CmdShell {
                }
 
                if (commands.contains(input)) {
-                       index = commands.indexOf(input)
-                       //println "The index is" + index
+                       int index = commands.indexOf(input)
 
                        switch(index) {
                                case 0:
@@ -125,14 +104,14 @@ class CmdShell {
                                        break;
                                case 1:
                                        if (params.length > 5) {
-                                               reader.printString "You have 
entered an invalid number of parameters, you may enter host and port as 
parameters only"
+                        ioDevice.write 'You have entered an invalid number of 
parameters, you may enter host and port as parameters only'
                                                break;
                                        }
                                        if (params.length == 5) {
                                                cmdConnect(params[1], 
params[2], params[3], params[4])
                                        }
                                        else if (params.length == 4) {
-                        reader.printString "Please supply a password"
+                        ioDevice.write 'Please supply a password'
                                        }
                                        else if (params.length == 3) {
                                                cmdConnect(params[1], params[2])
@@ -167,8 +146,8 @@ class CmdShell {
                                                cmdCd(params[1])
                                        }
                                        else {
-                        reader.printString Constants.ERROR_TOO_FEW_PARAMETERS
-                        reader.printString "You must enter a path parameter 
after 'cd'"
+                        ioDevice.write Constants.ERROR_TOO_FEW_PARAMETERS
+                        ioDevice.write 'You must enter a path parameter after 
"cd"'
                                        }
                                        break;
                                case 8:
@@ -176,8 +155,8 @@ class CmdShell {
                                                cmdGet(params[1])
                                        }
                                        else {
-                        reader.printString Constants.ERROR_TOO_FEW_PARAMETERS
-                        reader.printString "You must enter at 1 parameter 
after the command"
+                        ioDevice.write Constants.ERROR_TOO_FEW_PARAMETERS
+                        ioDevice.write 'You must enter at least 1 parameter 
after the command'
                                        }
                                        break;
                                case 9:
@@ -185,8 +164,8 @@ class CmdShell {
                                                cmdSet(params[1], params[2])
                                        }
                                        else {
-                        reader.printString Constants.ERROR_TOO_FEW_PARAMETERS
-                        reader.printString "You must enter an attribute 
parameter and a value parameter"
+                        ioDevice.write Constants.ERROR_TOO_FEW_PARAMETERS
+                        ioDevice.write 'You must enter an attribute parameter 
and a value parameter'
                                        }
                                        break;
                                case 10:
@@ -194,8 +173,8 @@ class CmdShell {
                                                cmdInvoke(params[1],params[2])
                                        }
                                        else {
-                        reader.printString Constants.ERROR_TOO_FEW_PARAMETERS
-                        reader.printString "You must enter an operation name 
followed by parameter(s)"
+                        ioDevice.write Constants.ERROR_TOO_FEW_PARAMETERS
+                        ioDevice.write 'You must enter an operation name 
followed by parameter(s)'
                                        }
 
                                        break;
@@ -207,8 +186,8 @@ class CmdShell {
                                                cmdSetDomain(params[1])
                                        }
                                        else {
-                        reader.printString Constants.ERROR_TOO_FEW_PARAMETERS
-                        reader.printString "You must enter a domain name 
parameter after 'setdomain' command"
+                        ioDevice.write Constants.ERROR_TOO_FEW_PARAMETERS
+                        ioDevice.write 'You must enter a domain name parameter 
after "setdomain" command'
                                        }
                                        break;
                                default:
@@ -216,13 +195,13 @@ class CmdShell {
                        }
                }
                else {
-            reader.printString (input + " is not a valid command")
+            ioDevice.write "$input is not a valid command"
                }
        }
 
        void cmdHelp() {
-               Help h = new Help()
-        reader.printString h.toString()
+               Help help = new Help()
+        ioDevice.write help.availableCommands()
        }
 
     void cmdConnect(String... args) {
@@ -238,23 +217,23 @@ class CmdShell {
         }
         this.remote = client.remote
         if (this.remote) {
-            reader.printString "Successfully connected to host"
+            ioDevice.write "Successfully connected to host $host:$port"
         }
         else {
-            reader.printString "Connection attempt was unsuccessful"
+            ioDevice.write 'Connection attempt was unsuccessful'
         }
     }
 
        void cmdDisconnect() {
-        reader.printString "disconnecting..."
+        ioDevice.write 'Disconnecting...'
                if (client.remote) {
                        client.disconnect()
                        if (!client.remote) {
-                reader.printString "successfully disconnected from host"
+                ioDevice.write 'Successfully disconnected from host'
                        }
                }
                else {
-            reader.printString "client can not disconnect because it is not 
connected to a host"
+            ioDevice.write 'Client can not disconnect because it is not 
connected to a host'
                }
        }
 
@@ -262,93 +241,93 @@ class CmdShell {
         if (client.getRemote()) {
             client.disconnect()
             if (!client.getRemote()) {
-                reader.printString "successfully disconnected from host"
+                ioDevice.write 'Successfully disconnected from host'
             }
         }
-        reader.printString  "exiting..."
-        reader.printString  "successfully exited kitty"
+        ioDevice.write 'Exiting...'
+        ioDevice.write 'Successfully exited kitty'
        }
 
        void cmdLs() {
-        reader.printString  "listing files and directories..."
+        ioDevice.write 'listing files and directories...'
                if (remote) {
                        getClient().ls()
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 
        void cmdDomains() {
                def domains = getClient().domains()
                if (domains) {
-            reader.printString  "Domains Detected: "
+            ioDevice.write 'Domains Detected: '
             domains.eachWithIndex() { obj, i -> println " ${i}: ${obj}" }
 
                }
                else {
-            reader.printString  "No domains are available"
+            ioDevice.write 'No domains are available'
                }
        }
 
        void cmdCd(String path) {
-        reader.printString  "changing remote path..."
+        ioDevice.write 'Changing remote path...'
                if (remote) {
                        getClient().cd(path)
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 
        void cmdGet(def attr) {
-        reader.printString  "get $attr..."
+        ioDevice.write "Get $attr..."
                if (remote) {
                        getClient().get(attr)
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 
        void cmdSet(def attr, def val) {
-        reader.printString  "set $attr to $val"
+        ioDevice.write "Set $attr to $val"
                if (remote) {
                        getClient().set(attr, val)
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 
        void cmdInvoke(def op, def params) {
-        reader.printString "Invoking the following operation: $op"
+        ioDevice.write "Invoking the following operation: $op"
                if (remote) {
                        getClient().invoke(op, params)
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 
        void cmdPwd() {
-        reader.printString  "Displaying the current remote path..."
+        ioDevice.write 'Displaying the current remote path...'
                if (remote) {
                        String name = (String) getClient().pwd()
-            reader.printString  name
+            ioDevice.write name
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 
        void cmdSetDomain(def domain) {
-        reader.printString  "Setting the domain to $domain..."
+        ioDevice.write "Setting the domain to $domain..."
                if (remote) {
                        getClient().setDomain(domain)
                }
                else {
-            reader.printString  Constants.ERROR_NOT_CONNECTED
+            ioDevice.write Constants.ERROR_NOT_CONNECTED
                }
        }
 }

Modified: 
incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShellBuilder.groovy
URL: 
http://svn.apache.org/viewvc/incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShellBuilder.groovy?rev=1299288&r1=1299287&r2=1299288&view=diff
==============================================================================
--- 
incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShellBuilder.groovy 
(original)
+++ 
incubator/kitty/trunk/src/main/groovy/org/apache/kitty/CmdShellBuilder.groovy 
Sat Mar 10 22:17:17 2012
@@ -1,18 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.kitty
 
 import org.apache.kitty.client.Client
+import jline.ConsoleReader
 
-/**
- * Created with IntelliJ IDEA.
- * User: ale
- * Date: 10/03/2012
- * Time: 20:32
- * To change this template use File | Settings | File Templates.
- */
 class CmdShellBuilder {
 
     CmdShell build() {
         Client client = new Client()
-        return new CmdShell(client)
+        String[] commands = [
+                "help",
+                "connect",
+                "disconnect",
+                "exit",
+                "ls",
+                "echo",
+                "domains",
+                "cd",
+                "get",
+                "set",
+                "invoke",
+                "pwd",
+                "setdomain"
+        ]
+        IODevice terminal = new Terminal(new ConsoleReader(), commands)
+        terminal.setup()
+        return new CmdShell(terminal, client)
     }
 }

Added: incubator/kitty/trunk/src/main/groovy/org/apache/kitty/IODevice.groovy
URL: 
http://svn.apache.org/viewvc/incubator/kitty/trunk/src/main/groovy/org/apache/kitty/IODevice.groovy?rev=1299288&view=auto
==============================================================================
--- incubator/kitty/trunk/src/main/groovy/org/apache/kitty/IODevice.groovy 
(added)
+++ incubator/kitty/trunk/src/main/groovy/org/apache/kitty/IODevice.groovy Sat 
Mar 10 22:17:17 2012
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.kitty
+
+interface IODevice {
+
+    String read()
+    void write(String msg)
+}

Added: incubator/kitty/trunk/src/main/groovy/org/apache/kitty/Terminal.groovy
URL: 
http://svn.apache.org/viewvc/incubator/kitty/trunk/src/main/groovy/org/apache/kitty/Terminal.groovy?rev=1299288&view=auto
==============================================================================
--- incubator/kitty/trunk/src/main/groovy/org/apache/kitty/Terminal.groovy 
(added)
+++ incubator/kitty/trunk/src/main/groovy/org/apache/kitty/Terminal.groovy Sat 
Mar 10 22:17:17 2012
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.kitty
+
+import jline.History
+import jline.SimpleCompletor
+import jline.ConsoleReader
+
+class Terminal implements IODevice {
+
+    String prompt = 'kitty> '
+    String[] commands
+    ConsoleReader reader
+
+    Terminal(ConsoleReader reader, String[] commands) {
+        this.reader = reader
+        this.commands = commands
+    }
+
+    void setup() {
+        reader.setBellEnabled false
+        reader.setUseHistory true
+
+        def historyFile = new File(System.getProperty("user.home"), 
"kitty.history")
+        historyFile.createNewFile()
+        def history = new History(historyFile)
+        reader.setHistory history
+        reader.setDefaultPrompt prompt
+        reader.addCompletor(new SimpleCompletor(commands))
+    }
+
+    String read() {
+        reader?.readLine()?.trim()
+    }
+
+    void write(String message) {
+        reader.printString message
+    }
+}

Modified: 
incubator/kitty/trunk/src/main/groovy/org/apache/kitty/utils/Help.groovy
URL: 
http://svn.apache.org/viewvc/incubator/kitty/trunk/src/main/groovy/org/apache/kitty/utils/Help.groovy?rev=1299288&r1=1299287&r2=1299288&view=diff
==============================================================================
--- incubator/kitty/trunk/src/main/groovy/org/apache/kitty/utils/Help.groovy 
(original)
+++ incubator/kitty/trunk/src/main/groovy/org/apache/kitty/utils/Help.groovy 
Sat Mar 10 22:17:17 2012
@@ -24,14 +24,7 @@ package org.apache.kitty.utils
  */
 class Help {
 
-       /**
-        * 
-        */
-       public Help() {
-               toString()
-       }
-       
-       public String toString()
+       public String availableCommands()
        {
                StringBuffer sb = new StringBuffer()
                
@@ -43,14 +36,12 @@ class Help {
                sb.append "get <attribute> - Get an attribute from the remote 
host\n"
                sb.append "set <attribute> <value> - Set an attribute on the 
remote host\n"
                sb.append "setdomain <domain> - Set the domain in the current 
session\n"
-        sb.append "domains - List all available MBeanServer domains"
+        sb.append "domains - List all available MBeanServer domains\n"
                sb.append "invoke <operation> <parameters...> - Invoke an 
operation on the remote host\n"
                sb.append "ls - List all objects and attributes in current 
mbean path\n"
                sb.append "pwd - print working directory of mbean path \n"
 
-        /* echo command removed from help, but still currently functional. 
echo is deprecated */
-               
-               return sb.toString()
+        return sb.toString()
        }
 
 }


Reply via email to