/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.connection; /******************************************************************************* Copyright (c) : EIG (Environmental Informatics Group) http://www.enviromatics.net Prof. Dr. Reiner Guettler Prof. Dr. Ralf Denzer HTW University of Applied Sciences Goebenstr. 40 66117 Saarbruecken, Germany Programmers : Pascal <pascal@enviromatics.net> Project : Sirius Version : 1.0 Purpose : Created : 12/20/2002 History : *******************************************************************************/ import Sirius.navigator.exception.ConnectionException; import Sirius.server.newuser.*; import Sirius.server.newuser.permission.*; import org.apache.log4j.*; import java.rmi.*; /** * Stores a <code>Connection</code> and a <code>User</code> Object. * * @author Pascal * @version 1.0 12/22/2002 */ public class ConnectionSession { //~ Static fields/initializers --------------------------------------------- private static final Logger logger = Logger.getLogger(ConnectionSession.class); //~ Instance fields -------------------------------------------------------- private final Connection connection; private final ConnectionInfo connectionInfo; // private final Permission writePermission; private boolean loggedin = false; private User user; //~ Constructors ----------------------------------------------------------- /** * Creates a new instance of ConnectionSession. * * @param connection DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ protected ConnectionSession(final Connection connection) throws ConnectionException, UserException { this(connection, new ConnectionInfo(), false); } /** * Creates a new instance of ConnectionSession. * * @param connection DOCUMENT ME! * @param connectionInfo DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ protected ConnectionSession(final Connection connection, final ConnectionInfo connectionInfo) throws ConnectionException, UserException { this(connection, connectionInfo, true); } /** * Creates a new ConnectionSession object. * * @param connection DOCUMENT ME! * @param connectionInfo DOCUMENT ME! * @param autoLogin DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ protected ConnectionSession(final Connection connection, final ConnectionInfo connectionInfo, final boolean autoLogin) throws ConnectionException, UserException { if (logger.isDebugEnabled()) { logger.debug("creating new connection session"); // NOI18N } this.connection = connection; this.connectionInfo = connectionInfo; // this.writePermission = new Permission(PermissionHolder.WRITE, "write", "accessExplicit"); if (autoLogin) { loggedin = login(); } } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public Connection getConnection() { return this.connection; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public User getUser() { return this.user; } /** * public Permission getWritePermission() { return this.writePermission; }. * * @param usergroupDomain DOCUMENT ME! * @param usergroup DOCUMENT ME! * @param userDomain DOCUMENT ME! * @param username DOCUMENT ME! * @param password DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public void login(final String usergroupDomain, final String usergroup, final String userDomain, final String username, final String password) throws ConnectionException, UserException { if (loggedin && (user != null) && connectionInfo.getUsergroupDomain().equals(usergroupDomain) && connectionInfo.getUsergroup().equals(usergroup) && connectionInfo.getUserDomain().equals(userDomain) && connectionInfo.getUsername().equals(username) && connectionInfo.getPassword().equals(password)) { logger.warn("can't perform login: this user '" + connectionInfo.getUsername() + "' is already logged in"); // NOI18N } else { if (loggedin && (user != null)) { if (logger.isInfoEnabled()) { logger.info("logging out user '" + connectionInfo.getUsername() + "'"); // NOI18N } } connectionInfo.setUsername(username); connectionInfo.setPassword(password); connectionInfo.setUsergroup(usergroup); connectionInfo.setUserDomain(userDomain); connectionInfo.setUsergroupDomain(usergroupDomain); loggedin = login(); } } /** * DOCUMENT ME! * * @param userDomain DOCUMENT ME! * @param username DOCUMENT ME! * @param password DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ public void login(final String userDomain, final String username, final String password) throws ConnectionException, UserException { if (loggedin && (user != null) && connectionInfo.getUserDomain().equals(userDomain) && connectionInfo.getUsername().equals(username) && connectionInfo.getPassword().equals(password)) { logger.warn("can't perform login: this user '" + connectionInfo.getUsername() + "' is already logged in"); // NOI18N } else { if (loggedin && (user != null)) { if (logger.isInfoEnabled()) { logger.info("logging out user '" + connectionInfo.getUsername() + "'"); // NOI18N } } connectionInfo.setUsername(username); connectionInfo.setPassword(password); connectionInfo.setUsergroup(null); connectionInfo.setUserDomain(userDomain); connectionInfo.setUsergroupDomain(null); loggedin = login(); } } /** * DOCUMENT ME! * * @return DOCUMENT ME! * * @throws ConnectionException DOCUMENT ME! * @throws UserException DOCUMENT ME! */ private boolean login() throws ConnectionException, UserException { if (!connection.isConnected()) { logger.error("can't login: no connection established"); // NOI18N throw new ConnectionException("can't login: no connection established", ConnectionException.ERROR); // NOI18N } try { if (logger.isDebugEnabled()) { logger.debug("logging in user '" + connectionInfo.getUsergroupDomain() + "' '" + connectionInfo.getUsergroup() + "' '" + connectionInfo.getUserDomain() + "' '" + connectionInfo.getUsername() + "' '" /*+ connectionInfo.getPassword() + "'"*/); // NOI18N } this.user = connection.getUser(connectionInfo.getUsergroupDomain(), connectionInfo.getUsergroup(), connectionInfo.getUserDomain(), connectionInfo.getUsername(), connectionInfo.getPassword()); } catch (UserException ue) { logger.warn("can't login: wrong user informations", ue); // NOI18N throw ue; } catch (ConnectionException ce) { logger.fatal("[ServerError] can't login"); // NOI18N // throw new ConnectionException("[ServerError] can't login", ConnectionException.FATAL, re); throw ce; } return true; } /** * DOCUMENT ME! */ public void logout() { this.loggedin = false; this.user = null; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isLoggedin() { return this.loggedin; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isConnected() { try { return this.connection.isConnected(); } catch (Exception ex) { logger.fatal("An unexpected exception occoured in method 'Connection.isConnected()'", ex); // NOI18N return false; } } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ConnectionInfo getConnectionInfo() { return this.connectionInfo; } }