Changeset 1171


Ignore:
Timestamp:
13/06/06 17:14:46 (13 years ago)
Author:
lawrence
Message:

More browse/discovery rendering modifications, utilising
Kev's new DIF returning routine ...

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

Legend:

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

    r1164 r1171  
    77from People import * 
    88from ServiceBinding import ServiceBinding 
     9from secure import AccessControl 
    910from renderEntity import renderEntity 
    1011from ETxmlView import loadET 
     
    2829    note ... not a complete implementation, currently minimum to 
    2930    show a reasonable piece of content ''' 
    30     def __init__(self,xml,renderMethod=renderEntity,serviceFile='serviceMap.config'): 
     31    def __init__(self,xml,serviceFile='serviceMap.config'): 
    3132        '''Initialise a python dif instance based on an xml document ''' 
    3233        self.metadataType='DIF' 
     
    3940            self.elem=None 
    4041            return 
    41         self.renderMethod=renderMethod 
    4242        self.type='DIF' 
    4343        self.entryID=wrapGetText(self.elem,'Entry_ID') 
    4444         
    45          
    4645        self.abstract=wrapGetText(self.elem,'Summary') 
    4746        self.name=wrapGetText(self.elem,'Entry_Title') 
    48         self.binding=ServiceBinding(n=self.name[0:min(5,len(self.name))], 
     47        self.abbreviation=self.name[0:min(5,len(self.name))] 
     48        self.binding=ServiceBinding(n=self.abbreviation, 
    4949                    nativeID=DIFid2NDGid(self.entryID),serviceFile=serviceFile) 
    5050        #Note that entity.constraints.html is about access control on the metadata, 
    5151        #and so we don't populate this here ... 
     52        self.constraints=AccessControl(None) 
    5253         
    5354        #need entity.parameters, entity.bbox, entity.timeCoverage, entity.curator, entity.creators ... 
     
    8990            f.write(str(self.services[-1])+self.services[-1].icon()) 
    9091        f.close() 
    91     def toHTML(self): 
    92         ''' Use the render method (optionally passed at initialisation, or the 
    93         default - renderEntity - to get an HTML version of the DIF ''' 
    94         return self.renderMethod.render(self) 
    95          
     92    def toHTML(self,config): 
     93        if self.elem is not None: 
     94            renderer=renderEntity(config) 
     95            return renderer.render(self) 
     96        else: 
     97            return '<p>No Valid DIF</p>' 
    9698             
    9799if __name__=="__main__": 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse/ServiceBinding.py

    r1164 r1171  
    6767            self.name=n 
    6868            if nativeID is not None: self.native(nativeID,uri=uri)  
    69         def native(self,elem,uri='local'): 
     69        def native(self,elem,uri='local',seqno=1): 
    7070            ''' Given an ndg id, get the native service ''' 
    7171            #e.g. 
     
    8282            b=self.serviceMap.do(s,r) 
    8383            uri=self.__makeuri(s,r,l) 
    84             self.url='%s?uri=%s'%(b,uri) 
     84            self.url=self.__makeurl(s,b,uri,seqno) 
    8585            self.serviceType=s 
    8686            return self 
    87         def related(self,elem,idelem): 
     87        def related(self,elem,idelem,seqno=1): 
    8888            ''' Given a DIF related URL, get a service binding ''' 
    8989            # e.g: 
     
    103103                l=wrapGetText(idelem,'localIdentifier') 
    104104                uri=self.__makeuri(s,r,l) 
    105                 self.url='%s?uri=%s'%(b,uri) 
     105                self.url=self.__makeurl(s,b,uri,seqno) 
    106106            else: 
    107107                self.url=wrapGetText(elem,'URL') 
     
    114114            return hyperlink(image(self.serviceMap.icon,self.serviceMap.iconalt),self.url) 
    115115        def __makeuri(self,s,b,l): 
    116             ''' Actually create the URL ''' 
     116            ''' Actually create the URI ''' 
    117117            if s=='NDG_B_SERVICE': 
    118118                uri='%s/%s'%(b,l) 
     
    120120                uri=l 
    121121            return uri 
     122        def __makeurl(self,s,b,uri,seqno): 
     123            ''' Actually create the URL ''' 
     124            iType=self.serviceMap.get(s,'instance','uri') 
     125            if '%s' in iType: iType=iType%seqno 
     126            return '%s?%s=%s'%(b,iType,uri) 
    122127             
    123128if __name__=="__main__": 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse/browse.config

    r1164 r1171  
    33# 
    44[services] 
    5 serviceFile:    cgi/browse/serviceMap.config 
     5#serviceFile:    /var/www/cgi-bin/browse/serviceMap.config 
     6#jarLoc:         /var/www/returnstubb.jar 
     7#javaBinary:     /usr/java/jdk1.5.0_03/bin/java 
     8serviceFile:     cgi/browse/serviceMap.config 
     9jarLoc:          returnstubb.jar 
     10javaBinary:      java 
    611 
    712[db] 
    8 exist:          superglue.badc.rl.ac.uk 
    9 #exist:         glue.badc.rl.ac.uk 
     13#exist:         superglue.badc.rl.ac.uk 
     14exist:          glue.badc.rl.ac.uk 
    1015#exist:          gepidae.esc.rl.ac.uk 
    1116 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse/browseCGI.py

    r1164 r1171  
    199199                    self.ViewXML=1 
    200200                 
     201                format='NDG-B0' 
     202                if self.FieldStorage.has_key('D'):format='DIF' 
     203                 
    201204                #get the xml document 
    202205                db=self.config.get('db','exist',None) 
    203                 xml=insecureGetDoc(self.uri,db) 
    204                  
    205                 #create stub-b instance 
    206                 self.b=stubB(xml,serviceFile=self.serviceFile) 
     206                jar=self.config.get('services','jarLoc') 
     207                javabin=self.config.get('services','javaBinary') 
     208                xml=insecureGetDoc(self.uri,db=db,format=format,jar=jar,javaBin=javabin) 
     209                 
     210                #create document instance 
     211                if format=='NDG-B0': 
     212                    self.b=stubB(xml,serviceFile=self.serviceFile) 
     213                elif format=='DIF': 
     214                    self.b=DIF(xml,serviceFile=self.serviceFile) 
    207215                 
    208216                if self.b.xml is None: 
    209                     content=self.error('Unable to obtain stub-B from database') 
     217                    content=self.error('Unable to obtain record from database') 
    210218                    return content,0 
    211219                else: 
    212                     self.session.addToHistory(self.b.Burl,self.b.abbreviation) 
     220                    self.session.addToHistory(self.b.binding.url,self.b.abbreviation) 
    213221                    if  self.b.constraints.exist: 
    214222                        # we need to evaluate them 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse/insecure.py

    r1164 r1171  
    1313import commands 
    1414 
    15 def jarLoc(jar): 
    16         #don't want the jar in the cgi directory ... not quite sure why, but  
    17         #it seems wrong ... having made that decision, we have to bugger 
    18         #around with relative paths depending on whether this is test code  
    19         #(outside the cgi environment) or in the cgi environment 
    20         cwd=os.getcwd() 
    21         return os.path.normpath(os.path.join(cwd,jar)) 
    22  
    2315def osCommand(cmd): 
    2416        stdin,stdout,stderr=os.popen3(cmd) 
     
    3123                return 0,s 
    3224 
    33 def insecureGetDoc(uri,db='glue.badc.rl.ac.uk', jar='./returnstubb.jar'): 
     25def insecureGetDoc(uri,db='glue.badc.rl.ac.uk',format='NDG-B0', 
     26        jar='./returnstubb.jar',javaBin='java'): 
    3427        ''' Use Kevin's code to get the document from exist ''' 
    3528        #we assume the URI is of the form repository/localid 
     
    3831        #following a hack for testing: 
    3932        if uri=='methyl.example.xml': 
    40             f=file('../exampleB/methyl.example.xml') 
     33            try: 
     34                f=file('../exampleB/methyl.example.xml') 
     35            except: 
     36                f=file('/var/www/html/exampleB/methyl.example.xml') 
    4137            return f.read() 
    4238        try: 
     
    5349            pw[h[0]]=h[1],h[2] 
    5450        #try: 
    55         returnMolesJar=jarLoc(jar) 
    56         cmd='java -jar %s repositoryID %s localID %s repository %s user %s userpw %s '%( 
    57                returnMolesJar,repPath,localID, edb, pw[db][0], pw[db][1]) 
     51        cmd='%s -jar %s repositoryID %s localID %s repository %s user %s userpw %s format %s'%( 
     52               javaBin,jar,repPath,localID, edb, pw[db][0], pw[db][1], format) 
    5853        status,result=commands.getstatusoutput(cmd) 
    5954        #except: 
    6055        #    return None 
    61         if status:  
     56        if status:  
    6257                return None 
    6358        else: 
    6459                return result 
    6560         
    66 def doXSLT (document,jar='./xalan-j_2_7_0/xalan.jar',xsltMethod=None): 
    67         ''' Handle a possibly external transformation to produce an html page ''' 
    68         #use temporary files for the moment, ugly, but it will work. 
    69         # consider using pyana or some other way of doing this later ... 
    70         #try: 
    71         #return 'done' 
    72         fn=tempfile.mktemp('.ndg-xml') 
    73         f=file(fn,'wb') 
    74         f.write(document) 
    75         f.close() 
    76         on=tempfile.mktemp('.ndg-xml') 
    77         xalanjar=jarLoc(jar) 
    78         xslt=jarLoc('./xslt/stubb_2_browse.xsl') 
    79         cmd='java -cp %s org.apache.xalan.xslt.Process -IN %s -XSL %s -OUT %s'%(xalanjar,fn,xslt,on) 
    80         status,result=osCommand(cmd) 
    81         if status: 
    82                 return result 
    83         else: 
    84                 f=file(on,'r') 
    85                 result='' 
    86                 for i in f.readlines(): result+=i 
    87                 f.close() 
    88                 r=os.remove(fn) 
    89                 r=os.remove(on) 
    90                 return result 
    91          
    9261if __name__=="__main__": 
    93         #d= insecureGetDoc('badc.nerc.ac.uk/dataent13',jar='../returnmoles.jar') 
    94         d= insecureGetDoc('badc.nerc.ac.uk/dataent1',db='gepidae.esc.rl.ac.uk', 
    95             jar='../returnstubb.jar') 
     62        javaBin='java' 
     63        jarLoc='../../returnstubb.jar' 
     64        id='badc.nerc.ac.uk/dataent1' 
     65        db='glue.badc.rl.ac.uk' 
     66        d= insecureGetDoc(id,db=db,jar=jarLoc,javaBin=javaBin,format='DIF') 
    9667        print d 
    9768        #print d 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse/serviceMap.config

    r1164 r1171  
    44# 
    55[NDG_A_SERVICE] 
    6 badc.nerc.ac.uk: http://glue.badc.rl.ac.uk/cgi-bin/dataExtractor.py 
     6badc.nerc.ac.uk: http://glue.badc.rl.ac.uk/dxui 
    77icon: /layout/A.gif 
    88icon_alt: A Service 
    99service_name: A 
     10instance: datasetURI_%s 
    1011 
    1112[NDG_B_SERVICE] 
     
    1516icon_alt: B Service 
    1617service_name: B 
     18instance: uri 
    1719 
    1820[RELATED] 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse/stubB.py

    r1164 r1171  
    165165                return renderer.render(self) 
    166166            else: 
    167                 return 'No Valid Stub-B' 
     167                return '<p>No Valid Stub-B</p>' 
    168168         
    169169if __name__=="__main__": 
Note: See TracChangeset for help on using the changeset viewer.