Home > classes > @timespan > timespan.m

timespan

PURPOSE ^

TIMESPAN timespan object class constructor.

SYNOPSIS ^

function varargout = timespan(varargin)

DESCRIPTION ^

 TIMESPAN timespan object class constructor.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 DESCRIPTION:  TIMESPAN timespan object class constructor.
               Create a timespan object.

 PROPERTIES:   start      - Start time of the time span. (type: time class)
               end        - End time of the time span.   (type: time class)
               timeformat - The time format of start- AND end- time.
               timezone   - The timezone of start- AND end- time.

 CONSTRUCTORS: t_span = timespan()
               t_span = timespan( time,       time)
               t_span = timespan('time,      '14:00:05')
               t_span = timespan('14:00:00', '14:00:05')
               t_span = timespan('14:00:00',  time)
               t_span = timespan('14:00:00', '14:00:05', 'HH:MM:SS')
               t_span = timespan(plist)

 PLIST KEYS:   mandatory: 'start'      - Time span start time.
                          'end'        - Time span end time.
               optional:  'timeformat' - Time format
                          'timezone'   - Time zone <string>
               The times can be as a time-object, a string or a unix time

 VERSION:      $Id: timespan.m,v 1.17 2008/02/24 10:15:55 hewitson Exp $

 HISTORY:      23-07-2007 Diepholz
                  Creation

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function varargout = timespan(varargin)
0002 % TIMESPAN timespan object class constructor.
0003 %
0004 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0005 %
0006 % DESCRIPTION:  TIMESPAN timespan object class constructor.
0007 %               Create a timespan object.
0008 %
0009 % PROPERTIES:   start      - Start time of the time span. (type: time class)
0010 %               end        - End time of the time span.   (type: time class)
0011 %               timeformat - The time format of start- AND end- time.
0012 %               timezone   - The timezone of start- AND end- time.
0013 %
0014 % CONSTRUCTORS: t_span = timespan()
0015 %               t_span = timespan( time,       time)
0016 %               t_span = timespan('time,      '14:00:05')
0017 %               t_span = timespan('14:00:00', '14:00:05')
0018 %               t_span = timespan('14:00:00',  time)
0019 %               t_span = timespan('14:00:00', '14:00:05', 'HH:MM:SS')
0020 %               t_span = timespan(plist)
0021 %
0022 % PLIST KEYS:   mandatory: 'start'      - Time span start time.
0023 %                          'end'        - Time span end time.
0024 %               optional:  'timeformat' - Time format
0025 %                          'timezone'   - Time zone <string>
0026 %               The times can be as a time-object, a string or a unix time
0027 %
0028 % VERSION:      $Id: timespan.m,v 1.17 2008/02/24 10:15:55 hewitson Exp $
0029 %
0030 % HISTORY:      23-07-2007 Diepholz
0031 %                  Creation
0032 %
0033 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0034 
0035 ALGONAME = mfilename;
0036 VERSION  = '$Id: timespan.m,v 1.17 2008/02/24 10:15:55 hewitson Exp $';
0037 CATEGORY = 'Constructor';
0038 
0039 % Check if this is a call for parameters
0040 if (nargin == 2 || nargin == 3)
0041   if isa(varargin{1}, 'timespan') && ischar(varargin{2})
0042     in = char(varargin{2});
0043     if strcmp(in, 'Params')
0044       if nargin == 2
0045         varargout{1} = getDefaultPlist();
0046       else
0047         varargout{1} = getDefaultPlist(varargin{3});
0048       end
0049       return
0050     elseif strcmp(in, 'Version')
0051       varargout{1} = VERSION;
0052       return
0053     elseif strcmp(in, 'Category')
0054       varargout{1} = CATEGORY;
0055       return
0056     end
0057   end
0058 end
0059 
0060 %%%%%%%%%%%%%%%%%%%%%%%%%   define time properties   %%%%%%%%%%%%%%%%%%%%%%%%%%
0061 
0062   function t_span = init
0063     t_span.name       = 'time span-object';
0064     t_span.start      = time();
0065     t_span.end        = time();
0066     t_span.timeformat = t_span.start.timeformat;
0067     t_span.interval   = '';
0068     t_span.timezone   = t_span.start.timezone;
0069     t_span.created    = time();
0070     t_span.version    = VERSION;
0071     t_span.plist      = plist;
0072     t_span = class (t_span, 'timespan');
0073   end
0074 
0075 %%%%%%%%%%%%%%%%%%%%%%%%%%%   Create time object   %%%%%%%%%%%%%%%%%%%%%%%%%%%%
0076 
0077 %%%%%%%%%%  t_span = timespan()   %%%%%%%%%%
0078 if nargin == 0
0079 
0080   t_span = init;
0081 
0082 elseif nargin == 1
0083 
0084   %%%%%%%%%%   t1 = time(time-object)   %%%%%%%%%%
0085   if isa(varargin{1}, 'timespan')
0086 
0087     t_span = varargin{1};
0088 
0089   %%%%%%%%%%   tf = timespan('foo.mat')   %%%%%%%%%%
0090   %%%%%%%%%%   tf = timespan('foo.xml')   %%%%%%%%%%
0091   elseif ischar(varargin{1})
0092 
0093     filename = varargin{1};
0094     [path, name, ext, vers] = fileparts(filename);
0095     switch ext
0096       case '.mat'
0097         t_span = load(filename);
0098         t_span = t_span.a;
0099       case '.xml'
0100         root_node = xmlread(filename);
0101         t_span = ltpda_xmlread(root_node, 'timespan');
0102       otherwise
0103         error('### Unknown file type.');
0104     end
0105 
0106     varargout{1} = t_span;
0107 
0108   %%%%%%%%%%   t1 = time(plist)   %%%%%%%%%%
0109   elseif isa(varargin{1}, 'plist')
0110 
0111     pl_start      = find(varargin{1}, 'start');
0112     pl_end        = find(varargin{1}, 'end');
0113     pl_timezone   = find(varargin{1}, 'timezone');
0114     pl_timeformat = find(varargin{1}, 'timeformat');
0115     hostname      = find(varargin{1}, 'hostname');
0116     
0117     if ~isempty(hostname)
0118       t_span = timespanFromRepository(varargin{1}, VERSION, ALGONAME);
0119     else
0120       if isempty(pl_start) || isempty(pl_end)
0121         error('### The plist must contain the keys: ''start'' and ''end''');
0122       end
0123 
0124       t_span = init();
0125 
0126       if ~isempty(pl_timeformat)
0127         format_nr = str2double(pl_timeformat);
0128         if isnumeric(format_nr) && ~isnan(format_nr)
0129           t_span = set(t_span, 'timeformat', format_nr);
0130         else
0131           t_span = set(t_span, 'timeformat', pl_timeformat);
0132         end
0133       end
0134 
0135       if ~isempty(pl_timezone)
0136         t_span = set(t_span, 'timezone', pl_timezone);
0137       end
0138 
0139       t_span = set(t_span, 'start', pl_start);
0140       t_span = set(t_span, 'end', pl_end);
0141     end
0142     
0143     % Store input plist
0144     t_span.plist = remove(varargin{1}, 'conn');
0145 
0146   %%%%%%%%%%   t1 = time(struct)   %%%%%%%%%%
0147   elseif isstruct(varargin{1})
0148 
0149     t_span = init();
0150 
0151     fields = fieldnames(varargin{1});
0152     for ii = 1:length(fields)
0153       field = fields{ii};
0154       %%% start -> time-object
0155       if strcmp(field, 'start')
0156         start_t = varargin{1}.start;
0157         if isstruct(start_t)
0158           start_t = time(start_t);
0159         end
0160         t_span.start = start_t;
0161       %%% end -> time-object
0162       elseif strcmp(field, 'end')
0163         end_t = varargin{1}.end;
0164         if isstruct(end_t)
0165           end_t = time(end_t);
0166         end
0167         t_span.end = end_t;
0168       %%% timeformat -> timeformat-object
0169       elseif strcmp(field, 'timeformat')
0170         tf = varargin{1}.timeformat;
0171         if isstruct(tf)
0172           tf = timeformat(tf);
0173         end
0174         t_span.timeformat = tf;
0175       %%% All other
0176       else
0177         try
0178           t_span.(field) = varargin{1}.(field);
0179         catch
0180           error('### The field ''%s'' in the struct is not a timespan property.', field)
0181         end
0182       end
0183     end
0184 
0185     varargout{1} = t_span;
0186 
0187   else
0188     error ('### Unknown constructor');
0189   end
0190 
0191 elseif nargin == 2
0192 
0193   %%%%%%%%%%  t_span = timespan('14:00:00', '14:00:05')   %%%%%%%%%%
0194   if ischar(varargin{1}) && ischar(varargin{2})
0195 
0196     t_span = init;
0197     t_span.start = time(varargin{1});
0198     t_span.end   = time(varargin{2});
0199 
0200     % Adjust the 'timeformat' AND the 'timezone' of the end time to the start time.
0201     t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0202     t_span = set(t_span, 'timezone',   t_span.start.timezone);
0203 
0204     % Compute the interval
0205     t_span = compute_interval(t_span);
0206 
0207   %%%%%%%%%%% From DATABASE
0208   elseif isa(varargin{1}, 'database')
0209 
0210     t_span = retrieve(varargin{1}, varargin{2:end});
0211 
0212   %%%%%%%%%%  t_span = timespan(time, time)   %%%%%%%%%%
0213   elseif isa(varargin{1}, 'time') && isa(varargin{2}, 'time')
0214 
0215     t_span = init;
0216     t_span.start = varargin{1};
0217     t_span.end   = varargin{2};
0218 
0219     % Adjust the 'timeformat' AND the 'timezone' of the end time to the start time.
0220     t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0221     t_span = set(t_span, 'timezone',   t_span.start.timezone);
0222 
0223     % Compute the interval
0224     t_span = compute_interval(t_span);
0225 
0226   %%%%%%%%%%  t_span = timespan(time, '14:00:05')   %%%%%%%%%%
0227   elseif isa(varargin{1}, 'time') && ischar(varargin{2})
0228 
0229     t_span = init;
0230     t_span.start = varargin{1};
0231     t_span.end   = time(varargin{2}, char(t_span.start.timeformat));
0232 
0233     % Adjust the 'timeformat' AND the 'timezone' of the end time to the start time.
0234     t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0235     t_span = set(t_span, 'timezone',   t_span.start.timezone);
0236 
0237     % Compute the interval
0238     t_span = compute_interval(t_span);
0239 
0240   %%%%%%%%%%  t_span = timespan('14:00:00', time)   %%%%%%%%%%
0241   elseif ischar(varargin{1}) && isa(varargin{2}, 'time')
0242 
0243     t_span = init;
0244     t_span.end   = varargin{2};
0245     t_span.start = time(varargin{1}, char(t_span.end.timeformat));
0246 
0247     % Adjust the 'timeformat' AND the 'timezone' of the end time to the start time.
0248     t_span = set(t_span, 'timeformat', t_span.start.timeformat);
0249     t_span = set(t_span, 'timezone',   t_span.start.timezone);
0250 
0251     % Compute the interval
0252     t_span = compute_interval(t_span);
0253 
0254   else
0255     error ('  ### Unknown constructor.');
0256 
0257   end
0258 
0259 elseif nargin == 3
0260 
0261   %%%%%%%%%%  t_span = timespan('14:00:00', '14:00:05', 'HH:MM:SS')   %%%%%%%%%%
0262   if ischar(varargin{1}) && ischar(varargin{2}) && ischar(varargin{3})
0263 
0264     t_span = init;
0265     t_span.start = time(varargin{1}, varargin{3});
0266     t_span.end   = time(varargin{2}, varargin{3});
0267     t_span.timeformat = t_span.start.timeformat;
0268 
0269     % Compute the interval
0270     t_span = compute_interval(t_span);
0271 
0272   elseif isa(varargin{1}, 'time') && isa(varargin{2}, 'time') && isa(varargin{3}, 'timeformat')
0273 
0274     t_span = init;
0275     t_span.start      = varargin{1};
0276     t_span.end        = varargin{2};
0277     t_span.timeformat = varargin{3};
0278 
0279     t_span.start = set(t_span.start, 'timeformat', t_span.timeformat);
0280     t_span.end   = set(t_span.end,   'timeformat', t_span.timeformat);
0281 
0282     % Compute the interval
0283     t_span = compute_interval(t_span);
0284 
0285   else
0286     error ('  ### Unknown constructor.');
0287 
0288   end
0289 
0290 else
0291 
0292   error ('### Unknown number of inputs');
0293 
0294 end
0295 
0296 
0297 if t_span.start.utc_epoch_milli > t_span.end.utc_epoch_milli
0298   error('### The start time is larger than the end time.');
0299 end
0300 
0301 varargout{1} = t_span;
0302 
0303 %--------------------------------------------------------------------------
0304 % construct a timespan from a repository
0305 %
0306   function fs = timespanFromRepository(pl, VERSION, ALGONAME)
0307 
0308     dpl = getDefaultPlist('From Repository');
0309     pl  = combine(pl, dpl);
0310 
0311     % Get parameters
0312     conn = find(pl, 'conn');
0313     hostname = find(pl, 'hostname');
0314     database = find(pl, 'database');
0315     ids      = find(pl, 'id');
0316 
0317     % do we have a connection?
0318     closeConn = 0;
0319     if isempty(conn)
0320       closeConn = 1;
0321       % Connect to repository
0322       conn = mysql_connect(hostname, database);
0323     end
0324     if ~isa(conn, 'database')
0325       error('### connection failed.');
0326     end
0327 
0328     % Get each ID
0329     Nids = length(ids);
0330     fs  = [];
0331     for kk=1:Nids
0332 
0333       %---- This id
0334       id = ids(kk);
0335       disp(sprintf('  - retrieving ID %d', id));
0336 
0337       %---- check ID object type
0338       tt = mysql_getObjType(conn, id);
0339       %---- If this is a timespan
0340       if strcmp(tt, mfilename)
0341         %---- call database constructor
0342         a = ltpda_obj_retrieve(conn, id);
0343         %---- Add history
0344         %---- Add to output array
0345         fs = [fs a];
0346       else
0347         warning('    !skipping ID %d, type %s', id, tt);
0348       end
0349 
0350     end
0351 
0352     % close connection
0353     if closeConn
0354       close(conn);
0355     end
0356 
0357   end
0358 
0359 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0360 %
0361 % FUNCTION:    getDefaultPlist
0362 %
0363 % DESCRIPTION: Get default params
0364 %
0365 % HISTORY:     11-02-2008 M Hueller
0366 %                 Creation
0367 %
0368 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0369   function out = getDefaultPlist(varargin)
0370 
0371     % list of available parameter sets
0372     sets = {'From Timespan Definition', 'From Repository'};
0373 
0374     if nargin == 0
0375       out = sets;
0376       return
0377     end
0378 
0379     set = varargin{1};
0380     switch set
0381       case 'From Repository'
0382         out = plist('hostname', 'localhost', 'database', 'ltpda', 'ID', []);
0383       case 'From Timespan Definition'
0384         out = plist('start', '1970-01-01 00:30:00.000', ...
0385                     'end', '1980-01-01 12:00:00.010', ....
0386                     'timezone', 'UTC', ...
0387                     'timeformat', 'yyyy-mm-dd HH:MM:SS.FFF');
0388       otherwise
0389         out = plist();
0390     end
0391 
0392   end
0393 
0394 
0395 end % varargout = timespan(varargin)

Generated on Fri 07-Mar-2008 15:46:43 by m2html © 2003