diff m-toolbox/classes/@plist/plist2cmds.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/@plist/plist2cmds.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,275 @@
+% PLIST2CMDS convert a plist to a set of commands.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION: PLIST2CMDS convert a plist to a set of commands.
+%
+% CALL:        cmds = plist2cmds(pl)
+%
+% INPUTS:
+%              pl  - parameter list (see below)
+%
+% OUTPUTS:     cell-array of MATLAB commands.
+%
+%
+% VERSION:     $Id: plist2cmds.m,v 1.21 2011/03/28 12:45:31 hewitson Exp $
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function cmd = plist2cmds(varargin)
+  
+  %%% Check if this is a call for parameters
+  if utils.helper.isinfocall(varargin{:})
+    cmd = getInfo(varargin{3});
+    return
+  end
+  
+  pl = varargin{1};
+  
+  if numel(pl) ~= 1 || nargin ~= 1
+    error('### Please input (only) one plist');
+  end
+  
+  % look at the input parameters
+  if isa(pl, 'plist')
+    [ps, before_pl] = writePlist(pl);
+  else
+    ps = '';
+    before_pl = '';
+  end
+  if strcmp(ps, 'plist([])')
+    ps = '';
+  end
+  
+  if ~isempty(ps)
+    if ps(end) == ','
+      ps = ps(1:end-1);
+    end
+  end
+  cmd = sprintf('pl = %s;', ps);
+  cmd = {cmd before_pl{:}};
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                               Local Functions                               %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+% FUNCTION:    writePlist                                                     %
+%                                                                             %
+% DESCRIPTION: write a plist                                                  %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+function [ps, before_pl] = writePlist(pls)
+  
+  before_pl = {};
+  ps = '[';
+  
+  for pp=1:numel(pls)
+    pl = pls(pp);
+%     if pl.nparams > 0
+      ps = [ps 'plist('];
+      for i=1:pl.nparams
+        p = pl.params(i);
+        pVal = p.getVal;
+        
+        [cmd, pre_cmd] = val2cmd(pVal);
+        
+        before_pl = [before_pl pre_cmd];
+        
+        if isempty(p.desc)
+          ps = sprintf('%s''%s'', %s, ', ps, p.key, cmd);
+        else
+          ps = sprintf('%s{''%s'', ''%s''}, %s, ', ps, p.key, p.desc, cmd);
+        end
+        
+      end
+      if strcmp(ps(end-1:end), ', ')
+        ps = ps(1:end-2);
+      end
+      ps = [ps '), '];
+%     end
+  end
+  if strcmp(ps(end-1:end), ', ')
+    ps = [ps(1:end-2) ']'];
+  end
+  
+end
+
+
+function [cmd, pre_cmd] = val2cmd(pVal)
+  pre_cmd = {};
+  cmd = '';
+  if ischar(pVal)
+    %%%   char   %%%
+    cmd = sprintf('''%s''', strrep(pVal, '''', ''''''));
+    
+  elseif isnumeric(pVal)
+    %%%   numeric   %%%
+    if isempty(pVal)
+      cmd = '[]';
+    else
+      cmd = sprintf('[%s]', utils.helper.mat2str(pVal));
+    end
+    
+  elseif islogical(pVal)
+    %%%   logical   %%%
+    cmd = sprintf('[%s]', mat2str(pVal));
+    
+  elseif isjava(pVal)
+    %%%   java   %%%
+    if strcmp(class(pVal), 'sun.util.calendar.ZoneInfo')
+      cmd = sprintf('java.util.TimeZone.getTimeZone(''%s'')',char(pVal.getID));
+    else
+      error('### Unknown java object [%s]', class(pVal));
+    end
+    
+  elseif isa(pVal, 'history') || isa(pVal, 'ltpda_uoh')
+    %%%   history   %%%
+    if isa(pVal, 'ltpda_uoh')
+      h = [pVal(:).hist];
+      h = reshape(h, size(pVal));
+    else
+      h = pVal;
+    end
+    
+    varnames = '[';
+    
+    for vv1 = 1:size(h,1)
+      for hh1 = 1:size(h,2)
+        
+        obj      = h(vv1,hh1);
+        objpl    = hist2m(obj);
+        objpl(1) = []; % drop last 'a_out' line
+        pre_cmd  = [pre_cmd objpl];
+        varnames = [varnames strtok(objpl{1})];
+        if size(h,2) > 1 && hh1 ~= size(h,2)
+          varnames = [varnames, ', '];
+        end
+      end
+      if size(h,1) > 1 && vv1 ~= size(h,1)
+        varnames = [varnames, '; '];
+      end
+    end
+    
+    cmd = [strtrim(varnames) ']'];
+    
+  elseif isa(pVal, 'ltpda_nuo')
+    %%%   non-user object   %%%
+    cmd = string(pVal);
+    
+  elseif isa(pVal, 'plist')
+    %%%   plist object   %%%
+    [cmd, pre_cmd] = writePlist(pVal);
+    
+  elseif isa(pVal, 'sym')
+    %%%   symbolic math object   %%%
+    cmd = sprintf('sym(''%s'')', char(pVal));
+    
+  elseif iscell(pVal)
+    %%% Cell %%%
+    if isempty(pVal)
+      cmd = sprintf('cell(%d,%d)', size(pVal,1), size(pVal,2));
+    else
+      cmd = '{';
+      
+      for vv = 1:size(pVal,1)
+        for hh = 1:size(pVal,2)
+          [cell_cmd, cell_pre_cmd] = val2cmd(pVal{vv,hh});
+          cmd = [cmd, cell_cmd];
+          pre_cmd = [pre_cmd cell_pre_cmd];
+          if size(pVal,2) > 1 && hh ~= size(pVal,2)
+            cmd = [cmd, ', '];
+          end
+        end
+        if size(pVal,1) > 1 && vv ~= size(pVal,1)
+          cmd = [cmd, '; '];
+        end
+      end
+      
+      cmd = [strtrim(cmd) '}'];
+    end
+    
+  elseif isstruct(pVal)
+    %%% Struct %%%
+    ss     = pVal;
+    ss_str = '[';
+    fields = fieldnames(ss);
+    for oo = 1:numel(pVal)
+      ss_str = sprintf('%s struct(', ss_str);
+      for ii = 1:numel(fields)
+        if isnumeric(ss(oo).(fields{ii})) || islogical(ss(oo).(fields{ii}))
+          ss_str = sprintf('%s''%s'', [%s], ', ss_str, fields{ii}, utils.helper.mat2str(ss(oo).(fields{ii})));
+        elseif ischar(ss(oo).(fields{ii}))
+          ss_str = sprintf('%s''%s'', ''%s'', ',ss_str, fields{ii}, strrep(ss(oo).(fields{ii}), '''', ''''''));
+        elseif isa(ss(oo).(fields{ii}), 'ltpda_nuo')
+          ss_str = sprintf('%s''%s'', %s, ', ss_str, fields{ii}, string(ss(oo).(fields{ii})));
+        elseif isa(ss(oo).(fields{ii}), 'plist')
+          [struct_cmd, struct_pre_cmd] = writePlist(ss(oo).(fields{ii}));
+          ss_str = sprintf('%s''%s'', %s, ', ss_str, fields{ii}, struct_cmd);
+          pre_cmd = [pre_cmd struct_pre_cmd];
+        elseif isa(ss(oo).(fields{ii}), 'ltpda_uoh')
+          h = ss(oo).(fields{ii}).hist;
+          varnames = '[';
+          for kk=1:numel(h)
+            obj       = h(kk);
+            objpl = hist2m(obj);
+            objpl(1) = []; % drop last 'a_out' line
+            pre_cmd = [pre_cmd objpl];
+            varnames = [varnames strtok(objpl{1}) ' '];
+          end
+          ss_str = sprintf('%s''%s'', %s, ', ss_str, fields{ii}, [strtrim(varnames) ']']);
+        elseif isa(ss(oo).(fields{ii}), 'sym')
+          symstr = char(ss(oo).(fields{ii}));
+          ss_str = sprintf('%s''%s'', sym(''%s''), ', ss_str, fields{ii}, symstr);
+        elseif isjava(ss(oo).(fields{ii}))
+          if strcmp(class(ss(oo).(fields{ii})), 'sun.util.calendar.ZoneInfo')
+            ss_str = sprintf('%s''%s'', java.util.TimeZone.getTimeZone(''%s''), ', ss_str, fields{ii}, char(getID(ss(oo).(fields{ii}))));
+          else
+            error('### Unknown java object [%s]', class(ss(oo).(fields{ii})));
+          end
+        else
+          error('### Unknown type [%s] in struct', class(ss(oo).(fields{ii})));
+        end
+      end
+      ss_str = [ss_str(1:end-2), ')'];
+    end
+    cmd = sprintf('%s]', ss_str);
+  else
+    error(['### unknown parameter type: ' p.key '  ' class(pVal)]);
+  end
+end
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    getInfo
+%
+% DESCRIPTION: 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, 'plist', 'ltpda', utils.const.categories.internal, '$Id: plist2cmds.m,v 1.21 2011/03/28 12:45:31 hewitson Exp $', sets, pl);
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% FUNCTION:    getDefaultPlist
+%
+% DESCRIPTION: Get Default Plist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+function plo = getDefaultPlist()
+  plo = plist();
+end
+