You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/18 13:58:39 UTC

svn commit: r1232870 - in /openejb/trunk/openejb/server/openejb-ssh/src: main/java/org/apache/openejb/server/ssh/ test/java/org/apache/openejb/server/ssh/

Author: rmannibucau
Date: Wed Jan 18 12:58:39 2012
New Revision: 1232870

URL: http://svn.apache.org/viewvc?rev=1232870&view=rev
Log:
some enhancing for ssh module

Added:
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java
      - copied, changed from r1232827, openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyCommand.java
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java
      - copied, changed from r1232827, openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyShellFactory.java
Removed:
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyCommand.java
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyShellFactory.java
Modified:
    openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java
    openejb/trunk/openejb/server/openejb-ssh/src/test/java/org/apache/openejb/server/ssh/SSHServerTest.java

Copied: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java (from r1232827, openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyCommand.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java?p2=openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java&p1=openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyCommand.java&r1=1232827&r2=1232870&rev=1232870&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyCommand.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBCommands.java Wed Jan 18 12:58:39 2012
@@ -8,24 +8,32 @@ import org.apache.sshd.server.Command;
 import org.apache.sshd.server.Environment;
 import org.apache.sshd.server.ExitCallback;
 
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.util.Collection;
 
-public class GroovyCommand implements Command, Runnable {
+public class OpenEJBCommands implements Command, Runnable {
     public static final String EXIT_COMMAND = "exit";
-    public static final String LINE_SEP = System.getProperty("line.separator");
+    private static final String GROOVY_PREFIX = "G ";
+    private static final String WELCOME = "Welcome on your $bind:$port $name server";
+    public static final String LINE_SEP = "\r\n"; // don't use line.separator (sshd use this one)
+    public static final String OS_LINE_SEP = System.getProperty("line.separator");
     public static final String PROMPT = "openejb> ";
 
     private OpenEJBGroovyShell shell;
     private OutputStreamWriter serr;
     private OutputStreamWriter sout;
-    private InputStream sin;
     private ExitCallback cbk;
+    private InputStream sin;
+    private String bind;
+    private int port;
+
+    public OpenEJBCommands(String bind, int port) {
+        this.bind = bind;
+        this.port = port;
+    }
 
     @Override
     public void setInputStream(InputStream in) {
@@ -61,21 +69,40 @@ public class GroovyCommand implements Co
     @Override
     public void run() {
         try {
-            final ConsoleReader reader = new ConsoleReader(sin, sout);
-            reader.setBellEnabled(false);
+            System.setProperty("line.separator", LINE_SEP);
+            final ConsoleReader reader;
+            synchronized (OpenEJBCommands.class) {
+                reader = new ConsoleReader(sin, sout);
+            }
+            System.setProperty("line.separator", OS_LINE_SEP);
             // TODO : add completers with method names...?
 
-            // TODO: why is it adding spaces?
+            String name = "OpenEJB";
+            try {
+                getClass().getClassLoader().loadClass("org.apache.tomee.loader.TomcatHook");
+                name = "TomEE";
+            } catch (ClassNotFoundException cnfe) {
+                // ignored, we are using a simple OpenEJB server
+            }
+
             String line;
+            write(sout, WELCOME // simple replace for now, if it is mandatory we could bring velocity to do it
+                    .replace("$bind", bind)
+                    .replace("$port", Integer.toString(port))
+                    .replace("$name", name));
             while ((line = reader.readLine(PROMPT)) != null) {
                 if (EXIT_COMMAND.equals(line)) {
                     break;
                 }
 
-                try {
-                    write(sout, result(line));
-                } catch (SshRuntimeException sshEx) {
-                    write((Exception) sshEx.getCause());
+                if (line.startsWith(GROOVY_PREFIX)) {
+                    try {
+                        write(sout, result(line));
+                    } catch (SshRuntimeException sshEx) {
+                        write((Exception) sshEx.getCause());
+                    }
+                } else {
+                    write(sout, "sorry i don't understand '" + line + "'");
                 }
             }
         } catch (IOException e) {
@@ -103,7 +130,7 @@ public class GroovyCommand implements Co
         } else {
             final StringBuilder error = new StringBuilder();
             for (StackTraceElement elt : e.getStackTrace()) {
-                error.append(elt.toString() + LINE_SEP);
+                error.append(elt.toString()).append(LINE_SEP);
             }
             write(serr, error.toString());
         }
@@ -123,13 +150,11 @@ public class GroovyCommand implements Co
         if (out instanceof Collection) {
             final StringBuilder builder = new StringBuilder();
             for (Object o : (Collection) out) {
-                builder.append(string(o) + LINE_SEP);
+                builder.append(string(o)).append(LINE_SEP);
             }
+            return builder.toString();
         }
-        if (out != null) {
-            return string(out);
-        }
-        return null;
+        return string(out);
     }
 
     private static String string(Object out) {

Copied: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java (from r1232827, openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyShellFactory.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java?p2=openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java&p1=openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyShellFactory.java&r1=1232827&r2=1232870&rev=1232870&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/GroovyShellFactory.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/OpenEJBShellFactory.java Wed Jan 18 12:58:39 2012
@@ -3,9 +3,17 @@ package org.apache.openejb.server.ssh;
 import org.apache.sshd.common.Factory;
 import org.apache.sshd.server.Command;
 
-public class GroovyShellFactory implements Factory<Command> {
+public class OpenEJBShellFactory implements Factory<Command> {
+    private String bind;
+    private int port;
+
+    public OpenEJBShellFactory(String bind, int port) {
+        this.bind = bind;
+        this.port = port;
+    }
+
     @Override
     public Command create() {
-        return new GroovyCommand();
+        return new OpenEJBCommands(bind, port);
     }
 }

Modified: openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java?rev=1232870&r1=1232869&r2=1232870&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/main/java/org/apache/openejb/server/ssh/SSHServer.java Wed Jan 18 12:58:39 2012
@@ -22,19 +22,15 @@ import org.apache.openejb.server.ServerS
 import org.apache.openejb.server.ServiceException;
 import org.apache.sshd.SshServer;
 import org.apache.sshd.common.util.SecurityUtils;
-import org.apache.sshd.server.PublickeyAuthenticator;
-import org.apache.sshd.server.command.ScpCommandFactory;
 import org.apache.sshd.server.jaas.JaasPasswordAuthenticator;
 import org.apache.sshd.server.keyprovider.PEMGeneratorHostKeyProvider;
 import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
-import org.apache.sshd.server.session.ServerSession;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.Socket;
-import java.security.PublicKey;
 import java.util.Properties;
 
 public class SSHServer implements ServerService, SelfManaging {
@@ -62,7 +58,7 @@ public class SSHServer implements Server
             sshServer.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File(basePath, KEY_NAME + ".ser").getPath()));
         }
 
-        sshServer.setShellFactory(new GroovyShellFactory());
+        sshServer.setShellFactory(new OpenEJBShellFactory(bind, port));
 
         try {
             sshServer.start();
@@ -82,12 +78,12 @@ public class SSHServer implements Server
 
     @Override
     public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
-
+        // no-op
     }
 
     @Override
     public void service(Socket socket) throws ServiceException, IOException {
-
+        // no-op
     }
 
     @Override

Modified: openejb/trunk/openejb/server/openejb-ssh/src/test/java/org/apache/openejb/server/ssh/SSHServerTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ssh/src/test/java/org/apache/openejb/server/ssh/SSHServerTest.java?rev=1232870&r1=1232869&r2=1232870&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ssh/src/test/java/org/apache/openejb/server/ssh/SSHServerTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ssh/src/test/java/org/apache/openejb/server/ssh/SSHServerTest.java Wed Jan 18 12:58:39 2012
@@ -46,6 +46,11 @@ public class SSHServerTest {
 
     @Test
     public void call() {
+        while (Thread.currentThread().isAlive()) try {
+            Thread.sleep(100);
+        } catch (InterruptedException e) {
+            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+        }
         System.out.println("ok");
     }
 }