0001 function p = param(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 VERSION = '$Id: param.m,v 1.12 2007/10/15 17:16:56 ingo Exp $';
0030
0031
0032 if nargin == 2 && ischar(varargin{2}) && strcmp(varargin{2}, 'Params')
0033 p = plist();
0034 return
0035 elseif nargin == 2 && ischar(varargin{2}) && strcmp(varargin{2}, 'Version')
0036 p = VERSION;
0037 return
0038 end
0039
0040
0041
0042
0043 function p = init()
0044 p.name = 'param object';
0045 p.key = '';
0046 p.val = [];
0047 p.created = time;
0048 p.version = VERSION;
0049 p = class(p, 'param');
0050 end
0051
0052
0053
0054
0055
0056 if nargin == 0
0057
0058 p = init();
0059
0060 elseif nargin == 1
0061
0062
0063 if isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl')
0064 p = fromxml(varargin{1});
0065
0066
0067 elseif isa(varargin{1}, 'plist')
0068
0069 pl = varargin{1};
0070 key = find(pl, 'key');
0071 val = find(pl, 'val');
0072 if isempty(key)
0073 error('### building a parameter from a plist requires one parameter in the plist is called ''key''');
0074 end
0075 if isempty(val)
0076 error('### building a parameter from a plist requires one parameter in the plist is called ''val''');
0077 end
0078
0079 p = init();
0080 p.key = key;
0081 p.val = val;
0082 p.name = p.key;
0083
0084
0085 elseif isstruct(varargin{1})
0086
0087 p = init();
0088 p.name = varargin{1}.name;
0089 p.key = varargin{1}.key;
0090 p.val = varargin{1}.val;
0091 if isstruct(varargin{1}.created)
0092 varargin{1}.created = time(varargin{1}.created);
0093 end
0094 p.version = varargin{1}.version;
0095
0096 elseif ischar(varargin{1})
0097
0098 filename = varargin{1};
0099 [path, name, ext, vers] = fileparts(filename);
0100 switch ext
0101 case '.mat'
0102 p = load(filename);
0103 case '.xml'
0104 p = xmlparse(param, filename);
0105 otherwise
0106 error('### Unknown file type.');
0107 end
0108
0109 else
0110 error('### unknown constructor type for param object.');
0111 end
0112 elseif nargin == 2
0113
0114 if isa(varargin{1}, 'plist') || isa(varargin{2}, 'plist')
0115 if isa(varargin{1}, 'plist')
0116 pl = varargin{1};
0117 pi = pl(1);
0118 key = pi.key;
0119 else
0120 val = varargin{1};
0121 end
0122
0123 if isa(varargin{2}, 'plist')
0124 pl = varargin{2};
0125 pi = pl(1);
0126 key = pi.key;
0127 else
0128 val = varargin{2};
0129 end
0130
0131 p.key = key;
0132 p.val = val;
0133 p.version = VERSION;
0134 p = class(p, 'param');
0135
0136
0137 elseif isa(varargin{1}, 'database')
0138
0139 p = retrieve(varargin{1}, varargin{2:end});
0140
0141
0142 else
0143 p = init();
0144 p.key = varargin{1};
0145 p.val = varargin{2};
0146 p.name = p.key;
0147 end
0148 else
0149 error('### Unknown number of constructor arguments.');
0150 end
0151
0152 end
0153
0154
0155
0156
0157