0001 function pl = plist(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 VERSION = '$Id: plist.m,v 1.15 2007/12/12 18:45:09 ingo Exp $';
0024
0025
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
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
0050
0051
0052
0053 if nargin == 0
0054
0055 pl = init();
0056
0057 elseif nargin == 1
0058
0059
0060 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0061 pl = fromxml(varargin{1});
0062
0063
0064 elseif isa(varargin{1}, 'plist')
0065 pl = varargin{1};
0066
0067
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
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
0107 elseif isa(varargin{1}, 'param')
0108 pl = init();
0109
0110
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
0123 if isa(varargin{1}, 'database')
0124
0125 pl = retrieve(varargin{1}, varargin{2:end});
0126
0127
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
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
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