Mercurial > hg > ltpda
diff m-toolbox/classes/@collection/collection.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children | a71a40911c27 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@collection/collection.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,310 @@ +% COLLECTION constructor for collection class. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DESCRIPTION: COLLECTION constructor for collection class. +% +% CONSTRUCTOR: +% +% fb = collection() - creates an empty collection object +% fb = collection(objs) - construct from an array of objects +% fb = collection(pl) - create a collection object from a parameter list +% +% <a href="matlab:utils.helper.displayMethodInfo('collection', 'collection')">Parameters Description</a> +% +% VERSION: $Id: collection.m,v 1.29 2011/04/08 08:56:22 hewitson Exp $ +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +classdef collection < ltpda_uoh + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Property definition % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + %---------- Public (read/write) Properties ---------- + properties + objs = {}; % objects in collection + end + + %---------- Protected read-only Properties ---------- + properties (SetAccess = protected) + end + + %---------- Private Properties ---------- + properties (GetAccess = protected, SetAccess = protected) + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Check property setting % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods + function set.objs(obj, val) + if ~iscell(val) + error('### The value for the property ''objs'' must be a cell object'); + end + obj.objs = reshape(val, 1, []); + end + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Constructor % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods + function obj = collection(varargin) + + import utils.const.* + utils.helper.msg(msg.OMNAME, 'running %s/%s', mfilename('class'), mfilename); + + % Collect all collection objects + [colls, invars, rest] = utils.helper.collect_objects(varargin(:), 'collection'); + + if (isempty(rest) || ... + ((numel(rest) == 1) && ... + (isa(rest{1}, 'plist')) && ... + (nparams(rest{1}) == 0)) ) && ~isempty(colls) + % Do copy constructor and return + utils.helper.msg(msg.OPROC1, 'copy constructor'); + obj = copy(colls, 1); + for kk=1:numel(obj) + obj(kk).addHistory(collection.getInfo('collection', 'None'), [], [], obj(kk).hist); + end + return + end + + switch nargin + case 0 + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%% no input %%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + utils.helper.msg(msg.OPROC1, 'empty constructor'); + obj.addHistory(collection.getInfo('collection', 'None'), plist(), [], []); + + case 1 + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%% one input %%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if ischar(varargin{1}) + %%%%%%%%%% pzm = collection('foo.mat') %%%%%%%%%% + %%%%%%%%%% pzm = collection('foo.xml') %%%%%%%%%% + utils.helper.msg(msg.OPROC1, 'constructing from file %s', varargin{1}); + obj = fromFile(obj, varargin{1}); + + elseif isstruct(varargin{1}) + %%%%%%%%%% r = collection(struct) %%%%%%%%%% + utils.helper.msg(msg.OPROC1, 'constructing from struct'); + obj = fromStruct(obj, varargin{1}); + + elseif isa(varargin{1}, 'ltpda_uoh') + %%%%%%%%%% f = collection(a1) %%%%%%%%%% + obj = obj.fromInput(plist('objs', varargin)); + + elseif isa(varargin{1}, 'plist') + %%%%%%%%%% r = collection(plist) %%%%%%%%%% + pl = varargin{1}; + + if numel(pl) > 1 + % The input is a vector of PLISTS + obj = obj.fromInput(plist('objs', num2cell(reshape(pl, 1, [])))); + + else + + if pl.isparam('filename') + utils.helper.msg(msg.PROC2, 'constructing from file %s', pl.find('filename')); + obj = obj.fromFile(pl); + + elseif pl.isparam('hostname') || pl.isparam('conn') + utils.helper.msg(msg.PROC2, 'constructing from repository %s', pl.find('hostname')); + obj = obj.fromRepository(pl); + + elseif pl.isparam('objs') + obj = obj.fromInput(pl); + + elseif pl.isparam('plist') + obj = collection(pl.find('plist')); + + elseif pl.isparam('built-in') + utils.helper.msg(msg.OPROC1, 'constructing from built-in model'); + obj = fromModel(obj, pl); + + else + if pl.shouldIgnore() + % The PLIST is not a configuration PLIST + obj = obj.fromInput(plist('objs', {pl})); + else + obj.setProperties(pl); + obj.addHistory(collection.getInfo('collection', 'None'), pl, [], []); + end + end + + end + + else + error('### Unknown single argument constructor.'); + end + + case 2 + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%% two inputs %%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + if isa(varargin{1}, 'ltpda_uo') && isa(varargin{2}, 'ltpda_uo') + %%%%%%%%%% f = collection(a1, a2) %%%%%%%%%% + inObjs = [num2cell(reshape(varargin{1}, 1, [])), num2cell(reshape(varargin{2}, 1, []))]; + obj = obj.fromInput(plist('objs', inObjs)); + + elseif (isa(varargin{1}, 'database') || isa(varargin{1}, 'mpipeline.repository.RepositoryConnection')) && isnumeric(varargin{2}) + %%%%%%%%%% f = collection(<database-object>, [IDs]) %%%%%%%%%% + utils.helper.msg(msg.OPROC1, 'retrieve from repository'); + obj = obj.fromRepository(plist('conn', varargin{1}, 'id', varargin{2})); + + elseif isa(varargin{1}, 'ltpda_uo') && isa(varargin{2}, 'plist') && isempty(varargin{2}.params) + %%%%%%%%%% f = collection(collection-object, <empty plist>) %%%%%%%%%% + obj = collection(varargin{1}); + + elseif isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl') && ... + isa(varargin{2}, 'history') + %%%%%%%%%% obj = collection(DOM node, history-objects) %%%%%%%%%% + obj = fromDom(obj, varargin{1}, varargin{2}); + + elseif isa(varargin{1}, 'ltpda_uoh') && isa(varargin{2}, 'plist') + %%%%%%%%%%% collection(<ltpda_uoh>-object, plist-object) %%%%%%%%%% + % always recreate from plist + + % If we are trying to load from file, and the file exists, do + % that. Otherwise, copy the input object. + if varargin{2}.isparam('filename') + if exist(fullfile('.', find(varargin{2}, 'filename')), 'file')==2 + obj = collection(varargin{2}); + else + obj = collection(varargin{1}); + end + else + obj = collection(varargin{2}); + end + else + error('### Unknown 2 argument constructor.'); + end + + otherwise + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%% any input %%%%%%%%%%%%%%%%%%%%%%%%%%% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + obj = obj.fromInput(plist('objs', varargin)); + end + + end % End constructor + + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (static) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + methods (Static) + + function mdls = getBuiltInModels(varargin) + mdls = ltpda_uo.getBuiltInModels('collection'); + end + + function out = VEROUT() + out = '$Id: collection.m,v 1.29 2011/04/08 08:56:22 hewitson Exp $'; + end + + function ii = getInfo(varargin) + ii = utils.helper.generic_getInfo(varargin{:}, 'collection'); + end + + function out = SETS() + out = [SETS@ltpda_uoh, {'From Input'}]; + end + + function plout = getDefaultPlist(set) + persistent pl; + persistent lastset; + if exist('pl', 'var')==0 || isempty(pl) || ~strcmp(lastset, set) + pl = collection.buildplist(set); + lastset = set; + end + plout = pl; + end + + function out = buildplist(set) + + if ~utils.helper.ismember(lower(collection.SETS), lower(set)) + error('### Unknown set [%s]', set); + end + + out = plist(); + out = collection.addGlobalKeys(out); + out = buildplist@ltpda_uoh(out, set); + + switch lower(set) + case 'from input' + p = param({'objs', 'Objects of the collection.<br>Please use a cell array if the objects are not from the same type.'}, paramValue.EMPTY_DOUBLE); + out.append(p); + end + end % function out = getDefaultPlist(varargin) + + function obj = initObjectWithSize(n,m) + obj = collection.newarray([n m]); + end + + varargout = identifyInsideObjs(varargin) + + end % End static methods + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (static, private) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Static, Access=private) + end % End static, private methods + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (static, hidden) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + methods (Static = true, Hidden = true) + varargout = loadobj(varargin) + varargout = update_struct(varargin); + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (public) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + methods + + varargout = char(varargin) + varargout = display(varargin) + varargout = copy(varargin) + varargout = setObjs(varargin) + varargout = setObjectAtIndex(varargin) + varargout = getObjectAtIndex(varargin) + varargout = removeObjectAtIndex(varargin) + varargout = getObjectsOfClass(varargin) + end + + methods (Hidden = true) + varargout = attachToDom(varargin) + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (protected) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + methods (Access = protected) + varargout = fromRepository(varargin) + varargout = fromInput(varargin) + varargout = fromStruct(varargin) + varargout = fromDom(varargin) + end + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Methods (private) % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + methods (Access = private) + end + +end % End classdef +