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

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

Refactoring discovery wsgi for cleaner service binding. (Done, but
there will be implications for wsgi browse which may now be broken,
but I can't test it til the database is updated).

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 is 'DC':
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        if entity.binding is not None:
68            xicon=hyperlink(image(self.config.get('layout','Xicon'),'[X]'),entity.binding.url+'&type=xml')
69            html+='<tr><td width="20%%">%s</td><td> This record rendered in XML </td></tr>'%xicon
70            picon=hyperlink(image(self.config.get('layout','printer'),'[Print]'),entity.binding.url+'&type=print')
71            html+='<tr><td>%s</td><td> Printable version of XML content</td></tr>'%picon
72        s=renderService(self.config)
73        for item in entity.services:
74            html+='<tr><td>%s</td><td>%s</td></tr>'%(s.get(item),item.description)
75        html+='</tbody></table>'
76       
77        return html
78
79def renderDataContent(entity):
80        '''Parse a data entity for content information '''
81       
82        html=''
83        try:
84            if entity.constraints.exists:
85                html='<p>Access Control: %s</p>'%entity.constraints.html
86        except: pass
87       
88        html+='''
89        <table cellspacing="0" cellpadding="3" width="100%" border="0">
90                <tbody><tr><td class="lineHead" colspan="3">
91                          <span class="headingO">Dataset Detail</span></td></tr>'''
92               
93        #try:
94        #currently all entities are parsed for these ...
95           
96        if len(entity.parameters)==1: 
97            html+='''<tr><td class="line" width="20%%">%s</td><td>'''%'Parameter'
98        else:
99            html+='''<tr><td class="line" width="20%%">%s</td><td>'''%'Parameters'
100        html+=entity.parameters[0]
101        for item in entity.parameters[1:]:
102            i=item.replace(' ','&nbsp;')
103            html+=',&nbsp;&nbsp; %s'%i
104        html+='</td></tr>'
105        html+='''
106            <tr><td class="line">Spatial Coverage<br/></td>
107                    <td>%s</td></tr>'''%entity.bbox.toHTML()
108   
109        html+='''
110            <tr><td class="line">Temporal Coverage<br/></td>
111                    <td>%s</td></tr>'''%entity.timeCoverage
112       
113        #except: pass
114       
115        html+='''
116                <tr><td class="line">Data Curator<br/></td>
117                        <td>%s</td></tr>'''%entity.curator.toHTML()
118               
119        for c in entity.creators:
120                html+='''
121                        <tr><td class="line">Data Creator<br/></td>
122                        <td>%s</td></tr>'''%c.toHTML()
123                       
124        html+='</tbody></table>'
125       
126        return html
127       
128
129#
130# Following classes specific to stub-B
131#
132def renderGranules(entity):
133        ''' Render information about data granules within a data entity '''
134        if len(entity.granules):
135                html='''<p><br/></p>
136                <table cellspacing="0" cellpadding="3" width="100%" border="0">
137                <tbody>
138                        <tr><td class="lineHead" colspan="3">
139                          <span class="headingO">Data Granules</span></td></tr>
140                        <tr class="lineHiLite">
141                          <td width="20%" colspan="2">Accessability</td><td>Link</td></tr>'''
142                for g in entity.granules:
143                        html+='<tr>'
144                        if g.constraints.exist:
145                                html+='<td width="20px"  class="key"></td><td>%s</td>'%g.constraints.html
146                        else:
147                           html+='<td>public</td><td></td>'
148                        html+='<td>%s (%s)</td></tr>'%(g.binding,g.binding.uri)
149                html+='</tbody></table>'
150                return html
151        else: return ''
152       
153def renderDataLinks(entity):
154    return 'some data link stuff'
155       
156def renderRelated(entity):
157        ''' take a stub-b and create html for the related entities '''
158        if entity.related!=[]:
159                html='''<p><br/></p>
160                <table cellspacing="0" cellpadding="3" border="0" width="100%">
161                <tbody>
162                        <tr>
163                                <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td>
164                        </tr>'''
165                       
166                for deployment in entity.related:
167                        #really ought to have a row for the deployment name ....
168                        for instance  in deployment[1]:
169                                label=instance[0]
170                                for link in instance[1]:
171                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%">%s</td></tr>'%(label,link)
172                html+='</tbody></table>'
173        else:
174                html=''
175        return html
176       
Note: See TracBrowser for help on using the repository browser.