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

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

First code to support a GUI for python based searching through the
discovery WS interface. Includes some refactoring of the browse code
to support multiple entities (i.e. DIF etc). (NB: browse still
wont work properly until we get the security stuff working ok).

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        elif entity.type=='DIF':
26                relatedHTML=renderDataLinks(entity)+relatedHTML
27
28        html='''
29                <DIV id="EntityContent">
30                <p></p>
31                <h5>%s</h5>
32                <DIV id="Abstract">
33                        <p>%s</p>
34                </DIV>
35                <p><br/></p>
36                %s
37                %s
38        </DIV>'''%(entity.name,entity.abstract,contentHTML,relatedHTML)
39        return html
40
41def renderContent(entity):
42        '''Parse the entity for content information '''
43       
44        if entity.constraints.exists:
45            html='<p>Access Control: %s</p>'%entity.constraints.html
46        else:
47            html=''
48       
49        html+='''
50        <table cellspacing="0" cellpadding="3" width="90%" border="0">
51                <tbody>
52                        <tr>
53                                <td class="lineHead" width="40%"><b>Field</b></td>
54                                <td class="lineHead" width="60%"><b>Description</b></td>
55                        </tr>'''
56                       
57        for item in entity.parameters:
58                html+='''
59                        <tr><td class="line"><b>Parameter</b><br/></td>
60                        <td class="line">%s</td></tr>'''%item
61       
62        html+='''
63                <tr><td class="line"><b>Spatial Coverage</b><br/></td>
64                        <td class="line">%s</td></tr>'''%entity.bbox.toHTML()
65       
66        html+='''
67                <tr><td class="line"><b>Temporal Coverage</b><br/></td>
68                        <td class="line">%s</td></tr>'''%entity.timeCoverage
69       
70        html+='''
71                <tr><td class="line"><b>Data Curator</b><br/></td>
72                        <td class="line">%s</td></tr>'''%entity.curator.toHTML()
73               
74        for c in entity.creators:
75                html+='''
76                        <tr><td class="line"><b>Data Creator</b><br/></td>
77                        <td class="line">%s</td></tr>'''%c.toHTML()
78                       
79        html+='</tbody></table>'
80       
81        return html
82#
83# Following classes specific to stub-B
84#
85def renderGranules(entity):
86        ''' Render information about data granules within a data entity '''
87        if len(entity.granules):
88                html='''<p><br/></p>
89                <table cellspacing="0" cellpadding="3" width="90%" border="0">
90                <tbody>
91                        <tr><td class="lineHead" colspan="3">
92                          <span class="headingO">Data Granules</span></td></tr>
93                        <tr class="lineHiLite">
94                          <td width="30%" colspan="2">Accessability</td><td>Link</td></tr>'''
95                for g in entity.granules:
96                        html+='<tr>'
97                        if g.constraints.exist:
98                                html+='<td width="20px"  class="key"></td><td>%s</td>'%g.constraints.html
99                        else:
100                           html+='<td>public</td><td></td>'
101                        html+='<td>%s</td></tr>'%g.Aurl
102                html+='</tbody></table>'
103                return html
104        else: return ''
105       
106def renderRelated(entity):
107        ''' take a stub-b and create html for the related entities '''
108        if entity.related!=[]:
109                html='''<p><br/></p>
110                <table cellspacing="0" cellpadding="3" width="90%" border="0">
111                <tbody>
112                        <tr>
113                                <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td>
114                        </tr>'''
115                       
116                for deployment in entity.related:
117                        #really ought to have a row for the deployment name ....
118                        for instance  in deployment[1]:
119                                label=instance[0]
120                                for link in instance[1]:
121                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%"><a href="%s">%s</a></td></tr>'%(label,link[1],link[0])
122                html+='</tbody></table>'
123        else:
124                html=''
125        return html
126
127if __name__=="__main__":
128        from stubB import stubB
129        xml=open('../../exampleB/methyl.example.xml').read()
130        x=stubB(xml,makeHTML=renderEntity)
131        html=x.toHTML()
132        f=open('output.html','w')
133        f.write(html)
134       
135       
136
Note: See TracBrowser for help on using the repository browser.