Mercurial > hg > ltpda
diff m-toolbox/classes/@workspaceBrowser/retrieveObjectsFromDialog.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children | 317b5f447f3e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@workspaceBrowser/retrieveObjectsFromDialog.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,146 @@ + + + +function retrieveObjectsFromDialog(varargin) + + if ~isa(varargin{1}, 'mpipeline.repository.RepositoryRetrieveDialog') + error('### The first input must be a mpipeline.repository.RepositoryRetrieveDialog'); + end + if ~isa(varargin{2}, 'mpipeline.repository.RepositoryConnection') + error('### The first input must be a mpipeline.repository.RepositoryConnection'); + end + + qb = varargin{1}; + conn = varargin{2}; + + % Get object IDs + obj_ids = qb.getObjectIDs; + col_ids = qb.getCollectionIDs; + + if isempty(obj_ids) && isempty(col_ids) + utils.helper.errorDlg('Please enter either a object ID or a collection ID.'); + return + end + + % object prefix + obj_prefix = char(qb.getObjectPrefix); + + % append object type? + appendObjectType = qb.appendObjectType; + + % binary retrieval? + binaryRetrieval = qb.useBinaryRetrieval; + + % file extension + fileext = qb.getSaveFileExtension; + + [objs, obj_names] = retrieveObjects(conn, obj_ids, col_ids, binaryRetrieval, obj_prefix, appendObjectType); + + if qb.isSaveObjects + save_objects(objs, obj_names, fileext); + else + import_objects(objs, obj_names); + end + +end + +function save_objects(objs, obj_names, fileext) + for j=1:length(objs) + if isvarname(obj_names{j}) + save(objs{j}, [obj_names{j} char(fileext)]); + else + utils.helper.errorDlg('Can not save the object(s) because you used a not valid prefix name.'); + end + end +end + +function import_objects(objs, obj_names) + for j=1:length(objs) + if isvarname(obj_names{j}) + assignin('base', obj_names{j}, objs{j}); + else + utils.helper.errorDlg('Can not import the object(s) because you used a not valid prefix name.'); + end + end +end + +function [objs, obj_names] = retrieveObjects(conn, ids, cids, retrieveBinary, prefix, appendObj) + + + %--------------------------------------------------------------- + % Retrieve these ids + objs = {}; + obj_names = {}; + for j=1:length(ids) + disp(sprintf('+ retrieving object %d', ids(j))); + + % determine object type + tt = char(mpipeline.repository.MySQLUtils.getObjectTypeForID(conn, ids(j))); + + if isempty(tt) || strcmp(tt, 'No Data') + utils.helper.errorDlg('Object type is unknown. Does this object really exist?'); + return + end + + objname = sprintf('%s%03d', prefix, ids(j)); + if appendObj + objname = [objname '_' tt]; + end + obj_names = [obj_names {objname}]; + + % Retrieve object + hostname = char(conn.getHostname); + db = char(conn.getDatabase); + % add history + pl = plist('hostname', hostname, 'database', db, 'ID', ids(j), 'conn', conn); + if retrieveBinary + pl.append('Binary', 'yes'); + disp(sprintf('*** performing binary retrieval.')); + end + obj = eval(sprintf('%s(pl);', tt)); + + objs = [objs {obj}]; + end + + %--------------------------------------------------------------- + % Retrieve these Collections + for k=1:length(cids) + + % get Ids from Cid + ids = mpipeline.repository.MySQLUtils.getObjectIDsFromCollectionID(conn, cids(k)); + if isempty(ids) + error('### This collection doesn''t seem to exist.'); + end + + for j=1:length(ids) + disp(sprintf('+ retrieving collection %d : %d', cids(k), ids(j))); + tt = char(mpipeline.repository.MySQLUtils.getObjectTypeForID(conn, ids(j))); + if ismember(tt, utils.helper.ltpda_userclasses) + % Retrieve object + if isa(conn, 'database') + ipbits = regexp(conn.URL, '([0-9]+)', 'match'); + ip = [ipbits{1} '.' ipbits{2} '.' ipbits{3} '.' ipbits{4}]; + db = regexp(conn.URL, '/', 'split'); + db = db{end}; + else + ip = conn.getHostname; + db = conn.getDatabase; + end + % add history + pl = plist('hostname', ip, 'database', db, 'ID', ids(j), 'conn', conn); + obj = eval(sprintf('%s(pl);', tt)); + + objname = sprintf('%sC%03d_%03d', prefix, cids(k), ids(j)); + if appendObj + objname = [objname '_' tt]; + end + obj_names = [obj_names {objname}]; + objs = [objs {obj}]; + else + warning('!!! Objects of type %s are no longer considered user objects and can not be retrieved.', tt); + end + end + end + +end +