from PySTAF import *
from PySTAFMon import *
from PySTAFLog import *

def main(handle1):
    
    #global handle, fd
    global obj
    global handle, myStaxJobUserLogName
    #handle = res.result
    #WAIT = 1
    #while WAIT == 1:
    print "Inside main: Got: %s", handle1.handle
    while 1:
        """import os
        staticHandleNumber = os.environ.get('STAF_STATIC_HANDLE')
        if staticHandleNumber == None:
            print "Error: STAF_STATIC_HANDLE environment variable does not exist"
        else:
        """    
        res1 = handle1.submit("local", "QUEUE", "GET PRIORITY 1 WAIT")
        #res1 = handle1.submit("local", "QUEUE", "GET WAIT")
        if (res1.rc != 0):
            print "\nError submitting request Queue Get handle, RC: %d, Result: %s\n" % (res1.rc, res1.result)
        else:
            print "\nSome REQUEST received\n"
    
        print "\n"
        print res1.result
            
        print "\nOK"
        ro = res1.resultObj
        mc = res1.resultContext
        print "\n%s\n" %(mc)
        print "Handle in message: %s" %(ro['handle'])
        
        filePath = ro['message'] #Check if the message element is not empty
        print "\n%s" %(ro['message'])
        if ro['message'] == "WAIT":
            #WAIT = 1
            result1 = handle1.submit('local', 'QUEUE', 'QUEUE PRIORITY 2 HANDLE %s MESSAGE "OKEY!"' %(handle1.handle))
            #result = handle.submit('local', 'QUEUE', 'QUEUE HANDLE %s MESSAGE "OKEY!"' %(handle.handle))
            if (result1.rc != 0):
                print "\nError submitting RESPONSE 'OK', RC: %d, Result: %s\n" % (result1.rc, result1.result)
            else:
                print "\nRESPONSE - OK submitted\n"
            result2 = handle1.submit('local', 'SEM', 'POST EVENT RESPONSE1/Ready')
            print 'Event 1 Posted'
        elif ro['message'] == "CLEAN-UP":
            result8 = handle1.submit('local', 'QUEUE', 'QUEUE PRIORITY 2 HANDLE %s MESSAGE "Clean-up Done"' %(handle1.handle))
            if (result8.rc != 0):
                print "\nError submitting RESPONSE 'Clean-up Done', RC: %d, Result: %s\n"\
                                                            % (result8.rc, result8.result)
            else:
                print "\nRESPONSE - 'Clean-up Done' submitted\n"
                return
        else:
            #WAIT = 0
            import sys, os.path
            dir = os.path.dirname(ro['message'])
            file = os.path.basename(ro['message'])
            print "dir: ", dir
            dir = os.path.abspath(dir)
            print "dir: ", dir
            sys.path.append(dir)
            sys.path.append(os.path.dirname(dir))
            print dir, "file:", file
            print "\n%s"%(file)
            head, tail = file.split(".py")
            file = head
            print "file: ", file
            print 'PID: ', os.getpid()
            if file == "createSigGen":
                print 'Inside If'
                exec("from " + file + " import *")
                print 'PID: ', os.getpid()
                global obj
                obj = main()
                print 'Called'
                result3 = handle1.submit('local', 'QUEUE', \
                                             'QUEUE PRIORITY 2 HANDLE %s MESSAGE "OBJ!"' \
                                             %(handle1.handle))
                if (result3.rc != 0):
                    print "\nError submitting RESPONSE 'Obj', RC: %d, Result: %s\n"\
                                                            % (result3.rc, result3.result)
                else:
                    print "\nRESPONSE - OBJ submitted\n"
                result4 = handle1.submit('local', 'SEM', 'POST EVENT RESPONSE2/Ready')
                print 'Event 2 Posted'
            elif file == 'bootSigGen':
                print "Starting"
                print handle
                print handle.handle
                monitor = STAFMonitor(handle)
                monitorMessage = ("Beginning section ABC of test")
                result7 = monitor.log(monitorMessage)
                #result7 = handle.submit('local', 'MONITOR', 'LOG MESSAGE Recovered NAME monitor')
                if (result7.rc != STAFResult.Ok):
                    print "Error on STAFMonitorDoLog, RC: %d, Result: %s" % \
                    (result7.rc, result7.result)
                    #sys.exit(result.rc)
                else:
                    print result7
                    
                Log = STAFLog(handle, STAFLog.Machine, "MyLog",
                                [STAFLog.Fatal, STAFLog.Error, STAFLog.Warning])   
                
                result9 = Log.log(STAFLog.Start, "Booting SigGen")
                print result9
                result10 = Log.log(STAFLog.Warning, "Got Some ambiguous results")
                print result10
                
                
                message = 'Testing 1, 2, 3...' 
                request = 'LOG HANDLE LOGNAME %s LEVEL Info MESSAGE %s' % (myStaxJobUserLogName, message) 
                result = handle.submit('local', "LOG", request)
                
                exec("from " + file + " import main as bootSigGen")
                print 'PID: ', os.getpid()
                #exec("import " + file)
                bootSigGen(obj)
                    
                result5 = handle1.submit('local', 'QUEUE', 'QUEUE PRIORITY 2 HANDLE %s MESSAGE "BOOT!"' %(handle1.handle))
                if (result3.rc != 0):
                    print "\nError submitting RESPONSE 'BOOT', RC: %d, Result: %s\n"\
                                                                % (result5.rc, result5.result)
                else:
                    print "\nRESPONSE - BOOT submitted\n"
                result6 = handle1.submit('local', 'SEM', 'POST EVENT RESPONSE3/Ready')
                print 'Event 3 Posted'
            
            
        print "\nOK 2"
        
        
    
    
    
if __name__ == "__main__":
    obj = None
    import sys, os
    resFile = "C:\\raj.txt"
    
    #sys.stdout = sys.stderr
    sys.stdout = open(resFile, "w")
    #fd.write("Hello World\n")
    print "Hello World"
    
    
    try:
        handle = STAFHandle("MyTest")
    except STAFException, e:
        print "Error registering with STAF, RC: %d\n" % e.rc
        sys.exit(e.rc)
    print "\nHandle : %s" % (handle)
    print "MyTest Handle : %s" %(handle.handle)
    res = handle.submit("local", "var", "resolve string {PY_STATIC_HANDLE} string {MyTest/JobUserLogName}")
    if (res.rc != 0):
        print "\nError submitting request var resolve, RC: %d, Result: %s\n" % (res.rc, res.result)
    else:
        print res.result
        #print "\nGot Handle: %s" % res.result
    #print "\n"
    #print res.result
    #print "\n"
    
    mc = unmarshall(res.result) 
    varResultList = mc.getRootObject() 
    #print 'Formatted output:\n%s' % formatObject(varResultList) 
    staticHandleNumber   = varResultList[0]['result']
    myStaxJobUserLogName = varResultList[1]['result'] # STAXJobUserLog 
 
    
    print 'StaticHandleNumber: %s Job User Log: %s' % \
                    (staticHandleNumber, myStaxJobUserLogName)
    
    
    
    
    
    #handle.unRegister()

    #Register with this static handle
    #handle1 = STAFHandle(int(res.result), STAFHandle.Static)
    handle1 = STAFHandle(int(staticHandleNumber), STAFHandle.Static)
    print handle1
    print handle1.handle
    
    
    
    """
    staticHandleNumber = os.environ.get('STAF_STATIC_HANDLE')
    if staticHandleNumber == None:
        print "Error: STAF_STATIC_HANDLE environment variable does not exist"
        sys.exit(1)
    staticHandleNumber = int(staticHandleNumber)
    print "Using STAF static handle: %s" %(staticHandleNumber)
    
    try:
        handle = STAFHandle(staticHandleNumber, STAFHandle.Static)
    except STAFException, e:
        print "Error registering with STAF, RC: %d", e.rc
        sys.exit(e.rc)
    """
    
    #handle = sys.argv[1]
    #print 'Handle: %s' %(handle)
    
    
    #main(handle)
    main(handle1)
    fd.close()
    sys.stdout = sys.__stdout__
    sys.stderr = sys.__stderr__
    handle.unregister()