% CONNECT Connects to an LTPDA repository and returns the connection object.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION: Connects to an LTPDA repository and returns the connection
% object. The provided credentials are stored in a persistent utility, and
% reused when a connection to the same database and server is requested.
%
% If credentials for the requested database and server are not given, and are
% not in the utility, the user is prompted for the missing informations.
% Credentials are set to expire and to be entered again after a time defined
% in the LTPDA user preferences.
%
% CALL:        conn = connect(hostname)
%              conn = connect(hostname, dbname)
%              conn = connect(hostname, dbname, dbuser, dbpass)
%
% VERSION:     $Id: connect.m,v 1.13 2011/04/01 08:36:49 hewitson Exp $
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function varargout = connect(varargin)
  
  dbuser = '';
  dbpass = '';
  dbhost = '';
  dbname = '';
  
  if nargin == 1
    dbhost = varargin{1};
  elseif nargin == 2
    dbhost = varargin{1};
    dbname = varargin{2};
  elseif nargin == 3
    dbhost = varargin{1};
    dbname = varargin{2};
  elseif nargin == 4
    dbhost = varargin{1};
    dbname = varargin{2};
    dbuser = varargin{3};
    dbpass = varargin{4};
  elseif nargin == 5
    dbhost = varargin{1};
    dbname = varargin{2};
    dbuser = varargin{3};
    dbpass = varargin{4};
  end
  
  rm = LTPDARepositoryManager();
  conn = rm.findConnections(dbhost, dbname, dbuser, dbpass);
  
  if isempty(conn)
    conn = rm.newConnection(dbhost, dbname, dbuser, dbpass);
  end
  
  if ~isempty(dbpass) && isempty(char(conn.getPassword))
    conn.setPassword(dbpass)
  end
  
  % If we have more than one matching connection, let the user choose.
  if numel(conn) > 1
    conn = rm.manager.selectConnection([]);
  end
  
  varargout{1} = conn(1);
end
