#!/usr/bin/env perl
#----------------------------------------------------------------------------
#
# Name: eng_poll
#
# This perl script creates the ENG class OSF based on ENV variables set by the
# XPOLL process using the process resource file.
#
# Interactive Usage:
#	None
#
#
# History:
# Date     OPR      Who       Reason
# -------- -------- --------- ---------------------------------------------
# 09/13/01 43965    J.Baum    Initial version
# 04/29/02 45738    J.Baum    Use external subroutines.
#----------------------------------------------------------------------------
# set up external routines
unshift @INC,(split /:/, $ENV{PATH});
require 'printmsg.pl';       # prints a formatted status message

#----------------------------------------------------------------------------
#specify exit status values
#---------------------------------------------------------------------
    $FILE_SUCCESS     = 11; # exit status for XPOLL
    $FILE_FAILURE     = 13; # exit status for XPOLL
    $FILE_DUPLICATE   = 15; # exit status for XPOLL

#---------------------------------------------------------------------
#check for all required ENV variables
#---------------------------------------------------------------------

    $event         = $ENV{"EVENT_NAME"};
    $PATH          = $ENV{"PATH_FILE"};
    $CLASS         = $ENV{"DATA_ID"};
    $PROC_EXT      = $ENV{"PROC_EXT"};
    $SYSTEM        = uc($ENV{"PIPELINE"});
    $OSF_DUPLICATE = $ENV{"DUPLICATE"};
    $SET_STATUS    = $ENV{"SET_STATUS"};
    $POLL_STEP     = $ENV{"POLL_STEP"};
    if (!defined($event) || !defined($PATH) || !defined($CLASS) ||
        !defined($OSF_DUPLICATE) || !defined($SET_STATUS) ||
        !defined($POLL_STEP) || !defined($PROC_EXT) || !defined($SYSTEM))
    {
       PrintMsg("E","Missing ENV variable from XPOLL --");
       PrintMsg("E",
"Must have EVENT_NAME, PATH_FILE, PIPELINE, DATA_ID, DUPLICATE,");
       PrintMsg("E", 
" SET_STATUS, PROC_EXT and POLL_STEP ENV variables defined.");
       exit( $FILE_FAILURE);
    }
#---------------------------------------------------------------------
# get rootname out of event after stripping out PROC_EXT
#---------------------------------------------------------------------
    $stripped_length = index( $event, $PROC_EXT);
    if ($stripped_length < 0) {
       PrintMsg("E","PROC_EXT not consistent with FILE_PROCESSING.");
       exit( $FILE_FAILURE);
    }
    $rootname = substr($event,0,$stripped_length);
    $rootname =~s#(.+[/\]:])(\w+$)#$2#;

#---------------------------------------------------------------------
# log sign on message
#---------------------------------------------------------------------

    PrintMsg ("I","--- start ----- $SYSTEM File Poller -------");
    PrintMsg ("I","--- found: $rootname");

    $osf_stat=`osf_test -p $PATH -f $rootname -pr $POLL_STEP`;
    $osf_stat= lc(substr( $osf_stat, 0, 1));
    if ($osf_stat eq 'c' || $osf_stat eq 'd') {
      if ($sys_stat = system("osf_update","-p",$PATH,
          "-f",$rootname,"-c",$POLL_STEP,"-s",$OSF_DUPLICATE)) {
        $return_stat = $sys_stat/256;
        PrintMsg ("E", 
            "Failed to update OSF as duplicate. Status $return_stat");
        exit( $FILE_FAILURE);
      } else {
        PrintMsg ("W","An OSF for this file already exists - duplicate file detected.");
        PrintMsg ("W", 
"Successfully updated duplicate status for OSF $rootname , stage $POLL_STEP.");
        PrintMsg ("W","The duplicate file will get a FILE_ERROR extension.");
        PrintMsg ("I","---  end  ----- $SYSTEM File Poller -------");
        exit( $FILE_DUPLICATE);
      }
    } elsif ($osf_stat eq '') {
      $cmd = "osf_create -p $PATH -f $rootname -t $CLASS -s $SET_STATUS";
      PrintMsg("I",$cmd);
      `$cmd`;
      if ($?) {
        PrintMsg("E","unable to create the osf for $rootname");
        exit ($FILE_FAILURE);
      }
    } else {
      PrintMsg ("E", 
            "Unexpected output <$osf_stat> from osf_test");
      exit( $FILE_FAILURE);
    }
#---------------------------------------------------------------------
# signoff for successful processing
#---------------------------------------------------------------------
    PrintMsg ("I","---  end  ----- $SYSTEM File Poller -------");
    exit( $FILE_SUCCESS);
