project BLF > class BScanDaemon > method ValidateDirectoriesLocation


Parameters


icParentRowidinputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


BLF
method BScanDaemon.ValidateComponent
method BScanDaemon.ValidateDirectories


program code (program1/bscandaemon.p)

for each t_sScanDaemonLocation where
         t_sScanDaemonLocation.tc_ParentRowid         = icParentRowid and
         t_sScanDaemonLocation.ScanDaemonLocationDir <> ""            and
         t_sScanDaemonLocation.ScanDaemonLocationDir <> ?             and
         t_sScanDaemonLocation.tc_Status             <> "D",
    first t_sfcDaemon where
          t_sfcDaemon.tc_Rowid = t_sScanDaemonLocation.tc_ParentRowid:

    /* If the directory didn't change, no validation is necessary */
    /* except all-entity entries, these are always validated (per entity) */
    if t_sScanDaemonLocation.tc_Status <> "N"
    and t_sScanDaemonLocation.tcCompanyCode <> ""
    then do:
        find t_iScanDaemonLocation where
             t_iScanDaemonLocation.tc_Rowid = t_sScanDaemonLocation.tc_Rowid
             no-error.

        if not available t_iScanDaemonLocation
        then do:
            <M-1 run SetMessage
               (input  trim(#T-10'Internal error: no initial record found for modified ScanDaemonLocation record.':255(998716604)T-10#) (icMessage), 
                input  '' (icArguments), 
                input  '' (icFieldName), 
                input  '' (icFieldValue), 
                input  'E' (icType), 
                input  3 (iiSeverity), 
                input  t_sScanDaemonLocation.tc_Rowid (icRowid), 
                input  'BLF-447':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BScanDaemon>

            assign oiReturnStatus = -3.
            return.
        end.

        if t_sScanDaemonLocation.ScanDaemonLocationDir = t_iScanDaemonLocation.ScanDaemonLocationDir
        then next.
    end.

    assign vcDaemonAppServerURL = if t_sfcDaemon.DaemonAppserver = "" or
                                     t_sfcDaemon.DaemonAppserver = ?
                                  then "local"
                                  else t_sfcDaemon.DaemonAppserver.

    if vhTDUtil = ?
    then do:
        <M-2 run Main  (input  viSessionId (iiSessionId)) in TDaemonUtility>
        vhTDUtil = vhFcComponent.
    end.
    
    vhFcComponent = vhTDUtil.
    <M-3 run GetFileType
       (input  {&SCANDAEMON} (icDaemonName), 
        input  t_sScanDaemonLocation.ScanDaemonLocationDir (icFileName), 
        input  vcDaemonAppServerURL (icDaemonAppserverUrl), 
        output vcFileType (ocFileType), 
        output vcMessage (ocMessage), 
        output viFcReturnSuper (oiReturnStatus)) in TDaemonUtility>
    if viFcReturnSuper <> 0
    then assign oiReturnStatus = viFcReturnSuper.

    if vcMessage <> ""
    then do:
        <M-4 run SetMessage
           (input  vcMessage (icMessage), 
            input  '' (icArguments), 
            input  'tScanDaemonLocation.ScanDaemonLocationDir' (icFieldName), 
            input  t_sScanDaemonLocation.ScanDaemonLocationDir (icFieldValue), 
            input  'E' (icType), 
            input  3 (iiSeverity), 
            input  t_sScanDaemonLocation.tc_Rowid (icRowid), 
            input  'BLF-448':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BScanDaemon>
    end.

    if oiReturnStatus < 0
    then return.

    if vcFileType = ?
    then assign vcFileType = "".

    /* Check if it really is a directory */
    if index(vcFileType, "D") = 0
    then do:
        <M-5 run SetMessage
           (input  trim(#T-11'The directory specified is not valid, would you like to create it?':255(998716602)T-11#) (icMessage), 
            input  '' (icArguments), 
            input  'tScanDaemonLocation.ScanDaemonLocationDir' (icFieldName), 
            input  t_sScanDaemonLocation.ScanDaemonLocationDir (icFieldValue), 
            input  'W' (icType), 
            input  4 (iiSeverity), 
            input  t_sScanDaemonLocation.tc_Rowid (icRowid), 
            input  'BLF-449':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BScanDaemon>

        if t_sScanDaemonLocation.tcCompanyCode = ""
        then do:
            <Q-40 run CompanyByAll (all) (Read) (NoCache)
               (input 0, (CompanyId)
                input '', (CompanyCode)
                input true, (CompanyIsActive)
                output dataset tqCompanyByAll) in BCompany>
            for each tqCompanyByAll on error undo, throw:
                create tDirectoryToCreate.
                assign tDirectoryToCreate.tcDirectoryName   = t_sScanDaemonLocation.ScanDaemonLocationDir
                                                            + "/" + tqCompanyByAll.tcCompanyCode
                       tDirectoryToCreate.tcDaemonName      = {&SCANDAEMON}
                       tDirectoryToCreate.tcDaemonAppserver = vcDaemonAppServerURL.
            end.
        end.
        else do:
            create tDirectoryToCreate.
            assign tDirectoryToCreate.tcDirectoryName   = t_sScanDaemonLocation.ScanDaemonLocationDir
                   tDirectoryToCreate.tcDaemonName      = {&SCANDAEMON}
                   tDirectoryToCreate.tcDaemonAppserver = vcDaemonAppServerURL.
        end.
        
        oiReturnStatus = 1.
    end.
    else
    /* Check if you can write to the directory */
    if index(vcFileType, "W") = 0
    then do:
        <M-6 run SetMessage
           (input  trim(#T-9'You do not have write permissions for this directory.':255(9365)T-9#) (icMessage), 
            input  '' (icArguments), 
            input  'tScanDaemonLocation.ScanDaemonLocationDir' (icFieldName), 
            input  t_sScanDaemonLocation.ScanDaemonLocationDir (icFieldValue), 
            input  'E' (icType), 
            input  3 (iiSeverity), 
            input  t_sScanDaemonLocation.tc_Rowid (icRowid), 
            input  'BLF-450':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BScanDaemon>

        assign oiReturnStatus = -1.
    end.
    else
    if t_sScanDaemonLocation.tcCompanyCode = ""
    then do:
        if vhTDUtil = ?
        then do:
            <M-92 run Main  (input  viSessionId (iiSessionId)) in TDaemonUtility>
            vhTDUtil = vhFcComponent.
        end.

        <Q-95 run CompanyByAll (all) (Read) (NoCache)
           (input 0, (CompanyId)
            input '', (CompanyCode)
            input true, (CompanyIsActive)
            output dataset tqCompanyByAll) in BCompany>
            
        for each tqCompanyByAll on error undo, throw:
        
            vhFcComponent = vhTDUtil.
            <M-91 run GetFileType
               (input  {&SCANDAEMON} (icDaemonName), 
                input  t_sScanDaemonLocation.ScanDaemonLocationDir + '/' + tqCompanyByAll.tcCompanyCode (icFileName), 
                input  vcDaemonAppServerURL (icDaemonAppserverUrl), 
                output vcFileType (ocFileType), 
                output vcMessage (ocMessage), 
                output viFcReturnSuper (oiReturnStatus)) in TDaemonUtility>
            if viFcReturnSuper <> 0
            then assign oiReturnStatus = viFcReturnSuper.
        
            if vcMessage <> ""
            then do:
                <M-59 run SetMessage
                   (input  vcMessage (icMessage), 
                    input  '' (icArguments), 
                    input  'tScanDaemonLocation.ScanDaemonLocationDir' (icFieldName), 
                    input  t_sScanDaemonLocation.ScanDaemonLocationDir + '/' + tqCompanyByAll.tcCompanyCode (icFieldValue), 
                    input  'E' (icType), 
                    input  3 (iiSeverity), 
                    input  t_sScanDaemonLocation.tc_Rowid (icRowid), 
                    input  'blf-557700':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BScanDaemon>
            end.
        
            if oiReturnStatus < 0
            then return.
        
            if vcFileType = ?
            then do:
                create tDirectoryToCreate.
                assign tDirectoryToCreate.tcDirectoryName   = t_sScanDaemonLocation.ScanDaemonLocationDir
                                                            + "/" + tqCompanyByAll.tcCompanyCode
                       tDirectoryToCreate.tcDaemonName      = {&SCANDAEMON}
                       tDirectoryToCreate.tcDaemonAppserver = vcDaemonAppServerURL.
            end.
        end.
    end.
end.


finally:
    if vhTDUtil <> ?
    then do:
        run gipr_DeleteProcedure in vhTDUtil.
        delete procedure vhTDUtil.
    end.
end finally.