source: TI07-MOLES/trunk/PythonCode/wsgi/renderEntity.py @ 2295

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

Cleaning up edge cases in discovery so that while NDG browse isn't
enabled, what you see still makes sense :-).

Line 
1from htmlUtilities import *
2from renderService import *
3from renderParameters import *
4
5class renderEntity:
6   
7    def __init__(self,config=None):
8        self.config=config
9
10    def render(self,entity):
11        ''' Take an NDG metadata entity (D or B) and render to HTML on a standard pattern,
12        depends on all entities having the same attributes '''
13       
14        #this is NOT supposed to be the whole page ...
15       
16        #need to start by building the coverage information html
17        #follow by building the contact information
18        #then get the related datasets (if available)
19
20        if entity is None: return ''
21
22        #try:
23       
24        #except:
25        #       contentHTML=''
26       
27        if entity.metadataType in ['DC','MDIP']:
28            return entity.toHTML()
29       
30       
31        if entity.metadataType is 'stubB':
32                relatedHTML=renderRelated(entity)
33        else:
34                relatedHTML=''
35
36        if entity.metadataType=='dgDataEntity':
37                contentHTML=renderDataContent(entity)
38                relatedHTML=renderGranules(entity)+relatedHTML
39                serviceHTML=self.renderServices(entity)
40        elif entity.metadataType=='DIF':
41                contentHTML=renderDataContent(entity)
42                #relatedHTML=renderDataLinks(entity)+relatedHTML
43                serviceHTML=self.renderServices(entity)
44        else:
45                contentHTML=''
46                serviceHTML=self.renderServices(entity)
47               
48       
49        body=contentHTML+relatedHTML+serviceHTML
50        html='''
51                <DIV id="">
52                <p></p>
53                <span class="title">%s</span>
54                <DIV class="abstract">%s </DIV>
55                <p><br/></p>
56                %s
57        </DIV>'''%(entity.name,entity.abstract,body)
58        return html
59   
60       
61    def renderServices(self,entity):
62        '''Render information about services for a data entity '''
63        html='''<p><br/></p>
64                <table cellspacing="0" cellpadding="3" width=" 100%"border="0">
65                <tbody>
66                <tr><td class="lineHead" colspan="3">
67                <span class="headingO">Links and Services</span></td></tr>'''
68
69        s=renderService(self.config)
70        for item in entity.services:
71            html+='<tr><td>%s</td><td>%s</td></tr>'%(s.get(item))
72       
73        if entity.ndgObject is not None:
74            print 'Render says gettable is :', entity.ndgObject.gettable
75            xx=image(self.config.get('layout','Xicon'),'[X]')
76            pp=image(self.config.get('layout','printer'),'[Print]')
77            xicon1=hyperlink(xx,entity.ndgObject.xmlURL)
78            picon1=hyperlink(pp,entity.ndgObject.printableURL)
79            xicon2,picon2='',''
80            if entity.ndgObject.gettable: 
81                xicon2='(Original %s)'%hyperlink(xx,entity.ndgObject.xmlURL+'&original=1')
82                picon2='(Original %s)'%hyperlink(pp,entity.ndgObject.printableURL+'&original=1')
83            html+='<tr><td width="20%%">%s</td><td> Downloadable XML version of this record %s </td></tr>'%(xicon1,xicon2)
84            html+='<tr><td>%s</td><td> Viewable XML version of this record %s</td></tr>'%(picon1,picon2)
85            if entity.ndgObject.gettable:
86                html+='<tr><td></td><td>(Original records are the raw material harvested from data providers)</td></tr>'
87           
88        html+='</tbody></table>'
89        return html
90
91def renderDataContent(entity):
92        '''Parse a data entity for content information '''
93       
94        html=''
95        try:
96            if entity.constraints.exists:
97                html='<p>Access Control: %s</p>'%entity.constraints.html
98        except: pass
99       
100        html+='''
101        <table cellspacing="0" cellpadding="3" width="100%" border="0">
102                <tbody><tr><td class="lineHead" colspan="3">
103                          <span class="headingO">Dataset Detail</span></td></tr>'''
104               
105        #try:
106        #currently all entities are parsed for parameters ...
107        html+=showKeywordList(entity.parameters,'Parameter',tell=1)
108           
109        html+='''
110                <tr><td class="line">Spatial Coverage<br/></td>
111                    <td>%s</td></tr>'''%entity.bbox.toHTML()
112       
113        if entity.metadataType=='DIF': html+=showKeywordList(entity.paleoKeywords,'Location Keyword')
114   
115        html+='''
116            <tr><td class="line">Temporal Coverage<br/></td>
117                    <td>%s</td></tr>'''%entity.timeCoverage
118       
119        #except: pass
120       
121        html+='''
122                <tr><td class="line">Data Curator<br/></td>
123                        <td>%s</td></tr>'''%entity.curator.toHTML()
124               
125        for c in entity.creators:
126                html+='''
127                        <tr><td class="line">Data Creator<br/></td>
128                        <td>%s</td></tr>'''%c.toHTML()
129                       
130        html+='</tbody></table>'
131       
132        return html
133       
134
135#
136# Following classes specific to stub-B
137#
138def renderGranules(entity):
139        ''' Render information about data granules within a data entity '''
140        if len(entity.granules):
141                html='''<p><br/></p>
142                <table cellspacing="0" cellpadding="3" width="100%" border="0">
143                <tbody>
144                        <tr><td class="lineHead" colspan="3">
145                          <span class="headingO">Data Granules</span></td></tr>
146                        <tr class="lineHiLite">
147                          <td width="20%" colspan="2">Accessability</td><td>Link</td></tr>'''
148                for g in entity.granules:
149                        html+='<tr>'
150                        if g.constraints.exist:
151                                html+='<td width="20px"  class="key"></td><td>%s</td>'%g.constraints.html
152                        else:
153                           html+='<td>public</td><td></td>'
154                        html+='<td>%s (%s)</td></tr>'%(g.binding,g.binding.uri)
155                html+='</tbody></table>'
156                return html
157        else: return ''
158       
159def renderDataLinks(entity):
160    return 'some data link stuff'
161
162def showKeywordList(keywords,title,tell=0):
163    ''' Layout a list of keywords '''
164    html=''
165    if len(keywords)==0:
166            if tell: html+='''<tr><td class="line" width="20%%">%s</td>
167            <td> Unfortunately it appears that this record is not faithfully
168            translated in our system (either that, or it's morally invalid since all records should have
169            %s(s)). You can see the original record in xml by choosing the appropriate icon below.</td></tr> '''%(title,title)
170    else:
171        if len(keywords)==1: 
172            html+='''<tr><td class="line" width="20%%">%s</td><td>'''%title
173        else:
174            html+='''<tr><td class="line" width="20%%">%ss</td><td>'''%title
175           
176        #is it a list of DIF style parameter keywords? If so, let's format that especially
177        #and use the vocabulary server
178        print title,len(keywords[0].split('>'))
179        if (title=='Parameter' and len(keywords[0].split('>'))==5):
180            html+=renderParameters(keywords)
181        else:
182            html+=keywords[0]
183            for item in keywords[1:]:
184                i=item.replace(' ','&nbsp;')
185                html+=',&nbsp;&nbsp; %s'%i
186        html+='</td></tr>'
187    return html
188           
189def renderRelated(entity):
190        ''' take a stub-b and create html for the related entities '''
191        if entity.related!=[]:
192                html='''<p><br/></p>
193                <table cellspacing="0" cellpadding="3" border="0" width="100%">
194                <tbody>
195                        <tr>
196                                <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td>
197                        </tr>'''
198                       
199                for deployment in entity.related:
200                        #really ought to have a row for the deployment name ....
201                        for instance  in deployment[1]:
202                                label=instance[0]
203                                for link in instance[1]:
204                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%">%s</td></tr>'%(label,link)
205                html+='</tbody></table>'
206        else:
207                html=''
208        return html
209       
Note: See TracBrowser for help on using the repository browser.