Ignore:
Timestamp:
25/05/06 16:42:02 (14 years ago)
Author:
lawrence
Message:

More discovery (from browse) related improvments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browseCGI.py

    r1006 r1020  
    1616from renderPage import renderPage 
    1717from renderDiscoverySet import renderDiscoverySet 
     18from htmlUtilities import selector,hyperlink 
    1819from Utilities import * 
    1920from ETxmlView import * 
     
    3536                self.cookie=Cookie.SimpleCookie(cookie) 
    3637                self.history=RingBuffer(10) 
    37                 self.__loadBrowseHistory() 
    38          
     38                self.selected=RingBuffer(5) 
     39               
     40                self.__load() 
     41                         
    3942        def __toXML(self): 
    40                 ''' Used to serialise the history into a cookie string ''' 
    41                 xml='<BH>' 
     43                ''' Used to serialise the session into a cookie string ''' 
     44                xml='<ndgCookie><bh>' 
    4245                for uri,name in self.getHistory(): 
    4346                        xml+='<i><u>%s</u><n>%s</n></i>'%(uri,name) 
    44                 xml+='</BH>' 
     47                xml+='</bh><sh>' 
     48                for uri,name in self.getSelected(): 
     49                    xml+='<i><u>%s</u><n>%s</n></i>'%(uri,name) 
     50                xml+='</sh></ndgCookie>' 
    4551                return xml 
    46                                  
    47         def __loadBrowseHistory(self): 
    48                 ''' get the string of URI values out of the cookie (if it's there)''' 
    49                 try: 
    50                         self.tree=ET.fromstring(self.cookie['BrowseHistory'].value) 
    51                         for item in self.tree: 
    52                                 self.addToHistory(item.find('u').text,item.find('n').text,ignore=True) 
    53                 except: 
    54                         pass 
     52                 
     53        def __load(self): 
     54            ''' get lists of URI values out of a cookie ''' 
     55            try: 
     56                e=ET.fromstring(self.cookie['history']) 
     57                for se in e: 
     58                    for item in se: 
     59                        uri,name=item.find('u'),item.find('n') 
     60                        self.__addTo(uri,name,se.tag) 
     61            except: 
     62                pass 
     63                         
     64        def __addTo(self,uri,name,tag,ignore=False): 
     65            d={'bh':self.history,'sh':self.selected} 
     66            current=d[tag].tolist() 
     67            if (uri,name) not in current or ignore: 
     68                d[tag].append((uri,name)) 
     69                         
    5570        def addToHistory(self,uri,name,ignore=False): 
    56                 ''' Add a URI to the session history''' 
    57                 if not ignore: 
    58                         current=self.getHistory() 
    59                         if (uri,name) not in current: 
    60                                 self.history.append((uri,name)) 
    61                 else: 
    62                         self.history.append((uri,name)) 
     71           ''' Add a URI to the session history''' 
     72           self.__addTo(uri,name,'bh',ignore) 
     73                         
    6374        def getHistory(self): 
    64                 ''' Return a list of the items in the history ''' 
    65                 return self.history.tolist() 
     75           ''' Return a list of the items in the history ''' 
     76           return self.history.tolist() 
     77         
     78        def addToSelected(self,uri,name,ignore=False): 
     79            ''' Add a URI to the selected items ''' 
     80            self.__addTo(uri,name,'sh',ignore) 
     81            self.__addTo(uri,name,'bh',ignore) 
     82                     
     83        def getSelected(self): 
     84            ''' Return a list of selected items '''      
     85            return self.selected.tolist()         
     86         
    6687        def makeCookie(self,ndgSec=None): 
    6788                ''' Create a local cookie ''' 
     
    7394                cookie=Cookie.SimpleCookie() 
    7495                cookie['session']=base64.encodestring(m.digest())[:-3].replace("/", "$") 
    75                 cookie['BrowseHistory']=self.__toXML() 
     96                cookie['history']=self.__toXML() 
    7697                return cookie 
    7798         
     
    83104                self.env=os.environ 
    84105                self.path=self.env.get('PATH_INFO','/') 
    85                 self.FieldStorage=cgi.FieldStorage() 
     106                self.FieldStorage=getURLdict(cgi.FieldStorage()) 
    86107                self.config=config 
    87108                self.response=Response() 
    88109                self.requestURL=self.env.get('SCRIPT_NAME')+'?'+self.env.get('QUERY_STRING') 
     110                self.selector=selector(self.requestURL,config.get('layout','selectI')) 
    89111                 
    90112        
     
    106128                #this will do for the moment, although I'd rather the whole 
    107129                #URI was self consistent ... 
    108                  
     130                 
     131                if 'select' in self.FieldStorage: 
     132                    #need to sort out the name issue ... 
     133                    self.session.addToSelected(self.FieldStorage['select'],'dif') 
     134                    #we also need to trim the selector off the current requestURL 
     135                    self.requestURL=self.requestURL[0:self.requestURL.find('&select')] 
     136                    self.selector.baseURL=self.requestURL 
     137                 
    109138                #use name as an error return as well in the following calls ... 
    110                 if self.FieldStorage.has_key('uri'): 
    111                         self.uri=self.FieldStorage['uri'].value 
    112                         content,name=self.__browse() 
    113                 elif self.FieldStorage.has_key('search'): 
    114                         self.searchType=self.FieldStorage['search'].value 
    115                         content,name=self.__search() 
     139                if 'uri' in self.FieldStorage: 
     140                    self.uri=self.FieldStorage['uri'] 
     141                    content,name=self.__browse() 
     142                elif 'search' in self.FieldStorage: 
     143                    self.searchType=self.FieldStorage['search'] 
     144                    content,name=self.__search() 
    116145                else:  
    117                         self.response.content=self.error('No valid URI') 
     146                    content,name=self.error('No valid URI'),'Error' 
     147                         
     148                 
    118149                         
    119150                if not self.ViewTextOnly: 
    120151                    historyHTML='<p>' 
    121152                    for item in self.session.getHistory(): 
    122                         historyHTML+='<a href="%s">%s</a><br/>'%item 
     153                        historyHTML+=hyperlink(item[1],item[0]) 
    123154                    historyHTML+='</p>' 
     155                    selectHTML='<p>' 
     156                    for item in self.session.getSelected(): 
     157                        selectHTML+=hyperlink(item[1],item[0]) 
     158                    selectHTML+='</p>' 
    124159                    self.response.content=renderPage( 
    125                         content,historyHTML,historyHTML,name,self.config) 
     160                        content,historyHTML,selectHTML,name,self.config) 
    126161                else: 
    127162                    self.response.content=content 
     
    181216        def __search(self): 
    182217            ''' Handle simple searching within the context of the browse ''' 
    183             if self.FieldStorage.has_key('SEARCHSTRING'): 
    184                 searchString=self.FieldStorage['SEARCHSTRING'].value 
     218            if 'SEARCHSTRING' in self.FieldStorage: 
     219                searchString=self.FieldStorage['SEARCHSTRING'] 
    185220                try: 
    186221                    ws=DiscoveryWS() 
    187222                except Exception, e: 
    188223                    return self.error('<p>%s<br/>%s'%(e,'Unable to connect to Search BackEnd')),'Error' 
    189                 ws.SearchFullText(searchString) 
    190                 results=ws.GetResults(number=5) 
     224                hits=ws.SearchFullText(searchString) 
     225                state=DiscoveryState(ws.sessID,self.requestURL,hits,stride=10) 
     226                results=ws.GetResults(offset=state.offset,number=state.stride) 
    191227                difs=[] 
    192228                for result in results: 
    193229                    difs.append(xmlCleanup(result)) 
    194                 html=renderDiscoverySet(difs,summary=1,spatial=1,temporal=1,services=1) 
     230                html=renderDiscoverySet(difs,state,selector=self.selector, 
     231                               summary=1,spatial=1,temporal=1,services=1) 
    195232                title='Search for '+searchString 
    196233                return html,title 
Note: See TracChangeset for help on using the changeset viewer.