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
+