001/*
002 * Copyright (c) 2004-2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: berkley $'
006 * '$Date: 2010-04-28 00:12:36 +0000 (Wed, 28 Apr 2010) $'
007 * '$Revision: 24000 $'
008 *
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029package org.kepler.ssh;
030
031import java.util.Hashtable;
032
033import org.apache.commons.logging.Log;
034import org.apache.commons.logging.LogFactory;
035
036import com.sshtools.j2ssh.SshClient;
037
038
039/**
040 * This class provides a factory to store gsi ssh sessions. The reference to a
041 * session is with "user@host:port". It should be used by the GsiSshExec class only.
042 * This is based on SshSessionFactory written by Norbert Podhorszki
043 * <p>
044 * @author Chandrika Sivaramakrishnan
045 */
046public class GsiSshSessionFactory {
047
048        /* Singleton object */
049        protected final static GsiSshSessionFactory instance = new GsiSshSessionFactory();
050
051        /* Private variables */
052        private static Hashtable<String,SshClient> sessionClients = new Hashtable<String, SshClient>();
053
054        private static final Log log = LogFactory.getLog(GsiSshSessionFactory.class
055                        .getName());
056        private GsiSshSessionFactory() {
057        }
058
059        // protected synchronized static SshSession getSession( String user, String
060        // host ) {
061        // return getSession(user, host, 22); // default port 22
062        // }
063
064        protected synchronized static SshClient getSshClient(String user,
065                        String host, int port) {
066                SshClient sshClient;
067                if (port <= 0)
068                        port = 22;
069                log.debug(" ++ GsisshSessionFactory.getSshClient() called for " +
070                 user + "@" + host + ":" + port);
071                sshClient = (SshClient) sessionClients
072                                .get(user + "@" + host + ":" + port);
073                if (sshClient == null) {
074                        log.debug("SshClient does NOT exists in hashtable for "+
075                                         user + "@" + host + ":" + port);
076                        sshClient = new SshClient();
077
078                        sessionClients.put(user + "@" + host + ":" + port, sshClient);
079                }else {
080                        log.debug("Session EXISTS in hashtable for "+
081                                         user + "@" + host + ":" + port);
082                }
083                return sshClient;
084        }
085}