source: TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch/renderEntity.py @ 3800

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery/branches/ingestAutomation-upgrade/OAIBatch/renderEntity.py@3800
Revision 3800, 5.7 KB checked in by cbyrom, 11 years ago (diff)

Upgraded version of ingest codebranch - including major refactoring of the ingest
scripts to make more OO - allowing re-use and simplification of code + removal of reliance
on eXist DB to store data; this will now all be stored and looked up from the Postgres DB

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(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.