source: TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/renderEntity.py @ 911

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/renderEntity.py@911
Revision 911, 3.4 KB checked in by lawrence, 14 years ago (diff)

Refactoring browse portal to clearly separate out the service bindings.

Line 
1def renderEntity(entity):
2        ''' Take an NDG metadata entity (D or B) and render to HTML on a standard pattern,
3        depends on all entities having the same attributes '''
4       
5        #this is NOT supposed to be the whole page ...
6       
7        #need to start by building the coverage information html
8        #follow by building the contact information
9        #then get the related datasets (if available)
10
11        if entity is None: return ''
12
13        try:
14                contentHTML=renderContent(entity)
15        except:
16                contentHTML=''
17       
18        if entity.metadataType is 'stubB':
19                relatedHTML=renderRelated(entity)
20        else:
21                relatedHTML=''
22               
23        if entity.type=='dgDataEntity':
24                relatedHTML=renderGranules(entity)+relatedHTML
25
26        html='''
27                <DIV id="EntityContent">
28                <p></p>
29                <h5>%s</h5>
30                <DIV id="Abstract">
31                        <p>%s</p>
32                </DIV>
33                <p><br/></p>
34                %s
35                %s
36        </DIV>'''%(entity.name,entity.abstract,contentHTML,relatedHTML)
37        return html
38
39def renderContent(entity):
40        '''Parse the entity for content information '''
41        html='''
42        <table cellspacing="0" cellpadding="3" width="90%" border="0">
43                <tbody>
44                        <tr>
45                                <td class="lineHead" width="40%"><b>Field</b></td>
46                                <td class="lineHead" width="60%"><b>Description</b></td>
47                        </tr>'''
48                       
49        for item in entity.parameters:
50                html+='''
51                        <tr><td class="line"><b>Parameter</b><br/></td>
52                        <td class="line">%s</td></tr>'''%item
53       
54        html+='''
55                <tr><td class="line"><b>Spatial Coverage</b><br/></td>
56                        <td class="line">%s</td></tr>'''%entity.bbox.toHTML()
57       
58        html+='''
59                <tr><td class="line"><b>Temporal Coverage</b><br/></td>
60                        <td class="line">%s</td></tr>'''%entity.timeCoverage
61       
62        html+='''
63                <tr><td class="line"><b>Data Curator</b><br/></td>
64                        <td class="line">%s</td></tr>'''%entity.curator.toHTML()
65               
66        for c in entity.creators:
67                html+='''
68                        <tr><td class="line"><b>Data Creator</b><br/></td>
69                        <td class="line">%s</td></tr>'''%c.toHTML()
70                       
71        html+='</tbody></table>'
72       
73        return html
74#
75# Following classes specific to stub-B
76#
77def renderGranules(entity):
78        ''' Render information about data granules within a data entity '''
79        if len(entity.granules):
80                html='''<p><br/></p>
81                <table cellspacing="0" cellpadding="3" width="90%" border="0">
82                <tbody>
83                        <tr><td class="lineHead" colspan="3">
84                          <span class="headingO">Data Granules</span></td></tr>
85                        <tr class="lineHiLite">
86                          <td width="30%" colspan="2">Accessability</td><td>Link</td></tr>'''
87                for g in entity.granules:
88                        html+='<tr>'
89                        if g.constraints.exist:
90                                html+='<td width="20px"  class="key"></td><td>%s</td>'%g.constraints.html
91                        else:
92                           html+='<td>public</td><td></td>'
93                        html+='<td>%s</td></tr>'%g.Aurl
94                html+='</tbody></table>'
95                return html
96        else: return ''
97       
98def renderRelated(entity):
99        ''' take a stub-b and create html for the related entities '''
100        if entity.related!=[]:
101                html='''<p><br/></p>
102                <table cellspacing="0" cellpadding="3" width="90%" border="0">
103                <tbody>
104                        <tr>
105                                <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td>
106                        </tr>'''
107                       
108                for deployment in entity.related:
109                        #really ought to have a row for the deployment name ....
110                        for instance  in deployment[1]:
111                                label=instance[0]
112                                for link in instance[1]:
113                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%"><a href="%s">%s</a></td></tr>'%(label,link[1],link[0])
114                html+='</tbody></table>'
115        else:
116                html=''
117        return html
118
119if __name__=="__main__":
120        from stubB import stubB
121        xml=open('../../exampleB/methyl.example.xml').read()
122        x=stubB(xml,makeHTML=renderEntity)
123        html=x.toHTML()
124        f=open('output.html','w')
125        f.write(html)
126       
127       
128
Note: See TracBrowser for help on using the repository browser.