Mercurial > hg > ltpda
diff m-toolbox/classes/@LTPDARepositoryManager/copyObjects.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@LTPDARepositoryManager/copyObjects.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,177 @@ +% COPYOBJECTS This function copies objects from one repository to another. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% description: This static function copies objects from one repository to another. +% +% call: LTPDARepositoryManager.copyObjects(pl); +% LTPDARepositoryManager.copyObjects([1 2 3], +% 'hostname1', +% 'database1', +% 'username1', +% 'hostname2', +% 'database2', +% 'username2'); +% +% <a href="matlab:web(LTPDARepositoryManager.getInfo('LTPDARepositoryManager.copyObjects').tohtml, '-helpbrowser')">Parameters Description</a> +% +% version: $Id: copyObjects.m,v 1.5 2011/04/08 08:56:35 hewitson Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function varargout = copyObjects(varargin) + + % Check if this is a call for parameters + if utils.helper.isinfocall(varargin{:}) + varargout{1} = getInfo(varargin{3}); + return + end + + import utils.const.* + utils.helper.msg(msg.PROC3, 'running %s/%s', mfilename('class'), mfilename); + + % Collect all plists + [pl, invars, rest] = utils.helper.collect_objects(varargin(:), 'plist'); + + pl = combine(pl, getDefaultPlist); + ids = pl.find('ids'); + hostname1 = pl.find('hostname1'); + database1 = pl.find('database1'); + username1 = pl.find('username1'); + hostname2 = pl.find('hostname2'); + database2 = pl.find('database2'); + username2 = pl.find('username2'); + + % Check through 'rest' + if numel(rest) > 0 + ids = rest{1}; + end + if numel(rest) > 1 + hostname1 = rest{2}; + end + if numel(rest) > 2 + database1 = rest{3}; + end + if numel(rest) > 3 + username1 = rest{4}; + end + if numel(rest) > 4 + hostname2 = rest{5}; + end + if numel(rest) > 5 + database2 = rest{6}; + end + if numel(rest) > 6 + username2 = rest{7}; + end + + % Some plausibility checks + if isempty(ids) + error('### This method needs at least one object id which you want to copy.'); + end + + % Get the repository manager - there should only be one! + rm = LTPDARepositoryManager(); + + % Get connection + conn1 = rm.findConnections(hostname1, database1, username1); + if numel(conn1) == 0 + conn1 = rm.newConnection(hostname1, database1, username1); + elseif numel(conn1) > 1 + conn1 = rm.manager.selectConnection([]); + end + + if isempty(conn1) + error('### It is necessary to create or select a connection.'); + end + + % open connection + conn1.openConnection(); + if ~conn1.isConnected() + error('### Can not open the connection.'); + end + + try + + objs = ltpda_uo.retrieve(conn1, ids); + if ~iscell(objs) + objs = {objs}; + end + sinfo = LTPDARepositoryManager.getSinfo(ids, ... + char(conn1.getHostname), char(conn1.getDatabase), char(conn1.getUsername)); + + pl = plist('hostname', hostname2, 'database', database2, 'username', username2, 'no dialog', true); + for oo = 1:numel(objs) + obj = objs{oo}; + obj.submit(sinfo(oo), pl); + end + catch Exception + disp(Exception.message); + error('### Copying failed.'); + end + +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Local Functions % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: getInfo +% +% DESCRIPTION: Returns the method-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, 'LTPDARepositoryManager', 'ltpda', utils.const.categories.helper, '$Id: copyObjects.m,v 1.5 2011/04/08 08:56:35 hewitson Exp $', sets, pl); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: getDefaultPlist +% +% DESCRIPTION: Returns the default PLIST +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function pl = getDefaultPlist() + + % Initialise plist + pl = plist(); + + % ids + p = param({'ids', 'Object identifications of which you want to copy.'}, paramValue.EMPTY_DOUBLE); + pl.append(p); + + % hostname1 + p = param({'hostname1', 'The hostname of the ''old'' repository.'}, paramValue.EMPTY_STRING); + pl.append(p); + + % database1 + p = param({'database1', 'The database of the ''old'' repository.'}, paramValue.EMPTY_STRING); + pl.append(p); + + % username1 + p = param({'username1', 'The username for the ''old'' repository.'}, paramValue.EMPTY_STRING); + pl.append(p); + + % hostname2 + p = param({'hostname2', 'The hostname of the ''new'' repository.'}, paramValue.EMPTY_STRING); + pl.append(p); + + % database2 + p = param({'database2', 'The database of the ''new'' repository.'}, paramValue.EMPTY_STRING); + pl.append(p); + + % username2 + p = param({'username2', 'The username for the ''new'' repository.'}, paramValue.EMPTY_STRING); + pl.append(p); + +end