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

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

Tiny bug fixes in browse ...

Line 
1from htmlUtilities import *
2
3class renderEntity:
4   
5    def __init__(self,config=None):
6        self.config=config
7
8    def render(self,entity):
9        ''' Take an NDG metadata entity (D or B) and render to HTML on a standard pattern,
10        depends on all entities having the same attributes '''
11       
12        #this is NOT supposed to be the whole page ...
13       
14        #need to start by building the coverage information html
15        #follow by building the contact information
16        #then get the related datasets (if available)
17
18        if entity is None: return ''
19
20        #try:
21       
22        #except:
23        #       contentHTML=''
24       
25        if entity.metadataType is 'stubB':
26                relatedHTML=renderRelated(entity)
27        else:
28                relatedHTML=''
29
30        if entity.type=='dgDataEntity':
31                contentHTML=renderDataContent(entity)
32                relatedHTML=renderGranules(entity)+relatedHTML
33                serviceHTML=self.renderServices(entity)
34        elif entity.type=='DIF':
35                contentHTML=renderDataContent(entity)
36                relatedHTML=renderDataLinks(entity)+relatedHTML
37                serviceHTML=self.renderServices(entity)
38        else:
39                contentHTML=''
40                serviceHTML=self.renderServices(entity)
41               
42       
43        body=contentHTML+relatedHTML+serviceHTML
44        html='''
45                <DIV id="EntityContent">
46                <p></p>
47                <h5>%s</h5>
48                <DIV id="Abstract">
49                        <p>%s</p>
50                </DIV>
51                <p><br/></p>
52                %s
53        </DIV>'''%(entity.name,entity.abstract,body)
54        return html
55   
56       
57    def renderServices(self,entity):
58        '''Render information about services for a data entity '''
59        html='''<p><br/></p>
60                <table cellspacing="0" cellpadding="3" width=" 100%"border="0">
61                <tbody>
62                <tr><td class="lineHead" colspan="3">
63                <span class="headingO">Links and Services</span></td></tr>'''
64        xicon=hyperlink(image(self.config.get('layout','Xicon'),'[X]'),entity.binding.url+'&xml=1')
65        html+='<tr><td>%s</td><td> This record rendered in XML </td></tr>'%xicon
66        picon=hyperlink(image(self.config.get('layout','printer'),'[Print]'),entity.binding.url+'&text=1')
67        html+='<tr><td>%s</td><td> Printable version of XML content</td></tr>'%picon
68        for item in entity.services:
69            html+='<tr><td>%s</td><td>%s</td></tr>'%(item.icon(),item.description)
70        html+='</tbody></table>'
71       
72        return html
73
74def renderDataContent(entity):
75        '''Parse a data entity for content information '''
76       
77        html=''
78        try:
79            if entity.constraints.exists:
80                html='<p>Access Control: %s</p>'%entity.constraints.html
81        except: pass
82       
83        html+='''
84        <table cellspacing="0" cellpadding="3" width="100%" border="0">
85                <tbody>
86                        <tr>
87                                <td class="lineHead" width="40%"><b>Field</b></td>
88                                <td class="lineHead" width="60%"><b>Description</b></td>
89                        </tr>'''
90                       
91       
92        try:
93        #currently all entities are parsed for these ...
94            for item in entity.parameters:
95                html+='''
96                        <tr><td class="line"><b>Parameter</b><br/></td>
97                        <td class="line">%s</td></tr>'''%item
98       
99            html+='''
100                <tr><td class="line"><b>Spatial Coverage</b><br/></td>
101                        <td class="line">%s</td></tr>'''%entity.bbox.toHTML()
102       
103            html+='''
104                <tr><td class="line"><b>Temporal Coverage</b><br/></td>
105                        <td class="line">%s</td></tr>'''%entity.timeCoverage
106       
107        except: pass
108       
109        html+='''
110                <tr><td class="line"><b>Data Curator</b><br/></td>
111                        <td class="line">%s</td></tr>'''%entity.curator.toHTML()
112               
113        for c in entity.creators:
114                html+='''
115                        <tr><td class="line"><b>Data Creator</b><br/></td>
116                        <td class="line">%s</td></tr>'''%c.toHTML()
117                       
118        html+='</tbody></table>'
119       
120        return html
121       
122
123#
124# Following classes specific to stub-B
125#
126def renderGranules(entity):
127        ''' Render information about data granules within a data entity '''
128        if len(entity.granules):
129                html='''<p><br/></p>
130                <table cellspacing="0" cellpadding="3" width="100%" border="0">
131                <tbody>
132                        <tr><td class="lineHead" colspan="3">
133                          <span class="headingO">Data Granules</span></td></tr>
134                        <tr class="lineHiLite">
135                          <td width="30%" colspan="2">Accessability</td><td>Link</td></tr>'''
136                for g in entity.granules:
137                        html+='<tr>'
138                        if g.constraints.exist:
139                                html+='<td width="20px"  class="key"></td><td>%s</td>'%g.constraints.html
140                        else:
141                           html+='<td>public</td><td></td>'
142                        html+='<td>%s</td></tr>'%g.binding
143                html+='</tbody></table>'
144                return html
145        else: return ''
146       
147def renderDataLinks(entity):
148    return 'some data link stuff'
149       
150def renderRelated(entity):
151        ''' take a stub-b and create html for the related entities '''
152        if entity.related!=[]:
153                html='''<p><br/></p>
154                <table cellspacing="0" cellpadding="3" border="0">
155                <tbody>
156                        <tr>
157                                <td class="lineHead" colspan="2"><span class="headingO">Related Entities</span></td>
158                        </tr>'''
159                       
160                for deployment in entity.related:
161                        #really ought to have a row for the deployment name ....
162                        for instance  in deployment[1]:
163                                label=instance[0]
164                                for link in instance[1]:
165                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%">%s</td></tr>'%(label,link)
166                html+='</tbody></table>'
167        else:
168                html=''
169        return html
170
171if __name__=="__main__":
172        from stubB import stubB
173        from DIF import DIF
174        from Utilities import myConfig
175
176        xml=open('../../../exampleB/methyl.example.xml').read()
177        x=stubB(xml,serviceFile='serviceMap.config')
178        html=x.toHTML(myConfig('browse.config'))
179        f=open('output.html','w')
180        f.write(html)
181       
182        xml=open('difeg.xml').read()
183        x=DIF(xml,serviceFile='serviceMap.config')
184        html=x.toHTML(myConfig('browse.config'))
185        g=open('difeg.html','w')
186        g.write(html)
187       
188
Note: See TracBrowser for help on using the repository browser.