#!/bin/sh
LD_LIBRARY_PATH="/project/condor05/Mukund/SW/Pyblio/Progeny1/lib:/soft/gcc-3.0.1/RedHat6.1/lib" "exec" "/project/condor05/Mukund/SW/Python-2.2/Progeny1/bin/python" "$0" "$*"
del LD_LIBRARY_PATH

import string, sys, os, tempfile, cgi, HTMLgen, os.path
import wClutoUtil, config
import cgitb; cgitb.enable()


def buildDatasetSolutionOptions(sObj, qMap):
    dataSelected = ('data' in qMap)
    solSelected  = ('sol'  in qMap)

    dOptStr = '<OPTION SELECTED>No Datasets\n'
    sOptStr = '<OPTION SELECTED>No Solutions\n'
    
    if sObj.datasets:
        ## Handle Dataset Options
        (dList, dOptList) = ([], [])
        if dataSelected:
            selData = qMap['data']
        else:
            dList.append('Select Dataset')
            selData = 'Select Dataset'
        #end if
        dList.extend(sObj.datasets)

        for dataset in dList:
            if dataset == selData:
                dOptList.append('<OPTION SELECTED>%s'%dataset)
            else:
                dOptList.append('<OPTION>%s'%dataset)
        #end for
        dOptStr = '\n' + string.join(dOptList, '\n')        
        
        ## Handle Cluster Options
        if dataSelected:
            (sList, sOptList) = ([], [])
            if solSelected:
                selSol = qMap['sol']
            else:
                sList.append('Select Solution')
                selSol = 'Select Solution'
            #endif
            
            sList.extend(sObj.solutions[sObj.datasets.index(qMap['data'])])
            for sol in sList:
                if sol == selSol:
                    sOptList.append('<OPTION SELECTED>%s'%sol)
                else:
                    sOptList.append('<OPTION>%s'%sol)
                #endif
            #endfor
            sOptStr = '\n' + string.join(sOptList, '\n')
    #endif
    return (dOptStr, sOptStr)

def buildHeaderStr(sObj, qMap):
    wClutoURL = '%s?sesID=%s'%(config.ClutoMainCGIURL, qMap['sesID'])

    headerPage    = HTMLgen.TemplateDocument(config.HeaderPage)
    (dStr, sStr)  = buildDatasetSolutionOptions(sObj, qMap)    

    headerPage['ClutoStyleURL']   = config.ClutoStyleURL
    headerPage['ClutoImageURL']   = config.ClutoImageURL    
    headerPage['ClutoURL']        = wClutoURL
    headerPage['HelpURL']         = '%s&cmd=help'%wClutoURL
    headerPage['ContactUsURL']    = '%s&cmd=contactus'%wClutoURL
    headerPage['DatasetOptions']  = dStr
    headerPage['SolutionOptions'] = sStr
    
    headerPage['UploadURL']  = '%s?sesID=%s'%(config.UploadCGIURL, qMap['sesID'])
    headerPage['ClusterURL'] = '%s?sesID=%s'%(config.ClusterCGIURL, qMap['sesID'])
    return str(headerPage)
#end def

def buildFooterStr(sObj, qMap):
    return 'Footer</html>\n'


def printFrontPage(qMap):
    if 'sesID' not in qMap:
        qMap['sesID'] = tempfile.gettempprefix()[1:-1]
    #end if

    sObj      = wClutoUtil.getSessionObject(qMap)
    frontPage = HTMLgen.TemplateDocument(config.FrontPage)
    frontPage['Header'] = buildHeaderStr(sObj, qMap)
    frontPage['Footer'] = buildFooterStr(sObj, qMap)
    frontPage.write()
#end 

# Main Script

def handleCGI():
    qMap = wClutoUtil.getQueryMap()

    
    if len(qMap) <= 1:
        printFrontPage(qMap)
    elif ('data' in qMap) and ('sol' in qMap):
        printSolutionPage(qMap)
    elif ('data' in qMap) and ('sol' not in qMap):
        printDataPage(qMap)
    else:
        print 'NOTHING FOR NOW'
#end def


if __name__ == '__main__':

    if len(sys.argv) >= 2:
        ## Invoked from command line

        os.environ['QUERY_STRING'] = string.join(sys.argv[1:], '&')
        sys.stderr.write('Environ Str: %s'%os.environ['QUERY_STRING'])
    else:
        print "Content-Type: text/html"     # HTML is following
        print                               # blank line, end of headers
    #endif

    handleCGI()
