function varargout = run_UTN_repo_test(varargin)
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  % DESCRIPTION: RUN_UTN_REPO_TEST tests submission/retrieval from a LTPDA
  % repository, for different size LTPDA User Objects and repeating each complete
  % test to build some statisics. In the case of Analysis Objects (AOs) they
  % contain tsdata, and the size is defined by the sampling frequency and
  % length in seconds
  %
  % CALL:        res = run_UTN_repo_test(pl)
  %
  % INPUTS:      pl - parameter list(s)
  %
  % OUTPUTS:     res  - a matrix of structs containing the test results
  %
  % PARAMETER LIST:
  % <key>             <default value>     <description>
  % 'N_REPEAT'        1                  number of repetitions for each test
  % 'HOSTNAME'        '130.75.117.67'   the repository host IP
  % 'DBASE'           'ltpda_test'     the database name
  % 'COLL_RETRIEVE'   false       retrieval performed via collection ID
  %                               rather than individually
  % 'N_OBJ'           10              number of objects to produce at a time.
  %                                   Insert 0 for random number
  % 'OBJ_TYPE'        'ao'              type of object to produce. Use 'RAND'
  %                                    or [] for random choice
  % 'NSECS'         1000            for AOs: vector with the lengths (in s) to test
  % 'FS'           	10                for AOs: sampling frequency in Hz
  % 'TEST_RESULTS_FILENAME' 'run_001'     a filename for the global results
  %                                       to be stored
  %
  % VERSION:     $Id: run_UTN_repo_test.m,v 1.10 2008/11/18 17:28:17 mauro Exp $
  %
  % HISTORY:     05-01-2008 M Hueller
  %                 Creation
  %              18-11-2008 M Hueller
  %                 Formatted for OO toolbox
  %                 Default plist extended
  %
  % M-FILE INFO: Get information about this methods by calling
  %              >> ao.getInfo('run_UTN_repo_test')
  %
  %              Get information about a specified set-plist by calling:
  %              >> ao.getInfo('run_UTN_repo_test', 'None')
  %
  % SEE ALSO: UTN_repo_test_func
  %
  % SEE: <a href="matlab: help ao/Contents;">HELP: All Analysis Object Functions:</a>
  %      <a href="matlab: helpwin ao/Contents;">DOC: All Analysis Object Functions:</a>
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  
  %% Check if this is a call for parameters
  if utils.helper.isinfocall(varargin{:})
    varargout{1} = getInfo(varargin{3});
    return
  end
  
  % Collect input variable names
  in_names = cell(size(varargin));
  for ii = 1:nargin
    in_names{ii} = inputname(ii);
  end
  
  % Collect all plists
  pls             = utils.helper.collect_objects(varargin(:), 'plist', in_names);
  
  %% ---------------- Produce one plist
  if isa(pls, 'plist')
    pls = combine(pls, getDefaultPlist());
  else
    pls = getDefaultPlist();
  end
  
  
  %% ---------------- Get parameters
  N_repeat = find(pls, 'N_repeat');
  nsecs = find(pls, 'NSECS');
  
  %% ---------------- Open the connection with database
  % Get the hostname
  hostname = find(pls, 'hostname');
  
  % Get the database name
  database_name = find(pls, 'dbase');
  
  % Establish the connection
  conn = utils.mysql.connect(hostname, database_name);
  
  %% ---------------- Main loop
  
  for jj = 1:length(nsecs)
    for kk = 1:N_repeat
      % Prepare the plist to pass to the actual test function
      pl_test = combine(plist('NSECS', nsecs(jj), ...
        'SUBMIT', true, ...         % Actually makes the submission
        'CONN', conn, ...
        'SAVE_OBJS', false, ...     % Don't save individual produced objects
        'SAVE_RESULTS', false, ...  % Don't save individual tests results
        'RESULTS_FILENAME', ''), ... % Not really needed since we don't save individual tests results
        pls);
      
      % Actual call to the test routine
      results(jj, kk) = UTN_repo_test_func(pl_test);
      track(jj, kk) = nsecs(jj);
    end
  end
  save([find(pls,'test_results_filename') '.mat'], 'results', 'track');
  
  
  %% Close the connection
  close (conn);
  
  
  %% Outputs
  varargout{1} = results;
  varargout{2} = track;
end

%--------------------------------------------------------------------------
% Get Info Object
%--------------------------------------------------------------------------
function ii = getInfo(varargin)
  if nargin == 1 && strcmpi(varargin{1}, 'None')
    sets = {};
    pl   = [];
  else
    sets = {'Default'};
    pl   = getDefaultPlist;
  end
  % Build info object
  ii = minfo(mfilename, 'ao', '', utils.const.categories.helper, '$Id: run_UTN_repo_test.m,v 1.10 2008/11/18 17:28:17 mauro Exp $', sets, pl);
end

%--------------------------------------------------------------------------
% Get Default Plist
%--------------------------------------------------------------------------
function plo = getDefaultPlist()
  
  disp('* creating default plist...');
  plo = plist('HOSTNAME', '130.75.117.67', ...
    'DBASE', 'ltpda_test', ...
    'COLL_RETRIEVE', false, ...
    'OBJ_TYPE', 'rand', ...
    'N_OBJ', 10, ...
    'N_REPEAT', 2, ...
    'NSECS', [1000], ...
    'FS', 10, ...
    'TEST_RESULTS_FILENAME', 'run_001');
  
  disp('* done.');
  
  
  
end

% END

