/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.connection; import Sirius.navigator.connection.proxy.ConnectionProxy; import Sirius.navigator.connection.proxy.ConnectionProxyHandler; import Sirius.navigator.exception.ConnectionException; import Sirius.server.newuser.UserException; import org.apache.log4j.Logger; import de.cismet.netutil.Proxy; /** * A singleton factory class that creates and manages connections. * * @author Pascal * @author martin.scholl@cismet.de * @version 1.0 12/22/2002 */ public class ConnectionFactory { //~ Static fields/initializers --------------------------------------------- private static final transient Logger LOG = Logger.getLogger(ConnectionFactory.class); // singleton shared instance private static final ConnectionFactory factory = new ConnectionFactory(); //~ Constructors ----------------------------------------------------------- /** * Creates a new ConnectionFactory object. */ private ConnectionFactory() { if (LOG.isDebugEnabled()) { LOG.debug("creating singleton shared ConnectionManager instance"); // NOI18N } } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static ConnectionFactory getFactory() { return factory; } /** * Creates and initializes a new shared connection instance. * * @param connectionClassName DOCUMENT ME! * @param callserverURL DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! */ public Connection createConnection(final String connectionClassName, final String callserverURL) throws ConnectionException { final Connection connection = createConnection(connectionClassName); connection.connect(callserverURL); return connection; } /** * DOCUMENT ME! * * @param connectionClassName DOCUMENT ME! * @param callserverURL DOCUMENT ME! * @param proxy DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! */ public Connection createConnection(final String connectionClassName, final String callserverURL, final Proxy proxy) throws ConnectionException { final Connection connection = createConnection(connectionClassName); connection.connect(callserverURL, proxy); return connection; } /** * DOCUMENT ME! * * @param connectionClassName DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! */ private Connection createConnection(final String connectionClassName) throws ConnectionException { try { if (LOG.isDebugEnabled()) { LOG.debug("creating connection class instance '" + connectionClassName + "'"); // NOI18N } return (Connection)Class.forName(connectionClassName).newInstance(); } catch (ClassNotFoundException cne) { final String message = "connection class '" + connectionClassName + "' not found"; // NOI18N LOG.fatal(message, cne); throw new ConnectionException(message, cne); } catch (final InstantiationException ie) { final String message = "could not instantiate connection class '" + connectionClassName + "'"; // NOI18N LOG.fatal(message, ie); throw new ConnectionException(message, ie); } catch (IllegalAccessException iae) { final String message = "could not instantiate connection class '" + connectionClassName + "'"; // NOI18N LOG.fatal(message, iae); throw new ConnectionException(message, iae); } } /** * DOCUMENT ME! * * @param connection DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws RuntimeException DOCUMENT ME! */ public ConnectionSession createSession(final Connection connection) throws ConnectionException { try { return new ConnectionSession(connection); } catch (final UserException ue) { final String message = "could not create connection session for connection"; // NOI18N LOG.fatal(message, ue); throw new RuntimeException(message, ue); } } /** * DOCUMENT ME! * * @param connection DOCUMENT ME! * @param connectionInfo DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public ConnectionSession createSession(final Connection connection, final ConnectionInfo connectionInfo) throws ConnectionException, UserException { return new ConnectionSession(connection, connectionInfo); } /** * DOCUMENT ME! * * @param connection DOCUMENT ME! * @param connectionInfo DOCUMENT ME! * @param autoLogin DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public ConnectionSession createSession(final Connection connection, final ConnectionInfo connectionInfo, final boolean autoLogin) throws ConnectionException, UserException { return new ConnectionSession(connection, connectionInfo, autoLogin); } /** * DOCUMENT ME! * * @param connection DOCUMENT ME! * @param usergroupDomain DOCUMENT ME! * @param usergroup DOCUMENT ME! * @param userDomain DOCUMENT ME! * @param username DOCUMENT ME! * @param password DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public ConnectionSession createSession(final Connection connection, final String usergroupDomain, final String usergroup, final String userDomain, final String username, final String password) throws ConnectionException, UserException { final ConnectionInfo connectionInfo = new ConnectionInfo(); connectionInfo.setUsername(username); connectionInfo.setPassword(password); connectionInfo.setUsergroup(usergroup); connectionInfo.setUserDomain(userDomain); connectionInfo.setUsergroupDomain(usergroupDomain); return new ConnectionSession(connection, connectionInfo); } /** * DOCUMENT ME! * * @param connectionProxyHandlerClassName DOCUMENT ME! * @param connectionSession DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! */ public ConnectionProxy createProxy(final String connectionProxyHandlerClassName, final ConnectionSession connectionSession) throws ConnectionException { final ConnectionProxyHandler connectionProxyHandler; try { if (LOG.isDebugEnabled()) { LOG.debug("creating connection proxy handler instance '" + connectionProxyHandlerClassName + "'"); // NOI18N } connectionProxyHandler = (ConnectionProxyHandler)Class.forName(connectionProxyHandlerClassName) .getConstructor(new Class[] { ConnectionSession.class }) .newInstance(new Object[] { connectionSession }); } catch (final ClassNotFoundException cne) { final String message = "connection proxy handler class '" + connectionProxyHandlerClassName + "' not found"; // NOI18N LOG.fatal(message, cne); throw new ConnectionException(message, cne); } catch (final Exception e) { final String message = "could not instantiate connection proxy handler class '" // NOI18N + connectionProxyHandlerClassName + "'"; // NOI18N LOG.fatal(message, e); throw new ConnectionException(message, e); } try { if (LOG.isDebugEnabled()) { LOG.debug("creating the connection proxy"); // NOI18N } return (ConnectionProxy)java.lang.reflect.Proxy.newProxyInstance(ConnectionProxy.class.getClassLoader(), new Class[] { ConnectionProxy.class }, connectionProxyHandler); } catch (final Exception e) { final String message = "could not create connection proxy"; // NOI18N LOG.fatal(message, e); throw new ConnectionException(message, e); } } /** * DOCUMENT ME! * * @param connectionClassName DOCUMENT ME! * @param connectionProxyHandlerClassName DOCUMENT ME! * @param connectionInfo DOCUMENT ME! * @param autoLogin DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public ConnectionProxy createProxy(final String connectionClassName, final String connectionProxyHandlerClassName, final ConnectionInfo connectionInfo, final boolean autoLogin) throws ConnectionException, UserException { final Connection connection = createConnection(connectionClassName, connectionInfo.getCallserverURL()); final ConnectionSession connectionSession = createSession(connection, connectionInfo, autoLogin); return createProxy(connectionProxyHandlerClassName, connectionSession); } /** * DOCUMENT ME! * * @param connectionClassName DOCUMENT ME! * @param connectionProxyHandlerClassName DOCUMENT ME! * @param connectionInfo DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public ConnectionProxy createProxy(final String connectionClassName, final String connectionProxyHandlerClassName, final ConnectionInfo connectionInfo) throws ConnectionException, UserException { return createProxy(connectionClassName, connectionProxyHandlerClassName, connectionInfo, true); } }