source: TI07-MOLES/trunk/PythonCode/wsgi/renderDiscoverySet.py @ 2299

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/PythonCode/wsgi/renderDiscoverySet.py@2299
Revision 2299, 5.2 KB checked in by lawrence, 13 years ago (diff)

fixing a bug introduced this morning ... damn it ...

Line 
1from DiscoveryState import DiscoveryState
2from ndgSearch import ndgSearch
3from DIF import DIF
4from htmlUtilities import *
5from renderService import *
6
7def renderDiscoverySet(difSet,state,config,summary=0,services=0,spatial=0,temporal=0,
8    linkto='NDG_B_SERVICE',selector=None):
9    '''Takes a set of xml DIFS from a discovery search (difSet) and renders a
10    list of responses as a table, with layout depending on a set of keywords:
11            summary (boolean) - show the abstract,
12            services (boolean) - show the service list,
13            spatial (boolean) - show the bounding box,
14            temporal (boolean) - show the date range,
15            linkto (string) - clicking on the select widget should add the url for
16                              this service to the selected list
17     Note that state is a DiscoveryState instance containing the sessionID from the search,
18     and the offset, stride, and total number of results ...selector is a class for adding
19     particular datasets to a selection dataset (and cookie).
20     '''
21           
22    #
23    # List of methods which deal with the actual row content ...
24    #   
25   
26    def row(rowList,bgcolor='rbgWhite'):
27        h='<tr class="%s">'%bgcolor
28        for item in rowList:
29            if type(item)==type((1,2)):
30                h+='<td colspan="%s">%s</td>'%(item[1],item[0])
31            else:h+='<td>%s</td>'%item
32        h+='</tr>'
33        return h#span(h,bgcolor)
34
35    def spatialBox(elem):
36        return elem.bbox.toHTMLbox()
37     
38    def temporalRange(elem):
39        return ''
40   
41    def serviceList(d):
42        ll=span(' Links: ','ndgem')
43        ndg=0
44        serviceRenderer=renderService(config)
45        if d.binding is not None: ll+=serviceRenderer.get(d.binding)[0]
46        for item in d.services:
47            ll+=', '
48            #s=0
49            if item.contentType == 'NDG_A_SERVICE': 
50                ndg+=1
51            elif item.contentType == 'NDG_B_SERVICE':
52                ndg+=1
53            ll+=serviceRenderer.get(item)[0]
54       
55        if ndg<2: ndg=0
56        return ndg,ll
57
58   
59    # ##################################
60    # Actual html production follows
61    # ##################################
62   
63    # depending on keyword options, provide column headings
64    #
65   
66    columns=['Dataset',]   
67    if spatial: columns.append('Location')
68    if temporal: 
69        #two columns for temporal but put a column header across both columns
70        header='''<table><tbody><tr><td colspan="2" align="center">Time&nbsp;Coverage</td></tr><tr>
71        <td align="center">Start</td><td align="center"> End</td></tr></tbody></table>'''
72        columns.append((header,2))
73    html='<div class="ListOfResults"><table><tbody>'+row(columns,bgcolor="rbgBeige")
74   
75    # ok, now let's cycle through the hits
76    i=1
77    for item in difSet:
78        #print item.entryID
79        d=item # we used to do the diffing here ... but we don't anymore
80        bgc={1:'rbgWhite',-1:'rbgGrey'}[i]
81        i=-1*i
82       
83        if d.tree is None:
84            html+='<tr class="%s"><td colspan="%s"> Unparseable record </td></tr>'%(bgc,len(columns))
85        else:
86            ndg,slist=serviceList(d)
87            rlist=['',]
88            if summary:
89                if d.briefCitation is not None:
90                    rlist[0]='%s: %s'%(span('Citation','ndgem'),d.briefCitation)
91                else:
92                    rlist[0]='%s: %s'%(span('Title','ndgem'),abbreviate(d.name,60))
93                rlist[0]+='<br/>%s: %s'%(span('Summary','ndgem'),abbreviate(d.abstract,200))
94                if d.binding is not None: rlist[0]+=' '+hyperlink('(more)',d.binding.url)
95            rlist[0]+='<br/>%s: %s.'%(span('Repository','ndgem'),d.centre.toHTML())
96            if not summary and d.binding is not None:
97                rlist[0]+=' '+hyperlink('(more)',d.binding.url)
98            if services:rlist[0]+=slist
99            if ndg and selector !=None: 
100                rlist[0]+=',&nbsp;'+selector.target(d.entryID,name=d.abbreviation)
101            if spatial: rlist.append(spatialBox(d))
102            if temporal: 
103                rlist.append(htmlTime(d.timeCoverage[0]))
104                rlist.append(htmlTime(d.timeCoverage[1]))
105            html+=row(rlist,bgcolor=bgc)
106
107    html+='</tbody></table>'
108   
109    #now work out the links to step through a large result set
110    #html+='<p>Results %s to %s of %s'%(state.offset,min(state.offset+state.stride-1,state.hits),state.hits)
111    html+='<p>Results %s to %s of %s'%(state.offset,state.offset+len(difSet)-1,state.hits)
112    if state.stride < state.hits:
113        #1,10,21   11,20,21  21,21,21
114        if state.offset+state.stride-1<state.hits:
115            next1=state.offset+state.stride   #11,21
116            nextNum=min(state.stride,1+state.hits-next1) # 10,1
117            s1='Next %s'%nextNum
118            nexturl=state.geturl(offset=next1,stride=nextNum)
119            html+=', %s'%hyperlink(s1,nexturl)
120        if state.offset>1:
121            last1=max(1,state.offset-state.stride)
122            lastNum=min(state.stride,1+state.hits-last1)
123            if lastNum<min(20,state.hits): lastNum=20
124            l1='Previous %s'%lastNum
125            lasturl=state.geturl(offset=last1,stride=lastNum)
126            html+=', %s'%hyperlink(l1,lasturl)
127    else:
128        html+='</p>'
129    html+='</div>'
130    return html
131
Note: See TracBrowser for help on using the repository browser.