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

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

Modifications to support unicode properly, and handle MDIP a bit better

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