Mercurial > hg > ltpda
diff m-toolbox/classes/@plist/fromFile.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/fromFile.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,94 @@ +% Construct a ltpda_ob from a file +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% FUNCTION: fromFile +% +% DESCRIPTION: Construct a ltpda_ob from a file +% +% CALL: obj = obj.fromFile(filename) +% obj = obj.fromFile(pl) +% +% VERSION: $Id: fromFile.m,v 1.8 2011/02/11 12:44:33 hewitson Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +function objs = fromFile(obj, pli) + + VERSION = '$Id: fromFile.m,v 1.8 2011/02/11 12:44:33 hewitson Exp $'; + + % Which file type are we dealing with? + if ischar(pli) + pli = plist('filename', pli); + end + + % get filename + filename = find(pli, 'filename'); + + % Get the correct parameter set + [path, name, ext] = fileparts(filename); + + % Load a MAT file if the file extension doesn't exist + if isempty(ext) + ext = '.mat'; + filename = strcat(filename, ext); + pli.pset('filename', filename); + end + + switch ext + + case '.mat' + ii = obj.getInfo(class(obj), 'From MAT File'); + ii.setMversion([VERSION '-->' ii.mversion]); + + % Combine input and default plist + pl = combine(pli, ii.plists); + + % Load MAT-File + objs = load(filename); + + if ((isfield(objs, 'objs') && isstruct(objs.objs)) || ... + (isfield(objs, 'a') && isstruct(objs.a))) + if isfield(objs, 'a') + objs = objs.a; + else + objs = objs.objs; + end + scl = utils.helper.classFromStruct(objs); + if isempty(scl) + if isfield(objs, 'class') + scl = objs.class; + else + error('### The structure does not match any LTPDA object.'); + end + end + if ~strcmp(class(obj), scl) + error('### The structure does not match the chosen LTPDA object constructor. It seems to be a [%s] object.', scl) + end + fcn_name = [class(obj) '.update_struct']; + struct_ver = sscanf(objs(1).creator.ltpda_version, '%s.%s.%s'); + objs = feval(fcn_name, objs, struct_ver); + objs = feval(class(obj), objs); + elseif ismember('a', fieldnames(objs)) + objs = objs.a; + elseif ismember('objs', fieldnames(objs)) + objs = objs.objs; + else + objs = obj.fromDataInMAT(objs, pl); + end + + + case '.xml' + ii = obj.getInfo(class(obj), 'From XML File'); + ii.setMversion([VERSION '-->' ii.mversion]); + + % Combine input and default plist + pl = combine(pli, ii.plists); + + root_node = xmlread(filename); + objs = utils.xml.xmlread(root_node, class(obj)); + + otherwise + error('### Unknown file type [%s].', ext(2:end)); + end + +end +