;------------------------------------------------------------------------------;
;+
; NAME
;           EIS_MK_PLAN_INI__DEFINE
;
; CATEGORY
;           EIS Timeline Planning
;
; PURPOSE
;           This procedure defines the data members of the
;           Object "eis_mk_plan_ini".
;
; NOTES
;           This object is called automatically during the CPT process.
;           The fileName is based on the CPT start_time
;
; INPUTS
;           cpt_tlc - an IDL_Container object. This object contains
;                     the timeline entries that are being processed
;                     by CPT.
;
; WRITTEN
;           John A Rainnie RAL 26-Jun-2008
;
; HISTORY
;          v0.1 JAR 4-Aug-2008
;               IF HOP_ID or NOAA_NUM are not numbers, then set to zero
;          v0.2 JAR 6-May-2009
;               Now pathName is MS Windoze-proof.
;
;-
;______________________________________________________________________________
FUNCTION eis_mk_plan_ini::Init , parentClass

Self.parentClass = parentClass

;pathName      = EXPAND_PATH('$HOME')
pathName      = GETENV('HOME')
baseName      = '.eis_mk_plan'
Self.fileName = CONCAT_DIR(pathName , baseName)

CASE FILE_TEST(Self.fileName) OF
   1    : Self->read_ini_file
   ELSE : Self->create_ini_file
ENDCASE

RETURN , 1

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_mk_plan_ini::setProperty , wavelength = wavelength

IF (N_ELEMENTS(wavelength) GT 0) THEN stop

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_mk_plan_ini::getProperty , fileName = fileName

fileName = Self.fileName

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_mk_plan_ini::Cleanup

PTR_FREE , Self.lines

END
;______________________________________________________________________________
; READ the ini file
;______________________________________________________________________________
PRO eis_mk_plan_ini::update_ini_file

Self.parentClass->getProperty , meta_str  = meta_str                 ,     $
                                cpt_str   = cpt_str

f  = '(A-15,A-80)'
f2 = '(A-15,I-4)'

obstitle      = STRING(format=f,'obstitle'      ,meta_str.obstitle)
obs_dec       = STRING(format=f,'obs_dec'       ,meta_str.obs_dec)
join_sb       = STRING(format=f,'join_sb'       ,meta_str.join_sb)
hop_id        = STRING(format=f,'hop_id'        ,meta_str.hop_id)
noaa_num      = STRING(format=f,'noaa_num'      ,meta_str.noaa_num)
sci_obj       = STRING(format=f,'sci_obj'       ,meta_str.sci_obj)
observer      = STRING(format=f,'observer'      ,cpt_str.observer)
planner       = STRING(format=f,'planner'       ,cpt_str.planner)
tohban        = STRING(format=f,'tohban'        ,cpt_str.tohban)
opogPassNum   = STRING(format=f2,'opogPassNum'  ,cpt_str.opogPassNum)
obstblPassNum = STRING(format=f2,'obstblPassNum',cpt_str.obstblPassNum)

OPENW    , lun , Self.fileName , /GET_LUN
PRINTF   , lun , 'eis_mk_plan_ini file - generated automatically. Do not edit!'
PRINTF   , lun , STRTRIM(obstitle,2)
PRINTF   , lun , STRTRIM(obs_dec,2)
PRINTF   , lun , STRTRIM(join_sb,2)
PRINTF   , lun , STRTRIM(hop_id,2)
PRINTF   , lun , STRTRIM(noaa_num,2)
PRINTF   , lun , STRTRIM(sci_obj,2)
PRINTF   , lun , STRTRIM(observer,2)
PRINTF   , lun , STRTRIM(planner,2)
PRINTF   , lun , STRTRIM(tohban,2)
PRINTF   , lun , STRTRIM(opogPassNum,2)
PRINTF   , lun , STRTRIM(obstblPassNum,2)

FREE_LUN , lun

END
;______________________________________________________________________________
; READ the ini file
;______________________________________________________________________________
FUNCTION eis_mk_plan_ini::get_tag_value , tag , lines

str_exp  = STRLOWCASE(STRJOIN(['^',tag],/SINGLE))
indicies = STREGEX(lines , str_exp  , /BOOLEAN , /FOLD_CASE)

i_list   = WHERE(indicies EQ 1 , count)

IF (i_list GE 1) THEN BEGIN
   split = STRSPLIT(lines[i_list[0]] , /EXTRACT , count = count)
   IF (count LT 2) THEN RETURN , 'Unknown'
   value = STRJOIN(split[1:N_ELEMENTS(split)-1],' ',/SINGLE)
ENDIF ELSE BEGIN
   value = STRLOWCASE(tag)
   IF (STRLOWCASE(tag) EQ 'opogPassNum'  ) THEN value = '1'
   IF (STRLOWCASE(tag) EQ 'obstblPassNum') THEN value = '1'
ENDELSE

RETURN , value

END
;______________________________________________________________________________
; READ the ini file
;______________________________________________________________________________
PRO eis_mk_plan_ini::read_ini_file

lines         = RD_ASCII(Self.fileName)
Self.parentClass->getProperty , meta_str  = meta_str                 ,     $
                                cpt_str   = cpt_str
;
; Metadata Tags
;
tag_list = TAG_NAMES(meta_str)
val_list = STRARR(N_TAGS(meta_str))
FOR i = 0 , N_TAGS(meta_str) - 1 DO BEGIN
   val_list[i] = Self->get_tag_value(tag_list[i] , lines)
ENDFOR
meta_str.obstitle = val_list[0]
meta_str.obs_dec  = val_list[1]
meta_str.join_sb  = val_list[2]
IF (STRLOWCASE(val_list[3]) EQ 'unknown') THEN val_list[3] = '0'
meta_str.hop_id   = val_list[3]
IF (STRLOWCASE(val_list[4]) EQ 'unknown') THEN val_list[4] = '0'
meta_str.noaa_num = val_list[4]
meta_str.sci_obj  = val_list[5]

;
; CPT Tags
;
tag_list = TAG_NAMES(cpt_str)
val_list = STRARR(N_TAGS(cpt_str))
FOR i = 0 , N_TAGS(cpt_str) - 1 DO BEGIN
   val_list[i] = Self->get_tag_value(tag_list[i] , lines)
ENDFOR
cpt_str.observer      = val_list[0]
cpt_str.planner       = val_list[1]
cpt_str.tohban        = val_list[2]
cpt_str.opogPassNum   = FIX(val_list[3])
cpt_str.obstblPassNum = FIX(val_list[4])

Self.parentClass->setProperty , meta_str  = meta_str                 ,     $
                                cpt_str   = cpt_str

END
;______________________________________________________________________________
; CREATE the ini file
;______________________________________________________________________________
PRO eis_mk_plan_ini::create_ini_file

OPENW  , lun , Self.fileName , /GET_LUN
PRINTF , lun , 'eis_mk_plan_ini file - generated automatically. Do not edit!'
PRINTF , lun , 'obstitle      obstitle'
PRINTF , lun , 'obs_dec       obs_dec'
PRINTF , lun , 'join_sb       join_sb'
PRINTF , lun , 'hop_id        hop_id'
PRINTF , lun , 'noaa_num      noaa_num'
PRINTF , lun , 'sci_obj       sci_obj'
PRINTF , lun , 'observer      Unknown'
PRINTF , lun , 'planner       Unknown'
PRINTF , lun , 'tohban        Unknown'
PRINTF , lun , 'opogPassNum   1'
PRINTF , lun , 'obstblPassNum 1'

FREE_LUN , lun

END
;______________________________________________________________________________
Pro eis_mk_plan_ini__define
;______________________________________________________________________________

junk =  {   eis_mk_plan_ini                                          ,     $
                        parentClass        : OBJ_NEW()               ,     $
                        lines              : PTR_NEW()               ,     $
                        fileName           : ''                            $
           }

End
