Changeset 1152 for TI07-MOLES/trunk


Ignore:
Timestamp:
11/06/06 21:53:22 (13 years ago)
Author:
lawrence
Message:

Refactoring browse for consistent service binding
and icons.

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

Legend:

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

    r1097 r1152  
    66from geoUtilities import * 
    77from People import * 
    8 from ServiceBinding import Service 
     8from ServiceBinding import ServiceBinding 
    99from renderEntity import renderEntity 
    1010from ETxmlView import loadET 
    1111 
     12def DIFid2NDGid(string): 
     13    ''' takes a dif thing parses it and produces an ET ndg element id ... 
     14    and use this in dif ... ''' 
     15    s=string.split(':') 
     16    try: 
     17        r='''<DIFid><schemeIdentifier>%s</schemeIdentifier> 
     18         <repositoryIdentifier>%s</repositoryIdentifier> 
     19         <localIdentifier>%s</localIdentifier></DIFid>'''%(s[1],s[0],s[2]) 
     20        return ET.fromstring(r) 
     21    except: 
     22        r='''<DIFid><schemeIdentifier>DIF</schemeIdentifier> 
     23        <repositoryIdentifier>Unknown</repositoryIdentifier> 
     24        <localIdentifier>%s</localIdentifier></DIFid>'''%string 
     25        return ET.fromstring(r) 
    1226class DIF: 
    1327    ''' Supports the NASA GCMD DIF format for python operations, 
    1428    note ... not a complete implementation, currently minimum to 
    1529    show a reasonable piece of content ''' 
    16     def __init__(self,xml,renderMethod=renderEntity): 
     30    def __init__(self,xml,renderMethod=renderEntity,serviceFile='serviceMap.config'): 
    1731        '''Initialise a python dif instance based on an xml document ''' 
    1832        self.metadataType='DIF' 
     
    6579        #Data Creators 
    6680        self.creators=[] 
    67  
    68         #should create a class for the service links (i.e. similar to data granules for stubB) 
    69         #that would include any security info ... 
    7081         
    71         self.services={} 
     82        self.services=[] 
     83        f=file('tmplog.log','a') 
    7284        for item in self.elem.findall('Related_URL'): 
    73             s=Service() 
    74             s.name=wrapGetText(item,'URL_Content_Type') 
    75              
    76             s.description=wrapGetText(item,'Description') 
    77             s.url=wrapGetText(item,'URL') 
    78             self.services[s.name]=s 
    79              
     85            n=ServiceBinding(self.name,serviceFile=serviceFile) 
     86            self.services.append(n.related(item,DIFid2NDGid(self.entryID))) 
     87            f.write(str(self.services[-1])+self.services[-1].icon()) 
     88        f.close() 
    8089    def toHTML(self): 
    8190        ''' Use the render method (optionally passed at initialisation, or the 
     
    9099    dif1xml=f.read() 
    91100    dif2xml=g.read() 
    92     D=DIF(cleanup(dif1xml)) 
    93     G=DIF(cleanup(dif2xml)) 
     101    D=DIF(dif1xml,serviceFile='serviceMap.config') 
     102    G=DIF(dif2xml,serviceFile='serviceMap.config') 
    94103    y='''<?xml version="1.0" encoding="UTF-8"?> 
    95104                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/ServiceBinding.py

    r1151 r1152  
    2121    def __init__(self,serviceFile='cgi/serviceMap.config'): 
    2222        myConfig.__init__(self,serviceFile) 
    23         self.icon,self.iconalt=None,'NoIcon' 
     23        self.icon=self.get('RELATED','icon') 
     24        self.iconalt=self.get('RELATED','icon_alt') 
    2425    def do(self,serviceType,dataProvider): 
    2526        '''  Return an actual endpoint for a given service from the data provider, e.g. 
    2627        for ndg_a_service,badc.nerc.ac.uk get http://superglue.badc.rl.ac.uk/cgi-bin/browse.py ''' 
     28        serviceType=serviceType.upper() 
    2729        r=self.get(serviceType,dataProvider) 
    2830        if r is None: 
    29             # we assume this isn't an NDG service and just return the URL 
     31            #see if we have an icon anyway ... 
     32            try: 
     33                i,a=self.get(serviceType,'icon'),self.get(serviceType,'icon_alt') 
     34                if (i,a)!=(None,None):self.icon,self.iconalt=i,a 
     35            except: pass 
     36                 
     37            # just return the URL 
    3038            if dataProvider[0:4]!='http': 
    3139                return 'http://%s'%dataProvider 
     
    3442            # this is a service type known to ndg, so we have constructed an endpoint 
    3543            self.icon=self.get(serviceType,'icon') 
    36             print 'Icon',self.icon 
    3744            self.iconalt=self.get(serviceType,'icon_alt') 
    3845            return r 
     
    5158        an NDG-A type identifier should expect the NDG-A-Service running at the 
    5259        specific repository ''' 
    53         def __init__(self,n='',nativeID=None,serviceFile='cgi/serviceMap.config'): 
     60        def __init__(self,n='',nativeID=None,serviceFile='cgi/serviceMap.config',uri='local'): 
    5461            Service.__init__(self) 
    5562            # regrettably we used different things in our ID's than we did in 
     
    5865            self.serviceMap=ServiceMap(serviceFile=serviceFile) 
    5966            self.name=n 
    60             if nativeID is not None: self.native(nativeID)  
    61         def native(self,elem): 
     67            if nativeID is not None: self.native(nativeID,uri=uri)  
     68        def native(self,elem,uri='local'): 
    6269            ''' Given an ndg id, get the native service ''' 
    6370            #e.g. 
     
    7380            if s in self.mapping: s=self.mapping[s] 
    7481            b=self.serviceMap.do(s,r) 
    75             self.url='%s?uri=%s'%(b,l) 
     82            if uri=='local': 
     83                uri=l 
     84            elif uri=='stubB': 
     85                uri='%s/%s'%(r,l) 
     86            self.url='%s?uri=%s'%(b,uri) 
     87            self.serviceType=s 
    7688            return self 
    7789        def related(self,elem,idelem): 
     
    8698            #</Related_URL> 
    8799            self.description=wrapGetText(elem,'Description') 
    88             ctype=wrapGetText(elem,'URL_Content_Type') 
    89             if ctype!='': 
    90                 b=self.serviceMap.do(ctype,wrapGetText(elem,'URL')) 
     100            self.serviceType=wrapGetText(elem,'URL_Content_Type') 
     101            if self.serviceType!='': 
     102                b=self.serviceMap.do(self.serviceType,wrapGetText(elem,'URL')) 
    91103                l=wrapGetText(idelem,'localIdentifier') 
    92104                self.url='%s?uri=%s'%(b,l) 
    93105            else: 
    94106                self.url=wrapGetText(elem,'URL') 
     107            f=file('tmplog.log','a') 
     108            f.write(self.serviceType+'#'+self.url+'#'+self.icon()) 
     109            f.close() 
    95110            return self 
    96111        def __str__(self): 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/Utilities.py

    r1150 r1152  
    7979        result[item]=cgiFieldStorage[item].value 
    8080    return result 
    81          
    8281 
    8382 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse.config

    r1047 r1152  
    22# browse.config holds the configuration information for the browse service 
    33# 
     4[services] 
     5serviceFile:    cgi/serviceMap.config 
     6 
    47[db] 
    58#exist:         superglue.badc.rl.ac.uk 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browseCGI.py

    r1150 r1152  
    2020from ETxmlView import * 
    2121from DiscoveryWS import * 
     22from DIF import DIF 
    2223 
    2324import Cookie 
     
    125126                self.requestURL=self.request.URL 
    126127                self.selector=selector(self.requestURL,'select',config.get('layout','selectI')) 
     128                self.serviceFile=self.config.get('services','serviceFile') 
    127129                 
    128130 
     
    253255                difs=[] 
    254256                 
    255                 for result in results: difs.append(result) 
     257                for result in results: difs.append(DIF(result,serviceFile=self.serviceFile)) 
    256258                html=renderDiscoverySet(difs,state,selector=self.selector, 
    257259                               summary=1,spatial=1,temporal=1,services=1) 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/renderDiscoverySet.py

    r1143 r1152  
    4444            if not s: ll+=', ' 
    4545            s=0 
    46             if item == 'NDG_A_SERVICE':  
    47                 ll+=hyperlink('data',d.services[item].url) 
    48                 ndg=1 
    49             elif item == 'NDG_B_SERVICE': 
    50                 ll+=hyperlink('metadata',d.services[item].url) 
     46            if item.serviceType == 'NDG_A_SERVICE':  
     47                ll+=item.icon() 
     48                ndg+=1 
     49            elif item.serviceType == 'NDG_B_SERVICE': 
     50                ndg+=1 
     51                ll+=item.icon() 
    5152            else: 
    52                 ll+=hyperlink(item,d.services[item].url) 
     53                ll+=item.icon() 
     54        if ndg<2: ndg=0 
    5355        return ndg,ll 
    5456 
     
    7375    i=1 
    7476    for item in difSet: 
    75         d=DIF(item) 
     77        d=item # we used to do the diffing here ... but we don't anymore 
    7678        bgc={1:'rbgWhite',-1:'rbgGrey'}[i] 
    7779        i=-1*i 
     
    130132    for result in results: 
    131133        #g.write(xmlCleanup(result)+'\n') 
    132         difs.append(result) 
     134        difs.append(DIF(result,serviceFile='serviceMap.config')) 
    133135    html=renderDiscoverySet(difs,state,summary=1,spatial=1,temporal=1) 
    134136    f=file('output.html','wb') 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/renderEntity.py

    r976 r1152  
    110110                        else: 
    111111                           html+='<td>public</td><td></td>' 
    112                         html+='<td>%s</td></tr>'%g.Aurl  
     112                        html+='<td>%s</td></tr>'%g.binding 
    113113                html+='</tbody></table>' 
    114114                return html 
     
    133133                                label=instance[0] 
    134134                                for link in instance[1]: 
    135                                         html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%"><a href="%s">%s</a></td></tr>'%(label,link[1],link[0]) 
     135                                        html+='<tr><td width="40%%"><b>%s</b></td><td width="60%%">%s</td></tr>'%(label,link) 
    136136                html+='</tbody></table>' 
    137137        else: 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/serviceMap.config

    r1151 r1152  
    33# service, it also provides icons associated with the services for display 
    44# 
    5 [NDG_A_Service] 
    6 badc.nerc.ac.uk: glue.badc.rl.ac.uk/cgi-bin/dataExtractor.py  
    7 icon: layout/AIconsRd.gif 
     5[NDG_A_SERVICE] 
     6badc.nerc.ac.uk: http://glue.badc.rl.ac.uk/cgi-bin/dataExtractor.py 
     7icon: /layout/AIconsRd.gif 
    88icon_alt: A Service 
    99service_name: A 
    1010 
    11 [NDG_B_Service] 
    12 badc.nerc.ac.uk: glue.badc.rl.ac.uk/cgi-bin/browse.py 
    13 icon: layout/BIconsRd.gif 
     11[NDG_B_SERVICE] 
     12#badc.nerc.ac.uk: http://glue.badc.rl.ac.uk/cgi-bin/browse.py 
     13badc.nerc.ac.uk: http://localhost.localdomain:8000/cgi/browse.py 
     14icon: /layout/BIconsRd.gif 
    1415icon_alt: B Service 
    1516service_name: B 
     17 
     18[RELATED] 
     19icon: /layout/RIconsRd.png 
     20icon_alt: Related 
     21service_name: Related 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/stubB.py

    r1150 r1152  
    1515class dataGranule: 
    1616        ''' Provides support for data granule structures ''' 
    17         def __init__(self,elem): 
     17        def __init__(self,elem,name=''): 
    1818                self.elem=elem 
    1919                self.constraints=AccessControl(elem.find('accessControlPolicy')) 
    20                 self.binding=ServiceBinding('granule',nativeID=elem.find('dataModelID')) 
     20                self.binding=ServiceBinding(n=name,nativeID=elem.find('dataModelID')) 
    2121                self.Aurl=self.binding.url 
    2222                 
     
    6060                granList=self.elem.findall('dgDataGranule') 
    6161                self.granules=[] 
     62                i=0 
    6263                for item in granList: 
    63                         self.granules.append(dataGranule(item)) 
     64                        i+=1 
     65                        #following needs to be refactored when granule definition includes 
     66                        #a proper name ... 
     67                        name=wrapGetText(item,'name') 
     68                        if name=='': name='Granule %s'%i 
     69                        self.granules.append(dataGranule(item,name=name)) 
    6470                 
    6571        def temporal(self): 
     
    146152                                        for subitem in subitems: 
    147153                                                name=wrapGetText(subitem,'name') 
    148                                                 binding=ServiceBinding(name,nativeID=subitem.find('dgMetadataID')) 
    149                                                 aa.append([name,binding.url]) 
     154                                                binding=ServiceBinding(name,nativeID=subitem.find('dgMetadataID'),uri='stubB') 
     155                                                aa.append(binding) 
    150156                                        deployment[1].append([self.labels[item],aa]) 
    151157                        self.related.append(deployment) 
Note: See TracChangeset for help on using the changeset viewer.