diff m-toolbox/classes/@timespan/timespan.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/@timespan/timespan.m	Wed Nov 23 19:22:13 2011 +0100
@@ -0,0 +1,406 @@
+% TIMESPAN timespan object class constructor.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DESCRIPTION:  TIMESPAN timespan object class constructor.
+%               Create a timespan object.
+%
+% CONSTRUCTORS:
+%
+%       ts = timespan()
+%       ts = timespan('file_name.mat');
+%       ts = timespan('file_name.xml');
+%       ts = timespan( time,       time)
+%       ts = timespan(time,       '14:00:05')
+%       ts = timespan('14:00:00',  time)
+%       ts = timespan('14:00:00', '14:00:05')
+%       ts = timespan(30000, 50000)
+%       ts = timespan(20000, 30000, 'HH:MM:SS')
+%       ts = timespan(plist)
+%
+% SUPPORTED TIMEFORMATS:
+%
+%       dd-mm-yyyy HH:MM:SS             yyyy - year     (000-9999)
+%       dd.mm.yyyy HH:MM:SS             mm   - month    (1-12)
+%       dd-mm-yyyy HH:MM:SS.FFF         dd   - day      (1-31)
+%       dd.mm.yyyy HH:MM:SS.FFF         HH   - hour     (00-24)
+%       HH:MM:SS dd-mm-yyyy             MM   - minutes  (00-59)
+%       HH:MM:SS dd.mm.yyyy             SS   - seconds  (00-59)
+%       HH:MM:SS.FFF dd-mm-yyyy         FFF  - milliseconds (000-999)
+%       HH:MM:SS.FFF dd.mm.yyyy
+%       MM:SS
+%       MM:SS.FFF
+%
+% <a href="matlab:utils.helper.displayMethodInfo('timespan', 'timespan')">Parameters Description</a>
+%
+% VERSION:     $Id: timespan.m,v 1.89 2011/08/22 05:56:30 hewitson Exp $
+%
+% SEE ALSO:    ltpda_uoh, ltpda_uo, ltpda_obj, plist
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+classdef timespan < ltpda_uoh
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                            Property definition                            %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  %---------- Public (read/write) Properties  ----------
+  properties
+  end
+
+  %---------- Protected read-only Properties ----------
+  properties (SetAccess = protected)
+    startT     = time(0); % Start time of the time span. (time-object)
+    endT       = time(0); % End time of the time span.   (time-object)
+    interval   = ''; % Interval between start/end time
+  end
+
+  %---------- Constant Properties ----------
+  properties (Constant = true)
+    timeformat; % timeformat of the time span (see preferences)
+    timezone; % timezone of the time span (see preferences)
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                        Constant Property Methods                          %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
+  methods
+    function value = get.timezone(obj)
+      p = getappdata(0, 'LTPDApreferences');
+      value = char(p.getTimePrefs.getTimeTimezone);
+      if ischar(value)
+        value = java.util.TimeZone.getTimeZone(value);
+      end
+    end
+
+    function value = get.timeformat(obj)
+      p = getappdata(0, 'LTPDApreferences');
+      value = char(p.getTimePrefs.getTimestringFormat);
+    end
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                        Dependent Property Methods                         %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  methods
+    function value = get.interval(obj)
+      value = computeInterval(obj);
+    end
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                          Check property setting                           %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  methods
+    function set.startT(obj, val)
+      if ~isa(val, 'time')
+        error('### The value for the property ''startT'' must be a time-object.\nBut it is from the class [%s]',class(val));
+      end
+      obj.startT = val;
+    end
+    function set.endT(obj, val)
+      if ~isa(val, 'time')
+        error('### The value for the property ''endT'' must be a time-object.\nBut it is from the class [%s]',class(val));
+      end
+      obj.endT = val;
+    end
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                                Constructor                                %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  methods
+    function obj = timespan(varargin)
+
+      import utils.const.*
+      utils.helper.msg(msg.OMNAME, 'running %s/%s', mfilename('class'), mfilename);
+
+      % Collect all timespan objects
+      [ts, dummy, rest] = utils.helper.collect_objects(varargin(:), 'timespan');
+
+      if isempty(rest) && ~isempty(ts)
+        % Do copy constructor and return
+        utils.helper.msg(msg.OPROC1, 'copy constructor');
+        obj = copy(ts, 1);
+        for kk=1:numel(obj)
+          obj(kk).addHistory(timespan.getInfo('timespan', 'None'), [], [], obj(kk).hist);
+        end
+        return
+      end
+
+      switch nargin
+        case 0
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%   no input   %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+          utils.helper.msg(msg.OPROC1, 'empty constructor');
+          obj.addHistory(timespan.getInfo('timespan', 'None'), plist(), [], []);
+
+        case 1
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%   one input   %%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+          if ischar(varargin{1})
+
+            %%%%%%%%%%   ts = timespan('foo.mat')   %%%%%%%%%%
+            %%%%%%%%%%   ts = timespan('foo.xml')   %%%%%%%%%%
+            utils.helper.msg(msg.OPROC1, 'constructing from file %s', varargin{1});
+            obj = fromFile(obj, varargin{1});
+
+          elseif isstruct(varargin{1})
+            %%%%%%%%%%   ts = time(struct)   %%%%%%%%%%
+
+            utils.helper.msg(msg.OPROC1, 'constructing from struct');
+            obj = fromStruct(obj, varargin{1});
+
+          elseif isa(varargin{1}, 'plist')
+            %%%%%%%%%%   ts = time(plist)   %%%%%%%%%%
+
+            pl = varargin{1};
+
+            if pl.isparam('filename')
+              %-----------------------------------------------------
+              %--- Construct from file
+              %-----------------------------------------------------
+              utils.helper.msg(msg.OPROC1, 'constructing from file %s', pl.find('filename'));
+              obj = fromFile(obj, varargin{1});
+
+            elseif pl.isparam('hostname') || pl.isparam('conn')
+              %-----------------------------------------------------
+              %--- Construct from repository
+              %-----------------------------------------------------
+              utils.helper.msg(msg.OPROC1, 'constructing from repository %s', pl.find('hostname'));
+              obj = obj.fromRepository(pl);
+
+            elseif (pl.isparam('startT') || pl.isparam('start')) && ...
+                (pl.isparam('endT')   || pl.isparam('end'))
+              %-----------------------------------------------------
+              %--- Construct from start and end times
+              %-----------------------------------------------------
+              utils.helper.msg(msg.OPROC1, 'constructing from start/end times');
+              obj = obj.fromTimespanDef(pl);
+
+            elseif pl.isparam('built-in')
+              %-----------------------------------------------------
+              %--- Construct from built-in model
+              %-----------------------------------------------------
+              utils.helper.msg(msg.OPROC1, 'constructing from built-in model');
+              obj = fromModel(obj, pl);
+
+            else
+              obj.setObjectProperties(pl);
+              obj.addHistory(timespan.getInfo('timespan', 'None'), pl, [], []);
+            end
+
+          else
+            error('### Unknown single argument constructor.');
+          end
+
+        case 2
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%   two input   %%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+          if (ischar(varargin{1}) || isa(varargin{1}, 'time') || isnumeric(varargin{1})) && ...
+              (ischar(varargin{2}) || isa(varargin{2}, 'time') || isnumeric(varargin{2}))
+            %%%%%%%%%%  ts = timespan('14:00:00', '14:00:05')   %%%%%%%%%%
+            %%%%%%%%%%  ts = timespan('14:00:00', time)         %%%%%%%%%%
+            %%%%%%%%%%  ts = timespan(time, time)               %%%%%%%%%%
+            %%%%%%%%%%  ts = timespan(time, '14:00:05')         %%%%%%%%%%
+            utils.helper.msg(msg.OPROC1, 'constructing from start/end time');
+            pli = plist('startT', varargin{1}, 'endT', varargin{2});
+            obj = obj.fromTimespanDef(pli);
+
+          elseif (isa(varargin{1}, 'database') || isa(varargin{1}, 'mpipeline.repository.RepositoryConnection')) && isnumeric(varargin{2})
+            %%%%%%%%%%  f = timespan(database, IDs)   %%%%%%%%%%
+            utils.helper.msg(msg.OPROC1, 'retrieve from repository');
+            obj = obj.fromRepository(plist('conn', varargin{1}, 'id', varargin{2}));
+
+          elseif isa(varargin{1}, 'timespan') && isa(varargin{2}, 'plist') && isempty(varargin{2}.params)
+            %%%%%%%%%%  f = timespan(timespan-object, <empty plist>)   %%%%%%%%%%
+            obj = timespan(varargin{1});
+
+          elseif isa(varargin{1}, 'org.apache.xerces.dom.DeferredElementImpl') && ...
+                 isa(varargin{2}, 'history')
+            %%%%%%%%%%   obj = timespan(DOM node, history-objects)   %%%%%%%%%%
+            obj = fromDom(obj, varargin{1}, varargin{2});
+
+          elseif isa(varargin{1}, 'ltpda_uoh') && isa(varargin{2}, 'plist')
+            %%%%%%%%%%%   timespan(<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 = timespan(varargin{2});
+              else
+                obj = timespan(varargin{1});
+              end
+            else
+              obj = timespan(varargin{2});
+            end
+
+          else
+            error ('  ### Unknown constructor with two inputs.');
+          end
+
+        case 3
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%   three input   %%%%%%%%%%%%%%%%%%%%%%%%%%
+          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+          if  (ischar(varargin{1}) || isnumeric(varargin{1}) || isa(varargin{1}, 'time')) && ...
+              (ischar(varargin{2}) || isnumeric(varargin{2}) || isa(varargin{2}, 'time')) && ...
+              ischar(varargin{3})
+            %%%%%%%%%%  obj = timespan('14:00:00', '14:00:05', 'HH:MM:SS')  %%%%%%%%%%
+            %%%%%%%%%%  obj = timespan(  200000  ,   300000  , 'HH:MM:SS')  %%%%%%%%%%
+            %%%%%%%%%%  obj = timespan(time(2000), time(3000), 'HH:MM:SS')  %%%%%%%%%%
+            %%%%%%%%%%  obj = timespan('00:01:00',   300000  , 'HH:MM:SS')  %%%%%%%%%%
+            utils.helper.msg(msg.OPROC1, 'constructing from start/end and timeformat');
+            pl = plist('STARTT', varargin{1}, 'ENDT', varargin{2}, 'timeformat', varargin{3});
+            obj = obj.fromTimespanDef(pl);
+
+          else
+            error ('  ### Unknown constructor with three inputs.');
+          end
+
+        otherwise
+          [tss, dummy, rest] = utils.helper.collect_objects(args, 'timespan');
+
+          %%% Do we have a list of TIMESPANs as input
+          if ~isempty(tss) && isempty(rest)
+            obj = timespan(tss);
+          else
+            error('### Unknown number of arguments.');
+          end
+      end
+
+      % Consistency check
+      for ll = 1:numel(obj)
+        if obj(ll).startT.utc_epoch_milli > obj(ll).endT.utc_epoch_milli
+          error('### The start time is larger than the end time.');
+        end
+      end
+
+    end % End constructor
+
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                             Methods (public)                              %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  methods
+    varargout = copy(varargin)
+    varargout = setStartT(varargin)
+    varargout = setEndT(varargin)
+    varargout = double(varargin)
+  end
+
+  methods (Hidden = true)
+    varargout = attachToDom(varargin)
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                             Methods (protected)                           %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  methods (Access = protected)
+    varargout = fromStruct(varargin)
+    varargout = fromDom(varargin)
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                           Methods (private)                               %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  methods (Access = private)
+    obj = fromTimespanDef(obj, pli)
+    str = computeInterval(obj)
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                            Methods (static)                               %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  methods (Static)
+
+    function mdls = getBuiltInModels(varargin)
+      mdls = ltpda_uo.getBuiltInModels('timespan');
+    end
+
+    function out = VEROUT()
+      out = '$Id: timespan.m,v 1.89 2011/08/22 05:56:30 hewitson Exp $';
+    end
+
+    function ii = getInfo(varargin)
+      ii = utils.helper.generic_getInfo(varargin{:}, 'timespan');
+    end
+
+    function out = SETS()
+      out = [SETS@ltpda_uoh, {'From Timespan Definition'}];
+    end
+
+    
+    function plout = getDefaultPlist(set)
+      persistent pl;
+      persistent lastset;
+      if exist('pl', 'var')==0 || isempty(pl) || ~strcmp(lastset, set)
+        pl = timespan.buildplist(set);
+        lastset = set;
+      end
+      plout = pl;
+    end
+
+    function out = buildplist(set)
+
+      if ~utils.helper.ismember(lower(timespan.SETS), lower(set))
+        error('### Unknown set [%s]', set);
+      end
+
+      out = plist();
+      out = timespan.addGlobalKeys(out);
+      out = buildplist@ltpda_uoh(out, set);
+
+      switch lower(set)
+        case 'from timespan definition'
+
+          p = param({'startT','The starting time.'}, paramValue.EMPTY_STRING);
+          out.append(p);
+
+          p = param({'endT','The ending time.'}, paramValue.EMPTY_STRING);
+          out.append(p);
+
+          p = param({'timezone','Timezone.'}, paramValue.TIMEZONE);
+          out.append(p);
+
+          p = param({'timeformat','Time format.'}, paramValue.STRING_VALUE(''));
+          out.append(p);
+      end
+    end % function out = getDefaultPlist(varargin)
+
+    function obj = initObjectWithSize(n,m)
+      obj = timespan.newarray([n m]);
+    end
+
+  end % End static methods
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                         Methods (static, private)                         %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  methods (Static, Access=private)
+  end
+
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %                         Methods (static, hidden)                          %
+  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+  methods (Static = true, Hidden = true)
+    varargout = loadobj(varargin)
+    varargout = update_struct(varargin);
+  end
+
+end % End classdef
+