diff m-toolbox/classes/@LTPDAworkbench/cb_importWBfromObjects.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/@LTPDAworkbench/cb_importWBfromObjects.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,131 @@
+% CB_IMPORTFROMOBJECT import pipelines from an object in the workspace.
+%
+% CALL: LTPDAworkbench.cb_importWBfromObjects
+%
+% M Hewitson 13-11-08
+%
+% $Id: cb_importWBfromObjects.m,v 1.4 2010/08/06 19:10:48 ingo Exp $
+%
+function cb_importWBfromObjects(varargin)
+  
+  wb = varargin{1};
+  
+  % Display an option dialog
+  % - from workspace
+  % - from file
+  warning('off', 'MATLAB:JavaEDTAutoDelegation');
+  cd = mpipeline.dialogs.FileOrWorkspaceDialog(wb.mp, true);
+  cd.setVisible(true);
+  warning('on', 'MATLAB:JavaEDTAutoDelegation');
+  
+  xml = '';
+  if ~cd.isCancelled
+    
+    choice = cd.getChoice;
+    
+    if strcmp(choice, 'workspace')
+      
+      [objs, varnames] = getWorkspaceObjs();
+      
+      % check we have a least one object with an attached workbench
+      haveWB = false;
+      for kk=1:numel(objs)
+        for ll=1:numel(objs{kk})
+          if ~isempty(objs{kk}(ll).mdlfile)
+            haveWB = true;
+          end
+        end
+      end
+      
+      if ~haveWB
+        utils.helper.errorDlg('The workspace contains no LTPDA objects with attached workbenches.', 'No workbench found');
+      end
+      
+      % Add all objects to the workspace viewer that have an attached
+      % workbench file.
+      wd = mpipeline.dialogs.WorkspaceLister(wb.mp,true);
+      for kk=1:numel(varnames)
+        for ll=1:numel(objs{kk})
+          objs{kk}(ll).mdlfile
+          if ~isempty(objs{kk}(ll).mdlfile)
+            wd.addObject(varnames(kk).name, varnames(kk).class, char(objs{kk}(ll)));
+          end
+        end
+      end
+      
+      % launch the dialog
+      warning('off', 'MATLAB:JavaEDTAutoDelegation');
+      wd.setVisible(true);
+      warning('on', 'MATLAB:JavaEDTAutoDelegation');
+      
+      % check what the user did
+      if ~wd.isCancelled
+        % get the selected object
+        wsobj = wd.getSelection;
+        obj = [];
+        if ~isempty(wsobj)
+          % look for the matching object in the MATLAB workspace
+          for kk=1:numel(objs)
+            if strcmp(varnames(kk).name, char(wsobj.getName)) && ...
+                strcmp(varnames(kk).class, char(wsobj.getObjectclass))
+              obj = objs{kk};
+            end
+          end
+        end
+        if ~isempty(obj)
+          % get xml file
+          xml = obj.mdlfile;
+        end
+      end
+      
+      
+    elseif strcmp(choice, 'file')
+      
+      [filename, pathname] = uigetfile({'*.xml', 'Pick an XML object file'; '*.mat', 'Pick a MAT object file'});
+      if isequal(filename,0) || isequal(pathname,0)
+      else
+        fname = fullfile(pathname, filename);
+        try
+          obj = ao(fname);
+          xml = obj.mdlfile;
+          if isempty(xml)
+            error('### AO from file %s has no attached workspace.', fname);
+          end
+          
+        catch
+          lasterr
+          error('### Failed to load an AO from the given file.');
+        end
+      end % End empty filename
+    else
+      error('### unknown choice');
+    end
+  end
+  
+  % Get the XML string and pass back to the workbench
+  if ~isempty(xml)
+    wb.mp.createPipelinesFromXMLstring(xml);
+  end
+  
+end
+
+%---------------- Get a list of LTPDA objects in the MATLAB workspace
+function [objs, varnames] = getWorkspaceObjs()
+  
+  % get base workspace variables
+  ws_vars = evalin('base','whos');
+  
+  objs = {};
+  varnames = [];
+  for j=1:length(ws_vars)
+    cmd = sprintf('obj = evalin(''base'', ''%s'');', ws_vars(j).name);
+    eval(cmd)
+    if isa(obj, 'ltpda_uo')
+      for kk=1:numel(obj)
+        objs = [objs {obj(kk)}];
+        varnames = [varnames ws_vars(j)];
+      end
+    end
+  end
+end
+