;
; NOSA HEADER START
;
; The contents of this file are subject to the terms of the NASA Open
; Source Agreement (NOSA), Version 1.3 only (the "Agreement"). You may
; not use this file except in compliance with the Agreement.
;
; You can obtain a copy of the agreement at
; docs/NASA_Open_Source_Agreement_1.3.txt
;
; See the Agreement for the specific language governing permissions
; and limitations under the Agreement.
;
; When distributing Covered Code, include this NOSA HEADER in each
; file and include the Agreement file at
; docs/NASA_Open_Source_Agreement_1.3.txt. If applicable, add the
; following below this NOSA HEADER, with the fields enclosed by
; brackets "[]" replaced with your own identifying information:
; Portions Copyright [yyyy] [name of copyright owner]
;
; NOSA HEADER END
;
; Copyright (c) 2010-2024 United States Government as represented by the
; National Aeronautics and Space Administration. No copyright is claimed
; in the United States under Title 17, U.S.Code. All Other Rights Reserved.
;
;
;+
; This class is an IDL representation of the TimeInterval element from
; the
; <a href="https://cdaweb.gsfc.nasa.gov/">Coordinated Data Analysis
; System</a> (CDAS) and
; <a href="http://sscweb.gsfc.nasa.gov/">Satellite Situation Center</a>
; (SSC) XML schemas.
;
; Notes:
; <ol>
; <li>This class exists in both the CDAS and SSC web service IDL
; libraries. They should be kept identical to void incompatiblities
; for clients that use both libraries simultaneously.</li>
; </ol>
;
; @copyright Copyright (c) 2010-2024 United States Government as
; represented by the National Aeronautics and Space Administration.
; No copyright is claimed in the United States under Title 17,
; U.S.Code. All Other Rights Reserved.
;
; @author B. Harris
;-
;+
; Creates an SpdfTimeInterval object.
;
; @param start {in} {type=string/julday}
; start time of interval. Value may be either an
; <a href="https://en.wikipedia.org/wiki/ISO_8601">
; ISO 8601</a> date/time string or a julday value.
; @param stop {in} {type=string/julday}
; stop time of interval. Value may be either an
; <a href="https://en.wikipedia.org/wiki/ISO_8601">
; ISO 8601</a> date/time string or a julday value.
; @returns reference to an SpdfTimeInterval object.
;-
function SpdfTimeInterval::init, $
start, stop
compile_opt idl2
self.cdawebFormat = $
'(I4, "/", I02, "/", I02, " ", I02, ":", I02, ":", I02)'
self.iso8601Format = $
'(I4, "-", I02, "-", I02, "T", I02, ":", I02, ":", F06.3, "Z")'
self.shortIso8601Format = $
'(I4, 1X, I2, 1X, I2, 1X, I2, 1X, I2, 1X, F06.3)'
self.basicIso8601Format = $
'(I4, I02, I02, "T", I02, I02, I02, "Z")'
if (size(start, /type) eq 7) then begin
self.start = self->getJulDayFromIso8601(start)
endif else begin
self.start = start
endelse
if size(stop, /type) eq 7 then begin
self.stop = self->getJulDayFromIso8601(stop)
endif else begin
self.stop = stop
endelse
return, self
end
;+
; Performs cleanup operations when this object is destroyed.
;-
pro SpdfTimeInterval::cleanup
compile_opt idl2
end
;+
; Get the start value.
;
; @returns julday start value.
;-
function SpdfTimeInterval::getStart
compile_opt idl2
return, self.start
end
;+
; Sets the start value.
;
; @param value {in} {type=julday} new value
;-
pro SpdfTimeInterval::setStart, $
value
compile_opt idl2
self.start = value
end
;+
; Get the stop value.
;
; @returns julday stop value.
;-
function SpdfTimeInterval::getStop
compile_opt idl2
return, self.stop
end
;+
; Sets the stop value.
;
; @param value {in} {type=julday} new value
;-
pro SpdfTimeInterval::setStop, $
value
compile_opt idl2
self.stop = value
end
;+
; Converts the given ISO 8601 time value string into the
; corresponding julday value.
;
; @param value {in} {type=string}
; ISO 8601 date/time value
; @returns julday value corresponding to the given iso8601 value.
;-
function SpdfTimeInterval::getJulDayFromIso8601, $
value
compile_opt idl2
; compile_opt static (idl 8.3) except for self.iso8601Format constant
iso8601 = value
if strlen(value) eq 10 then begin
iso8601 = value + ' 00:00:00'
endif
reads, iso8601, format=self.shortIso8601Format, $
year, month, day, hour, minute, second
return, julday(month, day, year, hour, minute, second)
end
;+
; Converts the given julday value into the corresponding ISO 8601
; time value string.
;
; @param value {in} {type=string}
; julday value.
; @keyword basicFormat {in} {optional} {type=boolean} {default=false}
; Indicates whether the "basic" (minimal field separators) ISO 8601
; format is to be returned.
; @returns ISO 8601 date/time value corresponding to the given
; julday value.
;-
function SpdfTimeInterval::getIso8601FromJulDay, $
value, $
basicFormat = basicFormat
compile_opt idl2
; compile_opt static (idl 8.3) except for self.iso8601Format constant
format = self.iso8601Format
if keyword_set(basicFormat) && basicFormat then begin
format = self.basicIso8601Format
endif
caldat, value, month, day, year, hour, minute, second
return, string(year, month, day, hour, minute, second, $
format=format)
end
;+
; Get the start value.
;
; @keyword basicFormat {in} {optional} {type=boolean} {default=false}
; Indicates whether the "basic" (minimal field separators) ISO 8601
; format is to be returned.
; @returns start value as an ISO 8601 string.
;-
function SpdfTimeInterval::getIso8601Start, $
basicFormat = basicFormat
compile_opt idl2
return, self->getIso8601FromJulDay(self.start, basicFormat=basicFormat)
end
;+
; Get the stop value.
;
; @keyword basicFormat {in} {optional} {type=boolean} {default=false}
; Indicates whether the "basic" (minimal field separators) ISO 8601
; format is to be returned.
; @returns stop value as an ISO 8601 string.
;-
function SpdfTimeInterval::getIso8601Stop, $
basicFormat = basicFormat
compile_opt idl2
return, self->getIso8601FromJulDay(self.stop, basicFormat=basicFormat)
end
;+
; Get the start value.
;
; @returns start value as an cdaweb format string.
;-
function SpdfTimeInterval::getCdawebStart
compile_opt idl2
caldat, self.start, month, day, year, hour, minute, second
return, string(year, month, day, hour, minute, second, $
format=self.cdawebFormat)
end
;+
; Get the stop value.
;
; @returns stop value as an cdaweb format string.
;-
function SpdfTimeInterval::getCdawebStop
compile_opt idl2
caldat, self.stop, month, day, year, hour, minute, second
return, string(year, month, day, hour, minute, second, $
format=self.cdawebFormat)
end
;+
; Determines if the start time is less than the stop time.
;
; @returns true if the start time is less than the stop time.
; Otherwise false.
;-
function SpdfTimeInterval::isStartLessThanStop
compile_opt idl2
return, self.start lt self.stop
end
;+
; Determines if this interval is larger than one day.
;
; @returns true if this interval is larger than one day.
; Otherwise false.
;-
function SpdfTimeInterval::isGreaterThan1Day
compile_opt idl2
return, (self.stop - self.start) gt 1
end
;+
; Prints a textual representation of this object.
;-
pro SpdfTimeInterval::print
compile_opt idl2
print, 'TimeInterval: ', self->getIso8601Start(), ' to ', $
self->getIso8601Stop()
end
;+
; Creates a TimeInterval element using the given XML DOM document with the
; values of this object.
;
; @param doc {in} {type=IDLffXMLDOMDocument}
; document in which to create the TimeInterval element.
; @returns a reference to a new IDLffXMLDOMElement representation of
; this object.
;-
function SpdfTimeInterval::createDomElement, $
doc
compile_opt idl2
timeIntervalElement = doc->createElement('TimeInterval')
startElement = doc->createElement('Start')
ovoid = timeIntervalElement->appendChild(startElement)
startTextNode = doc->createTextNode(self->getIso8601Start())
ovoid = startElement->appendChild(startTextNode)
endElement = doc->createElement('End')
ovoid = timeIntervalElement->appendChild(endElement)
endTextNode = doc->createTextNode(self->getIso8601Stop())
ovoid = endElement->appendChild(endTextNode)
return, timeIntervalElement
end
;+
; Defines the SpdfTimeInterval class.
;
; @field start julday start value of interval.
; @field stop julday stop value of interval.
; @field cdawebFormat constant format string for a "cdaweb" time format.
; @field iso8601Format constant format string for an ISO 8601 value.
; @field shortIso8601Format short version of a constant format string
; for an ISO 8601 value.
; @field basicIso8601Format constant format string for a "basic" (minimal
; field separators) ISO 8601 value.
;-
pro SpdfTimeInterval__define
compile_opt idl2
struct = { SpdfTimeInterval, $
start:0d, $
stop:0d, $
cdawebFormat:'', $
iso8601Format:'', $
shortIso8601Format:'', $
basicIso8601Format:'' $
}
end