Ignore:
Timestamp:
31/05/07 09:59:23 (12 years ago)
Author:
lawrence
Message:

Discovery now defaults to an advanced interface which is getting close
to that required by ticket:731. The first point on ticket:733 is now done too.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/PythonCode/wsgi/DiscoveryGUI.py

    r2528 r2533  
    3232        self.html='' 
    3333         
    34         #is this simply a blank request for an interface? 
     34        #is this simply a blank request for an interface? In this version,  
    3535        if self.inputs.keys()==[]: 
    36             self.html+='<div id="superPad">' 
    37             self.standardInterface() 
    38             self.html+='</div>' 
     36            self.advancedInterface2() 
    3937            return 
    4038        elif self.inputs.keys()==['advanced']: 
    41             self.advancedInterface() 
     39            self.advancedInterface2() 
    4240            return 
    4341        elif self.inputs.keys()==['help']: 
     
    6260         
    6361        self.html='' 
     62         
    6463        if not advanced: 
    6564            self.doText(self.inputs['searchString'],self.inputs['textTarget'], 
     
    6766        else: 
    6867            #check content 
    69             expected=['timeLimit','startDateDay','startDateMon','startDateYear', 
    70                         'endDateDay','endDateMon','endDateYear','spaceLimit', 
    71                         'bboxN','bboxE','bboxS','bboxW', 
    72                         'sourceLimit'] 
     68            expected=['startDateDay','startDateMon','startDateYear', 
     69                        'endDateDay','endDateMon','endDateYear', 
     70                        'bboxN','bboxE','bboxS','bboxW'] 
    7371            self.__checkform(expected) 
    7472            if self.message!='': return self.error() 
    75               
    76             if int(self.inputs['sourceLimit']): 
    77                 scope=[] 
    78                 if 'sourceMDIP' in self.inputs: 
    79                     if self.inputs['sourceMDIP']: scope.append('MDIP') 
    80                 if 'sourceNERC' in self.inputs: 
    81                     if self.inputs['sourceNERC']: scope.append('NERC_DDC') 
     73             
     74            # ------------- Handle scope from radio button on form ------- 
     75            if 'source' in self.inputs: 
     76                # the WSDL expects a list, we're just providing one ... via a radio ... 
     77                scope=[self.inputs['source']] 
     78                if scope==['All']: scope=None 
    8279            else: 
    8380                scope=None 
    84                  
    85             if int(self.inputs['spaceLimit']): 
    86                 bbox=[self.inputs['bboxN'],self.inputs['bboxS'],self.inputs['bboxW'],self.inputs['bboxE']] 
    87                 self.__checkbox(bbox) 
    88                 if self.message!='': return self.error() 
    89             else: 
    90                 bbox=None 
    91                  
    92             if int(self.inputs['timeLimit']): 
    93                 dateRange=[(self.inputs['startDateDay'],self.inputs['startDateMon'],self.inputs['startDateYear']), 
    94                            (self.inputs['endDateDay'],self.inputs['endDateMon'],self.inputs['endDateYear'])] 
    95                 self.__checkdates(dateRange)                  
    96                 if self.message!='': return self.error() 
     81             
     82            # ------------- Handle Location Bounding -------- 
     83            # default form has a global bounding box 
     84            bbox=[self.inputs['bboxN'],self.inputs['bboxS'],self.inputs['bboxW'],self.inputs['bboxE']] 
     85            self.__checkbox(bbox) 
     86            if self.message!='': return self.error() 
     87                 
     88            # ------------- Handle Date Ranges --------------- 
     89            dateRange=[(self.inputs['startDateDay'],iMonth(self.inputs['startDateMon']),self.inputs['startDateYear']), 
     90                           (self.inputs['endDateDay'],iMonth(self.inputs['endDateMon']),self.inputs['endDateYear'])] 
     91            #default form has blanks, in which case we don't want to check for date range 
     92            if dateRange<>[("","",""),("","","")]: 
     93                self.__checkdates(dateRange) 
     94            else: dateRange=None 
     95            if self.message!='': return self.error() 
    9796                         
    98             else: 
    99                 dateRange=None 
    100   
     97            # ------------- ok, now go do the search ----------- 
    10198            self.doText(self.inputs['searchString'],self.inputs['textTarget'], 
    102                         self.inputs['start'],self.inputs['howmany'],scope=scope,dateRange=dateRange,bbox=bbox) 
     99                 self.inputs['start'],self.inputs['howmany'],scope=scope,dateRange=dateRange,bbox=bbox) 
    103100            
    104101        return 
     
    125122            self.message='Second date must be after first date' 
    126123                 
    127     def __setState(self,id,searchString,hits,offset,stride): 
     124    def __setState(self,id,searchString,hits,offset,stride,constraints): 
    128125        ''' Sets the discovery state to be used by external routines ''' 
    129126        if hits<stride:stride=hits 
    130         return DiscoveryState(id,searchString,self.environ,hits,offset,stride) 
     127        return DiscoveryState(id,searchString,self.environ,hits,constraints,offset,stride) 
    131128         
    132129     
     
    134131        ''' Return a useful error message ''' 
    135132        self.html='<div class="error"><p>%s</p></div>'%self.message 
    136         if self.advanced: 
    137             self.advancedInterface() 
    138         else: 
    139             self.standardInterface() 
     133        self.advancedInterface2() 
     134 
    140135             
    141136    def message(self,message): 
    142137        ''' Layout a message to the user ''' 
    143138        self.html='<div class="message"><p>%s</p></div>'%message 
     139         
     140         
     141    def __buildconstraints(self,dateRange,bbox,scope): 
     142        ''' Just build a constraint string ''' 
     143        constraints=' (' 
     144        if dateRange is not None:  
     145            constraints+='Including&nbsp;%s&nbsp;to&nbsp;%s; '%('%s,%s,%s'%dateRange[0],'%s,%s,%s'%dateRange[1]) 
     146        if bbox is None or bbox==['+90.0','-90.0','-180.0','+180.0']: 
     147            constraints+='Global; ' 
     148        else: constraints+='Bounding&nbsp;Box:&nbsp;%s,%s,%s,%s; '%tuple(bbox) 
     149        if scope is not None: 
     150            constraints+='Restricted to %s; '%scope[0] 
     151        constraints=constraints[:-2]+')' 
     152        self.logger.info(constraints) 
     153        return constraints 
    144154         
    145155     
     
    160170            return 
    161171         
     172        #build constraints info for report 
     173        constraints=self.__buildconstraints(dateRange,bbox,scope) 
     174         
    162175        hits=ws.hits 
    163176        id=ws.serverSessionID 
    164         state=self.__setState(id,searchString,hits,start,howmany) 
     177        state=self.__setState(id,searchString,hits,start,howmany,constraints) 
    165178        if hits==0:  
    166             self.html+=self.message('No records found') 
     179            self.html+='<div class="message"><table><tbody><tr><td>No records found %s.</td></tr></tbody></table></div>'%state.constraints 
    167180        else: 
    168181            try: 
     
    237250        return 
    238251     
     252    def advancedInterface2(self): 
     253        try: 
     254            discoveryURL=self.config.get('SEARCH','discoveryURL') 
     255            advancedURL=self.config.get('SEARCH','advancedURL') 
     256            oneLiner=DiscoveryTemplate.oneLiner 
     257        except: 
     258            self.message='Error, invalid configuration for search interface' 
     259            self.html='' 
     260            return 
     261        bboxN,bboxW,bboxE,bboxS='+90.0','-180.0','+180.0','-90.0' 
     262        startDateDay,startDateMon,startDateYear='','','' 
     263        endDateDay,endDateMon,endDateYear='','','' 
     264        self.html+=DiscoveryTemplate.revisedAdvancedSearch%locals() 
     265         
     266     
    239267    def helpInterface(self,advanced): 
    240268        if advanced: 
     
    250278        try: 
    251279            discoveryURL=self.config.get('SEARCH','discoveryURL') 
     280            oneLiner=DiscoveryTemplate.oneLiner 
    252281        except: 
    253282            self.message='Error, invalid configuration for search interface' 
Note: See TracChangeset for help on using the changeset viewer.