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

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

Sundry modifications associated with the deployment on glue, and better
options for viewing and downloading the underlying xml records (not yet
complete)

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