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

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

Better error handling, better xhtml compliance

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        html='''
24                <DIV id="EntityContent">
25                <p></p>
26                <h5>%s</h5>
27                <DIV id="Abstract">
28                        <p>%s</p>
29                </DIV>
30                <p><br/></p>
31                %s
32                %s
33        </DIV>'''%(entity.name,entity.abstract,contentHTML,relatedHTML)
34        return html
35
36def renderContent(entity):
37        '''Parse the entity for content information '''
38        html='''
39        <table cellspacing="0" cellpadding="3" width="90%" border="0">
40                <tbody>
41                        <tr>
42                                <td class="lineHead" width="40%"><b>Field</b></td>
43                                <td class="lineHead" width="60%"><b>Description</b></td>
44                        </tr>'''
45                       
46        for item in entity.parameters:
47                html+='''
48                        <tr><td class="line"><b>Parameter</b><br/></td>
49                        <td class="line">%s</td></tr>'''%item
50       
51                html+='''
52                <tr><td class="line"><b>Spatial Coverage</b><br/></td>
53                        <td class="line">%s</td></tr>'''%entity.bbox.toHTML()
54       
55                html+='''
56                <tr><td class="line"><b>Temporal Coverage</b><br/></td>
57                        <td class="line">%s</td></tr>'''%entity.timeCoverage
58       
59                html+='''
60                <tr><td class="line"><b>Data Curator</b><br/></td>
61                        <td class="line">%s</td></tr>'''%entity.curator.toHTML()
62               
63        for c in entity.creators:
64                html+='''
65                        <tr><td class="line"><b>Data Creator</b><br/></td>
66                        <td class="line">%s</td></tr>'''%c.toHTML()
67                       
68        html+='</tbody></table>'
69       
70        return html
71       
72def renderRelated(entity):
73        ''' take a stub-b and create html for the related entities '''
74        if entity.related!=[]:
75                html='''<p><br/></p>
76                <table cellspacing="0" cellpadding="3" width="90%" border="0">
77                <tbody>
78                        <tr>
79                                <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td>
80                        </tr>'''
81                       
82                for deployment in entity.related:
83                        #really ought to have a row for the deployment name ....
84                        for instance  in deployment[1]:
85                                label=instance[0]
86                                for link in instance[1]:
87                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%"><a href="%s">%s</a></td></tr>'%(label,link[1],link[0])
88                html+='</tbody></table>'
89        else:
90                html=''
91        return html
92
93if __name__=="__main__":
94        from stubB import stubB
95        x=stubB('../../exampleB/methyl.example.xml',xsltMethod='local')
96        html=renderEntity(x)
97        f=open('output.html','w')
98        f.write(html)
99        print x.related
100       
101
Note: See TracBrowser for help on using the repository browser.