Changeset 1158 for TI07-MOLES


Ignore:
Timestamp:
12/06/06 17:25:05 (13 years ago)
Author:
lawrence
Message:

Browse look and feel changes ... improved error handling
if security services not available ...

Location:
TI07-MOLES/trunk/StubB/XSLT/browse/portal
Files:
8 added
8 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/DIF.py

    r1152 r1158  
    4343        self.entryID=wrapGetText(self.elem,'Entry_ID') 
    4444         
     45         
    4546        self.abstract=wrapGetText(self.elem,'Summary') 
    4647        self.name=wrapGetText(self.elem,'Entry_Title') 
    47          
     48        self.binding=ServiceBinding(n=self.name[0:min(5,len(self.name))], 
     49                    nativeID=DIFid2NDGid(self.entryID),serviceFile=serviceFile) 
    4850        #Note that entity.constraints.html is about access control on the metadata, 
    4951        #and so we don't populate this here ... 
     
    9092        ''' Use the render method (optionally passed at initialisation, or the 
    9193        default - renderEntity - to get an HTML version of the DIF ''' 
    92         return self.renderMethod(self) 
     94        return self.renderMethod.render(self) 
    9395         
    9496             
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/ServiceBinding.py

    r1152 r1158  
    2626        '''  Return an actual endpoint for a given service from the data provider, e.g. 
    2727        for ndg_a_service,badc.nerc.ac.uk get http://superglue.badc.rl.ac.uk/cgi-bin/browse.py ''' 
    28         serviceType=serviceType.upper() 
     28        serviceType=serviceType.upper() # ought to be redundant ... 
    2929        r=self.get(serviceType,dataProvider) 
    3030        if r is None: 
     
    6262            # regrettably we used different things in our ID's than we did in 
    6363            # our difs : 
    64             self.mapping={'NDG-A0':'NDG_A_Service','NDG-B0':'NDG_B_Service'} 
     64            self.mapping={'NDG-A0':'NDG_A_Service','NDG-B0':'NDG_B_Service', 
     65            'NDG-B1':'NDG_B_SERVICE'} 
    6566            self.serviceMap=ServiceMap(serviceFile=serviceFile) 
    6667            self.name=n 
     
    7879            r=wrapGetText(elem,'repositoryIdentifier') 
    7980            l=wrapGetText(elem,'localIdentifier') 
    80             if s in self.mapping: s=self.mapping[s] 
     81            if s in self.mapping: s=self.mapping[s].upper() 
    8182            b=self.serviceMap.do(s,r) 
    82             if uri=='local': 
    83                 uri=l 
    84             elif uri=='stubB': 
    85                 uri='%s/%s'%(r,l) 
     83            uri=self.__makeuri(s,r,l) 
    8684            self.url='%s?uri=%s'%(b,uri) 
    8785            self.serviceType=s 
     
    9896            #</Related_URL> 
    9997            self.description=wrapGetText(elem,'Description') 
    100             self.serviceType=wrapGetText(elem,'URL_Content_Type') 
    101             if self.serviceType!='': 
    102                 b=self.serviceMap.do(self.serviceType,wrapGetText(elem,'URL')) 
     98            s=wrapGetText(elem,'URL_Content_Type') 
     99            self.serviceType=s 
     100            if s!='': 
     101                r=wrapGetText(elem,'URL') 
     102                b=self.serviceMap.do(s,r) 
    103103                l=wrapGetText(idelem,'localIdentifier') 
    104                 self.url='%s?uri=%s'%(b,l) 
     104                uri=self.__makeuri(s,r,l) 
     105                self.url='%s?uri=%s'%(b,uri) 
    105106            else: 
    106107                self.url=wrapGetText(elem,'URL') 
    107             f=file('tmplog.log','a') 
    108             f.write(self.serviceType+'#'+self.url+'#'+self.icon()) 
    109             f.close() 
    110108            return self 
    111109        def __str__(self): 
     
    113111            return hyperlink(self.name,self.url) 
    114112        def icon(self): 
    115             ''' return icon html link ''' 
     113            ''' return html icon linking to specific service ''' 
    116114            return hyperlink(image(self.serviceMap.icon,self.serviceMap.iconalt),self.url) 
    117                  
     115        def __makeuri(self,s,b,l): 
     116            ''' Actually create the URL ''' 
     117            if s=='NDG_B_SERVICE': 
     118                uri='%s/%s'%(b,l) 
     119            else: 
     120                uri=l 
     121            return uri 
     122             
    118123if __name__=="__main__": 
    119124        import ElementTree as ET 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/Utilities.py

    r1152 r1158  
    99                self.config=ConfigParser.ConfigParser() 
    1010                if not os.path.exists(configfile): 
    11                         raise 'No config file' 
     11                        raise 'No config file: %s'%configfile 
    1212                self.config.read(configfile) 
    1313                logfile=self.get('logging','debugLog',None) 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse.config

    r1152 r1158  
    66 
    77[db] 
    8 #exist:         superglue.badc.rl.ac.uk 
    9 exist:          glue.badc.rl.ac.uk 
     8exist:          superglue.badc.rl.ac.uk 
     9#exist:         glue.badc.rl.ac.uk 
    1010#exist:          gepidae.esc.rl.ac.uk 
    1111 
     
    1818keyGrey:        /layout/keyG.gif 
    1919selectI:        /layout/tick.png 
     20Xicon:          /layout/X.gif 
    2021 
    2122ndgLink:        http://ndg.nerc.ac.uk/ 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browseCGI.py

    r1152 r1158  
    204204                 
    205205                #create stub-b instance 
    206                 self.b=stubB(xml,makeHTML=renderEntity) 
     206                self.b=stubB(xml) 
    207207                 
    208208                if self.b.xml is None: 
     
    213213                    if  self.b.constraints.exist: 
    214214                        # we need to evaluate them 
    215                         result=self.ndgGate.check(self.b.constraints.SimpleCondition) 
    216                         if result=='AccessGranted':  
    217                             access=1 
    218                         else: 
    219                             access=0 
     215                        try: 
     216                             result=self.ndgGate.check(self.b.constraints.SimpleCondition) 
     217                             if result=='AccessGranted':  
     218                                access=1 
     219                             else: 
     220                                access=0 
     221                        except: 
     222                             #unable to make ndggate check ... deny 
     223                             access=0 
     224                             result=self.error('Unable to connect to security gateway, access to secure resource denied') 
    220225                    else: 
    221226                        access=1 
     
    228233                            content=et2html(self.b.tree) 
    229234                        else: 
    230                             content=self.b.toHTML() 
     235                            content=self.b.toHTML(self.config) 
    231236                    else: 
    232237                        name='NDG Browse' 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/renderEntity.py

    r1152 r1158  
    1 def renderEntity(entity): 
     1from htmlUtilities import * 
     2class renderEntity: 
     3     
     4    def __init__(self,config=None): 
     5        self.config=config 
     6 
     7    def render(self,entity): 
    28        ''' Take an NDG metadata entity (D or B) and render to HTML on a standard pattern, 
    39        depends on all entities having the same attributes ''' 
     
    2127                relatedHTML='' 
    2228 
    23          
    2429        if entity.type=='dgDataEntity': 
    2530                contentHTML=renderDataContent(entity) 
     
    3035        else: 
    3136                contentHTML='' 
     37                 
     38        #try: 
     39        xicon=hyperlink(image(self.config.get('layout','Xicon'),'[X]'),entity.binding.url+'&xml') 
     40        #except: 
     41        #    xicon='' 
    3242 
    3343        html=''' 
    3444                <DIV id="EntityContent"> 
    3545                <p></p> 
    36                 <h5>%s</h5> 
     46                <h5>%s%s</h5> 
    3747                <DIV id="Abstract"> 
    3848                        <p>%s</p>  
     
    4151                %s 
    4252                %s 
    43         </DIV>'''%(entity.name,entity.abstract,contentHTML,relatedHTML) 
     53        </DIV>'''%(entity.name,xicon,entity.abstract,contentHTML,relatedHTML) 
    4454        return html 
    4555 
     
    142152        from stubB import stubB 
    143153        xml=open('../../exampleB/methyl.example.xml').read() 
    144         x=stubB(xml,makeHTML=renderEntity) 
     154        renderer=renderEntity('browse.config') 
     155        x=stubB(xml,makeHTML=renderer,serviceFile='serviceMap.config') 
    145156        html=x.toHTML() 
    146157        f=open('output.html','w') 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/serviceMap.config

    r1152 r1158  
    55[NDG_A_SERVICE] 
    66badc.nerc.ac.uk: http://glue.badc.rl.ac.uk/cgi-bin/dataExtractor.py 
    7 icon: /layout/AIconsRd.gif 
     7icon: /layout/A.gif 
    88icon_alt: A Service 
    99service_name: A 
     
    1212#badc.nerc.ac.uk: http://glue.badc.rl.ac.uk/cgi-bin/browse.py 
    1313badc.nerc.ac.uk: http://localhost.localdomain:8000/cgi/browse.py 
    14 icon: /layout/BIconsRd.gif 
     14icon: /layout/B.gif 
    1515icon_alt: B Service 
    1616service_name: B 
    1717 
    1818[RELATED] 
    19 icon: /layout/RIconsRd.png 
     19icon: /layout/R.gif 
    2020icon_alt: Related 
    2121service_name: Related 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/stubB.py

    r1152 r1158  
    1515class dataGranule: 
    1616        ''' Provides support for data granule structures ''' 
    17         def __init__(self,elem,name=''): 
     17        def __init__(self,elem,serviceFile,name=''): 
    1818                self.elem=elem 
    1919                self.constraints=AccessControl(elem.find('accessControlPolicy')) 
    20                 self.binding=ServiceBinding(n=name,nativeID=elem.find('dataModelID')) 
     20                self.binding=ServiceBinding(n=name,nativeID=elem.find('dataModelID'), 
     21                                            serviceFile=serviceFile) 
    2122                self.Aurl=self.binding.url 
    2223                 
     
    6768                        name=wrapGetText(item,'name') 
    6869                        if name=='': name='Granule %s'%i 
    69                         self.granules.append(dataGranule(item,name=name)) 
     70                        self.granules.append(dataGranule(item,name=name,serviceFile=self.serviceFile)) 
    7071                 
    7172        def temporal(self): 
     
    9192        ''' Holds the stub-b document and provides methods which get and manipulate it ''' 
    9293         
    93         def __init__(self,xml,makeHTML=None, ServiceBinding=ServiceBinding): 
     94        def __init__(self,xml,ServiceBinding=ServiceBinding,serviceFile='cgi/serviceMap.config'): 
    9495                 
    9596                '''Instantiate by parsing an xml document passed in as a string ''' 
    9697                 
    97                 self.makeHTML=makeHTML 
    9898                self.metadataType='stubB' 
     99                self.serviceFile=serviceFile 
     100                 
    99101                self.labels={'activity':'Activity ','observationstation':'Observation Station ', 
    100102                                        'dataproductiontool':'Data Production Tool ','dgDataEntity':'Data Entity '} 
     
    109111                        self.name='Not Found' 
    110112                        return 
    111                  
     113                self.binding=ServiceBinding(n=wrapGetText(self.tree,'abbreviation'), 
     114                                nativeID=self.tree.find('dgMetadataID'),serviceFile=serviceFile) 
     115                self.Burl=self.binding.url 
     116                               
    112117                #Note that the root of the ElementTree instance is dgMetadataRecord 
    113118                #so we don't need (or want) that in our xpath expressions. 
     
    139144                self.abstract=wrapGetText(self.tree,'dgMetadataDescription/abstract/abstractText') 
    140145                 
    141                 self.binding=ServiceBinding('B',self.tree.find('dgMetadataID')) 
    142                 self.Burl=self.binding.url 
    143                  
     146 
    144147                # now go get all the related links 
    145148                self.related=[] 
     
    152155                                        for subitem in subitems: 
    153156                                                name=wrapGetText(subitem,'name') 
    154                                                 binding=ServiceBinding(name,nativeID=subitem.find('dgMetadataID'),uri='stubB') 
     157                                                binding=ServiceBinding(name,nativeID=subitem.find('dgMetadataID'),uri='stubB',serviceFile=serviceFile) 
    155158                                                aa.append(binding) 
    156159                                        deployment[1].append([self.labels[item],aa]) 
    157160                        self.related.append(deployment) 
    158161         
    159         def toHTML(self): 
    160                 if self.tree is not None: 
    161                         return self.makeHTML(self) 
    162                 else: 
    163                         return 'No Valid Stub-B' 
     162        def toHTML(self,config): 
     163            if self.tree is not None: 
     164                renderer=renderEntity(config) 
     165                return renderer.render(self) 
     166            else: 
     167                return 'No Valid Stub-B' 
    164168         
    165169if __name__=="__main__": 
    166170         
    167171        xml=open("../../exampleB/methyl.example.xml",'r').read() 
    168         x=stubB(xml,makeHTML=renderEntity) 
     172        x=stubB(xml,serviceFile='serviceMap.config') 
    169173        y='''<?xml version="1.0" encoding="UTF-8"?> 
    170174                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
     
    174178                                <title>stubB</title> 
    175179                                <LINK media="all, screen" href="../layout/style.css" type="text/css" rel="stylesheet"/> 
    176                         </head> '''+x.toHTML() 
     180                        </head> '''+x.toHTML(myConfig('browse.config')) 
    177181        f=file('output.html','w') 
    178182        f.write(y) 
Note: See TracChangeset for help on using the changeset viewer.