Home > classes > @plist > plist.m

plist

PURPOSE ^

PLIST Plist class object constructor.

SYNOPSIS ^

function pl = plist(varargin)

DESCRIPTION ^

 PLIST Plist class object constructor.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 DESCRIPTION: PLIST Plist class object constructor.

 CONSTRUCTORS:

       pl = plist()                            - create an empty plist object.
       pl = plist(p)                           - create a plist with elements p
                                                 where p is an array of param objects.
       pl = plist('key1, val1, 'key2', 'val2') - create a plist with the
                                                 key/values pairs

 VERSION:     $Id: plist.m,v 1.15 2007/12/12 18:45:09 ingo Exp $

 HISTORY:     30-01-07 M Hewitson
                Creation

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function pl = plist(varargin)
0002 % PLIST Plist class object constructor.
0003 %
0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0005 %
0006 % DESCRIPTION: PLIST Plist class object constructor.
0007 %
0008 % CONSTRUCTORS:
0009 %
0010 %       pl = plist()                            - create an empty plist object.
0011 %       pl = plist(p)                           - create a plist with elements p
0012 %                                                 where p is an array of param objects.
0013 %       pl = plist('key1, val1, 'key2', 'val2') - create a plist with the
0014 %                                                 key/values pairs
0015 %
0016 % VERSION:     $Id: plist.m,v 1.15 2007/12/12 18:45:09 ingo Exp $
0017 %
0018 % HISTORY:     30-01-07 M Hewitson
0019 %                Creation
0020 %
0021 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0022 
0023 VERSION  = '$Id: plist.m,v 1.15 2007/12/12 18:45:09 ingo Exp $';
0024 
0025 %%%%%   Check if this is a call for parameters   %%%%%
0026 if nargin == 2
0027   if isa(varargin{1}, 'plist') && ischar(varargin{2})
0028     in = char(varargin{2});
0029     if strcmp(in, 'Params')
0030       pl = plist;
0031       return
0032     elseif strcmp(in, 'Version')
0033       pl = VERSION;
0034       return
0035     end
0036   end
0037 end
0038 
0039 %%%%%%%%%%%%%%%%%%%%   define parameter properties list   %%%%%%%%%%%%%%%%%%%%%
0040 
0041   function pl = init()
0042     pl.name     = 'plist object';
0043     pl.params   = [];
0044     pl.version  = VERSION;
0045     pl.created  = time;
0046     pl = class(pl, 'plist');
0047   end
0048 
0049 %%%%%%%%%%%%%%%%%%%%%%   Create parameter list object   %%%%%%%%%%%%%%%%%%%%%%%
0050 
0051 %%%%%%%%%%   pl = plist()   %%%%%%%%%%
0052 % create default parameter list object
0053 if nargin == 0
0054 
0055   pl = init();
0056 
0057 elseif nargin == 1
0058 
0059   %%%%%%%%%% Create from XML fragment %%%%%%%%%%%
0060   if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0061     pl = fromxml(varargin{1});
0062 
0063   %%%%%%%%%%  p = param(plist)   %%%%%%%%%%
0064   elseif isa(varargin{1}, 'plist')
0065     pl = varargin{1};
0066 
0067   %%%%%%%%%%   pl = plist(struct)   %%%%%%%%%%
0068   elseif isstruct(varargin{1})
0069     plstruct = varargin{1};
0070 
0071     pi = plstruct.params;
0072     params = [];
0073     for j=1:length(pi)
0074       if isstruct(pi(j))
0075         params = [params param(pi(j))];
0076       elseif isa(pi(j), 'param')
0077         params = [params pi(j)];
0078       else
0079         error ('### the parameter is not from class param.')
0080       end
0081     end
0082 
0083     pl         = init();
0084     pl.name    = plstruct.name;
0085     pl.created    = plstruct.created;
0086     if isstruct(pl.created)
0087       pl.created = time(pl.created);
0088     end
0089     pl.params  = params;
0090     pl.version = plstruct.version;
0091 
0092   %%%%%%%%%%% From file %%%%%%%%%%%%%%%%%%%%%%%%
0093   elseif ischar(varargin{1})
0094 
0095     filename = varargin{1};
0096     [path, name, ext, vers] = fileparts(filename);
0097     switch ext
0098       case '.mat'
0099         pl = load(filename);
0100         pl = pl.a;
0101       case '.xml'
0102         pl = xmlparse(plist, filename);
0103       otherwise
0104         error('### Unknown file type.');
0105     end
0106   %%%%%%%%%%   pl = plist(param)   %%%%%%%%%%
0107   elseif isa(varargin{1}, 'param')
0108     pl        = init();
0109 
0110     %% Use only upper case characters for the 'key'
0111     param_list = varargin{1};
0112     for kk = 1:length(param_list)
0113       param_list(kk).key = upper(param_list(kk).key);
0114     end
0115 
0116     pl.params = param_list;
0117 
0118   else
0119     error ('### unknown arguments to construct a parameter list')
0120   end
0121 elseif nargin == 2
0122   %%%%%%%%%%%   From DATABASE   %%%%%%%%%%%
0123   if isa(varargin{1}, 'database')
0124 
0125     pl = retrieve(varargin{1}, varargin{2:end});
0126 
0127   %%%%%%%%%%   pl = plist('key1', val1)   %%%%%%%%%%
0128   else
0129     pl  = init();
0130     key = upper(varargin{1});
0131     val =       varargin{2};
0132 
0133     pl.params  = param(key, val);
0134   end
0135 
0136 elseif nargin > 2
0137 
0138   %%%%%%%%%%   pl = plist('key1, val1, 'key2', 'val2' , ...)   %%%%%%%%%%
0139   params = [];
0140   argin  = varargin;
0141   while length(argin) >= 2
0142     key = upper(argin{1});
0143     val =       argin{2};
0144     argin = argin(3:end);
0145 
0146     if ~ischar(key)
0147       error('### the key ''%s'' must be a character string', key)
0148     end
0149 
0150     found = 0;
0151     for ii = 1:length(params)
0152       if strcmpi(params(ii).key, key)
0153         % If the key exist in pl then do nothing, otherwise add the key value pair.
0154         warning('### Do not use the same key twice.');
0155         found = 1;
0156       end
0157     end
0158 
0159     if found == 0
0160       params = [params param(key, val)];
0161     end
0162 
0163   end
0164 
0165   pl         = init();
0166   pl.params  = params;
0167 
0168 else
0169   error('### Unknown number of constructor arguments.');
0170 end
0171 
0172 end
0173 
0174 % END

Generated on Tue 22-Jan-2008 10:39:13 by m2html © 2003