Mercurial > hg > ltpda
view m-toolbox/classes/@ltpda_uo/save.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 source
% SAVE overloads save operator for ltpda objects. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % DESCRIPTION: SAVE overloads save operator for ltpda objects. % % CALL: save(obj, 'blah.mat') Save an object obj as a .mat file. % obj.save('blah.mat') Save an object obj as a .mat file. % obj.save(plist('filename', 'blah.mat')) % save(obj, plist('filename', 'blah.mat')) % save(a, 'blah.xml') Save an object as an XML file. % a.save(plist('filename', 'blah.xml')) % % The method accepts multiple input objects (in a list or in a vector), % that will be save inside a single file or in multiple files according to the % "INDIVIDUAL FILES" parameter (see the Parameters Description below) % % <a href="matlab:utils.helper.displayMethodInfo('ltpda_uo', 'save')">Parameters Description</a> % % VERSION: $Id: save.m,v 1.41 2011/10/05 09:49:31 ingo Exp $ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function varargout = save(varargin) %%% Check if this is a call for parameters if utils.helper.isinfocall(varargin{:}) varargout{1} = getInfo(varargin{3}); return end import utils.const.* utils.helper.msg(msg.PROC3, 'running %s/%s', mfilename('class'), mfilename); %%% Collect input variable names in_names = cell(size(varargin)); for ii = 1:nargin,in_names{ii} = inputname(ii);end [objs, objinvars, rest] = utils.helper.collect_objects(varargin(:), '', in_names); [pls, invars, rest] = utils.helper.collect_objects(rest(:), 'plist', in_names); %%% REMARK: Special case for the plist-class because collect_objects collects %%% ALL plist-objects even the plist which should set the property. %%% In this case must be the plist which sets thte property %%% at the last position. if isa(objs, 'plist') if nparams(objs(end)) == 1 && isparam(objs(end), 'filename') pls = [pls objs(end)]; objs(end) = []; end end %%% Combine the plists pls = combine(pls, getDefaultPlist()); %%% % 1. Use the filename from the PLIST % 2. Use the input string as the filename % 3. Use the object name and the current folder for the filename % Must be defined for each object. % 4. If there are more than one input objects and the 'individual files' % Switch is false then use the variable name. filename = ''; if ~isempty(pls.find('filename')) filename = pls.find('filename'); elseif ~isempty(rest) && numel(rest) == 1 && iscellstr(rest) filename = rest{1}; pls.pset('filename', filename); end %%% Make sure that the UUID is set for all objects. This should only %%% happen for PLISTs. %%% REMARK: This command will also change the plist in the workspace. for ii = 1:numel(objs) if isempty(objs(ii).UUID) objs(ii).UUID = char(java.util.UUID.randomUUID); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Save object %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Inspect filename [path, fname, ext] = fileparts(filename); % Save the objects as MAT files if the user doesn't specify a extension type if isempty(ext) ext = '.mat'; end % Get pre-, and postfix from the input PLIST prefix = pls.find('prefix'); postfix = pls.find('postfix'); individualFiles = pls.find('individual files'); % ATTENTION: We keep the meaning of t0 for backwars compatibility. % This means % - before saving, t0 = t0 + toffset % - after loading, t0 = t0 - toffset % But be careful. For XML files it is done in the tsdata % methods 'attachToDom' and 'fromDom' because for submitting % we don't use this method. switch ext case '.mat' % ATTENTION: We moved the changing to the t0 to the MATLAB methods: % tsdata/loadobj and tsdata/saveobj objsout = objs; v = ver('MATLAB'); % MATLAB version number of 2008b is 7.7 if utils.helper.ver2num(v.Version) < utils.helper.ver2num('7.7') warning('off', 'all') shape = size(objs); objs = utils.prog.rstruct(objs); objs = reshape(objs, shape); warning('on', 'all') else end if (individualFiles == true) %%%%% Save each object in individual file dummy = objs; for ii = 1:numel(dummy) objs = dummy(ii); % Define full filename if isempty(fname) fullFilename = getFullFilename(objs.name); else postfix = sprintf('%s_%03d', pls.find('postfix'), ii); fullFilename = getFullFilename(fname); end save(fullFilename, 'objs'); end else %%%%% Save all objects in one file if isempty(fname) fullFilename = getFullFilename(inputname(1)); warning('!!! You have not specified any file name -> Using first variable name as file name.'); else fullFilename = getFullFilename(fname); end save(fullFilename, 'objs'); objs = objsout; end case '.xml' if (individualFiles == true) %%%%% Save each object in individual file for ii = 1:numel(objs) if isempty(fname) fullFilename = getFullFilename(objs(ii).name); else postfix = sprintf('%s_%03d', pls.find('postfix'), ii); fullFilename = getFullFilename(fname); end saveObjectAsXML(objs(ii), fullFilename); end else %%%%% Save all objects in one file if isempty(fname) fullFilename = getFullFilename(inputname(1)); warning('!!! You have not specified any file name -> Using first variable name as file name.'); else fullFilename = getFullFilename(fname); end saveObjectAsXML (objs, fullFilename); end otherwise error('### unknown file extension [%s].', ext); end varargout{1} = objs; %-------------------------------------------------------------------------- % Return the full file name %-------------------------------------------------------------------------- function fullFilename = getFullFilename(fname) % concatenate the prefix, filename, postfix and the file extension. fname = strcat(prefix, fname, postfix, ext); % build full filename fullFilename = fullfile(path, fname); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Local Functions % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %-------------------------------------------------------------------------- % save object as XML file %-------------------------------------------------------------------------- function saveObjectAsXML (obj, fullFilename) % Create DOM node dom = com.mathworks.xml.XMLUtils.createDocument('ltpda_object'); parent = dom.getDocumentElement; % add Attribute 'ltpda_version' to the root node ltpda_version = getappdata(0, 'ltpda_version'); parent.setAttribute('ltpda_version', ltpda_version); if (utils.helper.ver2num(ltpda_version) > utils.helper.ver2num('2.3')) || ... (strcmp(strtok(ltpda_version), '2.3')) %%%%%%%%%%%%%%%%%% saving of a new XML file %%%%%%%%%%%%%%%%%% % Create history root node % The attachToDom methods will attach their histories to this node. historyRootNode = dom.createElement('historyRoot'); parent.appendChild(historyRootNode); % Write objects obj.attachToDom(dom, parent, []); else %%%%%%%%%%%%%%%%%% saving of a old XML file %%%%%%%%%%%%%%%%%% utils.xml.xmlwrite(obj, dom, parent, ''); % Save the XML document. end % Write to file % Ingo: I want to use our own XML write method because I miss on my % machine the indent. if isempty(strfind(fullFilename, filesep)) result = javax.xml.transform.stream.StreamResult(fullfile(pwd, fullFilename)); else result = javax.xml.transform.stream.StreamResult(fullFilename); end mpipeline.utils.XMLUtils.serializeXML(dom, result, 'UTF-8') % xmlwrite(fullFilename, dom); end %-------------------------------------------------------------------------- % 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, 'ltpda_uo', 'ltpda', utils.const.categories.output, '$Id: save.m,v 1.41 2011/10/05 09:49:31 ingo Exp $', sets, pl); ii.setOutmin(0); end %-------------------------------------------------------------------------- % Get Default Plist %-------------------------------------------------------------------------- function plout = getDefaultPlist() persistent pl; if ~exist('pl', 'var') || isempty(pl) pl = buildplist(); end plout = pl; end function pl = buildplist() % General plist for saving objects pl = plist.SAVE_OBJ_PLIST; end