Ignore:
Timestamp:
18/09/08 17:23:25 (11 years ago)
Author:
cbyrom
Message:

Implement the new Atom model usage with the OWS controller and simplify
the templates with the new data structures + add Online References section
and replace the Responsible Parties one with a generalised Person one.

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/retrieve.py

    r4202 r4205  
    99from xml.parsers.expat import ExpatError 
    1010import logging 
     11from atom.Atom import Atom 
    1112 
    1213class RetrieveController(BaseController): 
     
    103104                renderTemplate = 'atom' 
    104105                c.xmlh=x 
     106                c.atom = Atom() 
     107                c.atom.fromString(str(x)) 
    105108                c.r = info = self.__mytb('') 
    106109                c.title=x.getText('title') 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/public/layout/ndg2.css

    r4198 r4205  
    148148        cellpadding:3; 
    149149        border:0; 
    150         width:100%; 
    151150} 
    152151 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom.html

    r4204 r4205  
    11<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    2 <?python import ndgUtils.ndgObject as no ?> 
     2<?python  
     3        import ndgUtils.ndgObject as no  
     4        from atom.Atom import Atom  
     5?> 
    36<html lang="en" xmlns="http://www.w3.org/1999/xhtml"  
    47        xmlns:py="http://genshi.edgewall.org/"  
     
    710        <xi:include href="atom_functions.html" /> 
    811        <head> 
    9         <title py:content="c.title">title</title> 
     12        <title py:content="c.atom.title">title</title> 
    1013    </head> 
    1114    <body> 
     
    1316      <div id="contents"> 
    1417            <div class="metadata"> 
    15                         <?python 
    16                                 # these are the atom specific data 
    17                             title=c.xmlh.getText('title') 
    18                             summary=c.xmlh.getText('summary') 
    19                             author=c.xmlh.getText('author/name') 
    20                             contributors=c.xmlh.getText('contributor/name', multiple=1) 
    21                             links=c.xmlh.tree.findall(c.xmlh._distributens('link')) 
    22                             parameters=c.xmlh.tree.findall(c.xmlh._distributens('category')) 
    23                             spatialCoverage=c.xmlh.tree.find(c.xmlh._distributens('where', \ 
    24                                 alternativeNS=no.GEOSS_NS)) 
    25  
    26                                         # and these are the moles specified data 
    27                             timeCoverage=c.xmlh.tree.find(c.xmlh._distributens('temporalRange', \ 
    28                                 alternativeNS=no.MOLES_NS)) 
    29                             content=c.xmlh.tree.find(c.xmlh._distributens('content')) 
    30                             responsibleParties=content.find(c.xmlh._distributens('entity/molesISO/responsibleParties', \ 
    31                                 alternativeNS=no.MOLES_NS)) 
    32                             deployments=content.findall(c.xmlh._distributens('entity/molesISO/deployments/deployment', \ 
    33                                 alternativeNS=no.MOLES_NS)) 
    34                         ?> 
    3518                        <div class="headingblock"> 
    36                             <div id="title" class="heading">$title</div> 
    37                             <div id="abstract" >$summary</div> 
     19                                <?python 
     20                                prefix = c.atom.atomType 
     21                                        if prefix: 
     22                                                prefix += ':' 
     23                                        ?> 
     24                            <div id="title" class="heading">$prefix $c.atom.title</div> 
     25                    <table> 
     26                       <tr><td> 
     27                           <img py:for="logo in c.atom.logos"  
     28                           alt="$logo.rel"  
     29                           src="$logo.href" class="clear"/> 
     30                       </td> 
     31                       <td><div id="abstract">$c.atom.summary</div></td></tr> 
     32                    </table> 
    3833                        </div> 
    39                         <div py:replace="People('Author', [author])"/> 
    40                         <div py:replace="People('Contributors', contributors)"/> 
    41                         <div py:replace="ParameterList(parameters)"/> 
    42                         <div py:replace="Coverage(spatialCoverage, timeCoverage)"/> 
    43                         <div py:replace="Deployments(deployments)"/> 
    44                         <div py:replace="ResponsibleParties(responsibleParties)"/> 
     34                        <div py:replace="OnlineReferences(c.atom.relatedLinks)"/> 
     35                        <div py:replace="People('Author', [c.atom.author])"/> 
     36                        <div py:replace="People('Contributors', c.atom.contributors)"/> 
     37                        <div py:replace="ParameterList(c.atom.parameters)"/> 
     38                        <div py:replace="Coverage()"/> 
     39                        <div py:replace="Deployments(c.atom.ME.deployments)"/> 
     40                        <div py:replace="People('Responsible Parties',  
     41                                c.atom.ME.responsibleParties)"/> 
    4542              </div> 
    4643      </div> 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/atom_functions.html

    r4204 r4205  
    1212     
    1313    <div class="metadataSection" py:def="People(ptype,listOfPeople)"> 
    14         <table py:if="listOfPeople and len(listOfPeople) > 0 and listOfPeople[0]" cellspacing="0" cellpadding="3" border="0" width="100%"> 
    15                 <tbody> 
    16             <tr><td class="linehead" colspan="1"><span class="heading0">$ptype</span></td></tr> 
    17             <tr py:for="person in listOfPeople"><td>$person</td></tr> 
    18                 </tbody> 
     14        <table py:if="listOfPeople"> 
     15            <tr><td class="linehead"><span class="heading0">$ptype</span></td></tr> 
     16            <tr> 
     17            <table> 
     18                    <tr py:for="person in listOfPeople"> 
     19                        <td class="cellhead">$person.role</td> 
     20                        <td>$person.name</td> 
     21                        <td><a href="$person.uri">$person.uri</a></td> 
     22                                </tr> 
     23                        </table> 
     24                        </tr> 
    1925        </table>  
    2026    </div> 
    2127     
    22     <div class="metadataSection" py:def="ResponsibleParties(parties)"> 
    23         <span py:if="parties is not None and len(parties) > 0" py:strip=""> 
    24         <table> 
    25             <tr><td class="linehead">Responsible Parties</td></tr> 
    26             <table> 
    27             <tr py:for="p in parties"> 
    28                 <?python 
    29                 name=p.find(c.xmlh._distributens('name', \ 
    30                                 alternativeNS=no.MOLES_NS)) 
    31                 role=p.find(c.xmlh._distributens('role', \ 
    32                                 alternativeNS=no.MOLES_NS)) 
    33                 uri=p.find(c.xmlh._distributens('uri', \ 
    34                                 alternativeNS=no.MOLES_NS)) 
    35                 ?> 
    36                 <td class="cellhead">${Text(role)}</td> 
    37                 <td>${Text(name)}</td> 
    38                 <td><a href="${Text(uri)}">${Text(uri)}</a></td> 
    39             </tr> 
    40             </table> 
    41         </table> 
    42                 </span> 
    43     </div> 
    44      
    4528    <div class="metadataSection" py:def="Deployments(deployments)"> 
    46         <table><tr><td class="linehead" >Deployments</td><td></td></tr> 
    47                 <span py:if="deployments is not None"> 
    48                         <table class="subTable"> 
     29        <table py:if="deployments"> 
     30        <tr><td class="linehead" >Deployments</td><td></td></tr> 
     31        <tr> 
     32                <table class="subTable"> 
    4933                                <div py:for="d in deployments" py:strip=""> 
    50                                 <div py:replace="Deployment(d)"/> 
     34                                <div py:replace="Deployment(deployments[d])"/> 
    5135                        </div> 
    52                     </table> 
    53                 </span> 
     36                </table></tr> 
    5437                </table> 
    5538        </div> 
     39         
     40    <div py:def="Deployment(dep)" py:strip=""> 
     41                <tr class="cellhead" colspan="2"><td> Start Date: $dep.startDate, End Date: $dep.endDate</td></tr> 
     42        <tr py:for="link in dep.deploymentLinks" > 
     43        <?python 
     44                rel=link.vocabUrl.upper() 
     45                if rel.startswith(VTD.ACTIVITY_TERM): 
     46                                rel = "Activity" 
     47                elif rel.startswith(VTD.OBS_TERM): 
     48                                rel = "Observation Station" 
     49                elif rel.startswith(VTD.DPT_TERM): 
     50                                rel = "Data Production Tool" 
     51        ?> 
     52        <td>$rel</td><td><a href="$link.url">$link.title</a></td> 
     53        </tr> 
     54    </div> 
    5655 
    5756     
     
    6564        </span> 
    6665    </span> 
    67      
    68          
    69     <div py:def="Deployment(elem)" py:strip=""> 
    70         <span py:if="elem is not None"> 
    71             <?python 
    72                 startDate=elem.find(c.xmlh._distributens('startDate', \ 
    73                                         alternativeNS=no.MOLES_NS)) 
    74                                 endDate=elem.find(c.xmlh._distributens('endDate', \ 
    75                                         alternativeNS=no.MOLES_NS)) 
    7666 
    77                                 links=(elem.findall(c.xmlh._distributens('link')) or []) 
    78             ?> 
    79                         <tr class="cellhead" colspan="2"><td> Start Date: ${Text(startDate)}, End Date: ${Text(endDate)}</td></tr> 
    80             <span py:for="link in links"> 
    81                 <?python 
    82                         href=link.attrib.get('href') 
    83                         title=link.attrib.get('title') or href 
    84                         rel=link.attrib.get('rel').upper() 
    85                         if rel.startswith(VTD.ACTIVITY_TERM): 
    86                                                 rel = "Activity" 
    87                         elif rel.startswith(VTD.OBS_TERM): 
    88                                                 rel = "Observation Station" 
    89                         elif rel.startswith(VTD.DPT_TERM): 
    90                                                 rel = "Data Production Tool" 
    91                 ?> 
    92                 <tr><td>$rel</td><td><a href="$href">$title</a></td></tr> 
    93             </span> 
    94         </span>  
     67    <div py:def="OnlineReferences(links)"> 
     68        <table py:if="links" cellspacing="0" cellpadding="3"  
     69        border="0" width="100%"> 
     70                        <div class="linehead"> Online References</div> 
     71            <ul> 
     72                <li py:for="link in links"><a href="$link.href">${link.title}</a></li> 
     73            </ul> 
     74        </table> 
    9575    </div> 
    9676 
    9777 
    98     <div py:def="ParameterList(params)"> 
    99         <table py:if="params!={}" cellspacing="0" cellpadding="3"  
    100         border="0" width="100%"> 
     78    <div class="metadataSection" py:def="ParameterList(params)"> 
     79        <table py:if="params"> 
    10180            <tr><td class="linehead"><span>Parameters</span></td></tr> 
     81            <tr> 
    10282            <table class="subTable"> 
    103             <tr class="cellhead"><td>Label</td><td>Vocab term definition</td></tr> 
    104             <span py:for="item in params" py:strip=""> 
    105                 <?python 
    106                         term=item.attrib.get('term') 
    107                         scheme=item.attrib.get('scheme') 
    108                         label=item.attrib.get('label') 
    109                         ?> 
    110                         <tr> 
    111                                 <td>$label</td> 
    112                                 <td><a href="$scheme">$term</a></td> 
     83                <tr class="cellhead"><td>Label</td><td>Vocab term definition</td></tr> 
     84                        <tr py:for="param in params"> 
     85                                <td>$param.label</td> 
     86                                <td><a href="$param.scheme">$param.term</a></td> 
    11387                        </tr> 
    114             </span> 
    11588            </table> 
     89            </tr> 
    11690        </table> 
    11791    </div> 
    11892 
    11993     
    120     <div py:def="Coverage(bbox,timcov)"> 
    121         <table cellspacing="0" cellpadding="3" border="0" width="100%"><tbody> 
     94    <div class="metadataSection" py:def="Coverage()"> 
     95        <table> 
    12296            <tr><td class="linehead" colspan="2"><span class="heading0"> Data Coverage</span> </td></tr> 
    12397            <tr> 
    124                 <td><div py:replace="Spatial(bbox,1)"/></td> 
    125                 <td><div py:replace="Temporal(timcov,1)"/></td> 
     98                <td><div py:replace="Spatial()"/></td> 
     99                <td><div py:replace="Temporal()"/></td> 
    126100                </tr> 
    127         </tbody></table> 
     101        </table> 
    128102    </div> 
    129103 
    130     <div py:def="Temporal(timcov, h)" py:strip=""> 
     104    <div py:def="Temporal()" py:strip=""> 
    131105                <table><tr><td colspan="2" class="cellhead">Temporal coverage</td></tr> 
    132             <span py:if="timcov is not None and timcov.text" py:strip=""> 
    133                 <?python 
    134                                         times=timcov.text.split('/') 
    135                                 ?> 
    136                                 <tr><td> Start Date: ${times[0]}</td><td>End Date: ${times[1]}</td></tr> 
    137                 <tr><td colspan="2"> </td></tr> 
     106            <span py:if="c.atom.t1 or c.atom.t2" py:strip=""> 
     107                                <tr><td>Start Date:</td><td>${c.atom.t1}</td></tr> 
     108                                <tr><td>End Date:</td><td>${c.atom.t2}</td></tr> 
    138109            </span> 
    139             <span py:if="timcov is None or not timcov.text" py:strip=""> 
     110            <span py:if="not c.atom.t1 and not c.atom.t2" py:strip=""> 
    140111                                <tr><td colspan="2">No temporal information available.</td></tr> 
    141112                        </span> 
     
    143114    </div> 
    144115                             
    145     <div py:def="Spatial(bbox,h)" py:strip=""> 
    146         <table><tbody> 
    147             <tr py:if="h==1"><td colspan="2" class="cellhead">Spatial coverage</td></tr> 
     116    <div py:def="Spatial()" py:strip=""> 
     117        <table> 
     118            <tr><td colspan="2" class="cellhead">Spatial coverage</td></tr> 
    148119            <!--! Check to see if we're dealing with an Envelope --> 
    149             <span py:if="bbox is None or not bbox.getchildren()" py:strip=""> 
     120            <span py:if="not c.atom.minX and not c.atom.minY and not c.atom.maxX and not c.atom.maxY" py:strip=""> 
    150121                    <tr><td colspan="2" align="center">No spatial coverage information available.</td></tr> 
    151122                </span> 
    152             <span py:if="bbox is not None and bbox.getchildren()" py:strip=""> 
    153                     <?python 
    154                             envelope=bbox.find(c.xmlh._distributens('Envelope', \ 
    155                                         alternativeNS=no.GML_NS)) 
    156                 ?> 
    157                     <span py:if="envelope is not None" py:strip=""> 
    158                         <div py:replace="insertEnvelope(envelope)" /> 
    159                     </span> 
     123            <span py:if="c.atom.minX or c.atom.minY or c.atom.maxX or c.atom.maxY" py:strip=""> 
     124                <tr><td colspan="2" align="center">${c.atom.maxY}</td></tr> 
     125        <tr><td align="center">${c.atom.minX}</td><td align="center">${c.atom.maxX}</td></tr> 
     126        <tr><td colspan="2" align="center">${c.atom.minY}</td></tr> 
    160127                </span> 
    161         </tbody></table>  
     128        </table>  
    162129    </div> 
    163  
    164     <div py:def="insertEnvelope(envelope)" > 
    165         <?python 
    166                 lc = envelope.find(c.xmlh._distributens('lowerCorner', \ 
    167                         alternativeNS=no.GML_NS)) 
    168                 lcCoords = lc.text.split() 
    169                 uc = envelope.find(c.xmlh._distributens('upperCorner', \ 
    170                         alternativeNS=no.GML_NS)) 
    171                 ucCoords = uc.text.split() 
    172         ?> 
    173                 <tr><td colspan="2" align="center">${ucCoords[1]}</td></tr> 
    174         <tr><td align="center">${lcCoords[0]}</td><td align="center">${ucCoords[0]}</td></tr> 
    175         <tr><td colspan="2" align="center">${lcCoords[1]}</td></tr> 
    176     </div> 
    177      
    178130</html> 
Note: See TracChangeset for help on using the changeset viewer.