Changeset 4268


Ignore:
Timestamp:
02/10/08 11:55:59 (11 years ago)
Author:
cbyrom
Message:

Add new template, atom_list, to allow searching and selection of
atoms + add methods to listatom controller to add the search functionality
+ generalise the getDropDown method into htmlUtilties for re-use +
extend this to allow additional 'default' items to be added to drop
downs (i.e. for 'all' or 'none' selections) + update routings.

Location:
TI05-delivery/ows_framework/trunk/ows_server/ows_server
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/config/routing.py

    r4250 r4268  
    4141    map.connect('createAtom', controller = 'editatom', action='create') 
    4242    map.connect('atomHome', controller = 'listatom', action='atomHome') 
    43     map.connect('listAtom', controller = 'listatom', action='list') 
     43    map.connect('listAtom/:searchData', controller = 'listatom', \ 
     44                action='list', searchData='') 
    4445 
    4546     
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/editatom.py

    r4250 r4268  
    2020from ndgUtils.models.MolesEntity import MolesEntity as ME 
    2121from ndgUtils.vocabtermdata import VocabTermData as VTD 
     22from ows_server.templates.htmlUtilities import getVocabTermDataDropdown 
    2223 
    2324class AtomFormSchema(Schema): 
     
    170171 
    171172 
    172         c.subTypes = self.__getDropdown(VTD().getValidSubTypes(c.atom.atomTypeID), \ 
     173        c.subTypes = getVocabTermDataDropdown(VTD().getValidSubTypes(c.atom.atomTypeID), \ 
    173174                                        selected=c.atom.subtype) 
    174175         
     
    202203        logging.debug("Setting up drop down lists for related links") 
    203204        vtd = VTD() 
    204         c.relatedLinkTerms = self.__getDropdown(vtd.getValidTypes(vtd.ONLINE_REF_CATEGORY)) 
     205        c.relatedLinkTerms = getVocabTermDataDropdown(vtd.getValidTypes(vtd.ONLINE_REF_CATEGORY)) 
    205206         
    206207        c.relatedLinkSelectedLists = {} 
     
    208209            logging.debug("Adding dropdown for related link, '%s'" %(str(link))) 
    209210            c.relatedLinkSelectedLists[str(link)] = \ 
    210                 self.__getDropdown(vtd.getValidTypes(vtd.ONLINE_REF_CATEGORY), \ 
     211                getVocabTermDataDropdown(vtd.getValidTypes(vtd.ONLINE_REF_CATEGORY), \ 
    211212                                                     selected=link.rel) 
    212213 
     
    351352        # set up the drop down content 
    352353        vtd = VTD() 
    353         c.atomTypes = self.__getDropdown(vtd.getValidTypes(vtd.ATOM_CATEGORY)) 
    354         c.providerIDs = self.__getDropdown(vtd.getValidTypes(vtd.PROVIDER_CATEGORY)) 
     354        c.atomTypes = getVocabTermDataDropdown(vtd.getValidTypes(vtd.ATOM_CATEGORY)) 
     355        c.providerIDs = getVocabTermDataDropdown(vtd.getValidTypes(vtd.PROVIDER_CATEGORY)) 
    355356 
    356357        try: 
     
    366367        response.status_code = 400 
    367368        return render('error') 
    368  
    369  
    370     def __getDropdown(self, list, selected=None): 
    371         '''  
    372         Gets a dropdown option list suitable for use in the h.select helper 
    373         @param list: list of VocabTermItems 
    374         @keyword selected: the value currently selected 
    375         ''' 
    376         logging.debug("Setting up drop down list for data") 
    377         if selected: 
    378             logging.debug("(current val:'%s')" %selected) 
    379         r='' 
    380         # NB, need to include both vocabURL and term ID for the data to be 
    381         # meaningful 
    382         for val in list: 
    383             default='' 
    384             # NB, the selected val will be the full, latest term url - so only 
    385             # compare the start and end for match 
    386             if selected and selected.endswith(val.termID) and \ 
    387                 selected.startswith(val.vocabURL): 
    388                 default='selected="selected"' 
    389             r+='<option value="%s--%s" %s>%s</option>' %(val.vocabURL, \ 
    390                 val.termID, default, val.title or val.termID) 
    391          
    392         logging.debug("- produced drop down contents: '%s'" %r) 
    393         return r 
    394369 
    395370 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/controllers/listatom.py

    r4237 r4268  
    99from ndgUtils import ndgObject 
    1010from paste.request import parse_querystring 
    11 from ows_server.lib import mailer 
    1211from ows_server.lib.ndgInterface import interface  
    1312from xml.parsers.expat import ExpatError 
     
    1716from genshi.filters import HTMLFormFiller 
    1817from genshi import HTML 
     18from ndgUtils import DocumentRetrieve 
     19from ndgUtils.eXistInterface import ndg_eXist 
    1920import ndgUtils.models.existdbclient as edc 
    2021from ndgUtils.models.MolesEntity import MolesEntity as ME 
    21 from ndgUtils.vocabtermdata import VocabTermData as VTD 
     22from ndgUtils.vocabtermdata import VocabTermData as VTD, VocabTermItem as VTI 
     23from ows_server.templates.htmlUtilities import getVocabTermDataDropdown 
    2224 
    2325class AtomFormSchema(Schema): 
     
    4547    Provides the pylons controller for listing/searching NDG Atom documents. 
    4648    ''' 
     49     
    4750    def __setup(self,uri=None): 
    4851        ''' Common setup stuff for all the actions on this controller ''' 
     
    6164        return 0 
    6265 
     66 
    6367    def atomHome(self): 
    6468        '''  
     
    6872        c.title = "Atom Editor Home Page" 
    6973        return render("genshi", "atom_home") 
     74         
     75     
     76    def list(self, searchData=None, associatedAtomID=None): 
     77        '''  
     78        Provide a simple search interface to the atoms data  
     79        - display a filter + display any results + if an atomID is 
     80        provided, allow atoms to be linked to this 
     81        @keyword associatedAtomID: the ID of an atom to which other atoms 
     82        should be linked - via deployments  
     83        ''' 
     84        try: 
     85            inputs = request.params 
     86            if searchData and int(searchData) > 0: 
     87                logging.info("Preparing atom search") 
     88                self.__setup() 
     89                atomTypeID = inputs.get('atomTypeID').split('--')[1] 
     90                providerID = inputs.get('providerID').split('--')[1] 
     91                logging.debug("Input params, '%s'" %inputs) 
     92                c.results = self.searchAtoms(providerID, atomTypeID, inputs.get('title')) 
     93                 
     94            logging.info("Rendering atom listings page") 
     95            c.errors = {} 
     96            c.title='Browse atoms' 
     97            c.addAtom = associatedAtomID 
     98 
     99            c.searchData = searchData 
     100            c.searchTerm = inputs.get('title') 
     101             
     102            # set up the drop down content 
     103            # set default value 
     104            defaultVal = VTI(ndg_eXist.DEFAULT_ALL_VAL, ndg_eXist.DEFAULT_ALL_VAL) 
     105            vtd = VTD() 
     106            c.atomTypes = getVocabTermDataDropdown(vtd.getValidTypes(vtd.ATOM_CATEGORY), \ 
     107                                                   defaultVal = defaultVal, \ 
     108                                                   selected = inputs.get('atomTypeID')) 
     109            c.providerIDs = getVocabTermDataDropdown(vtd.getValidTypes(vtd.PROVIDER_CATEGORY),  
     110                                                     defaultVal = defaultVal, \ 
     111                                                     selected = inputs.get('providerID')) 
     112 
     113            return render("genshi", 'atom_list') 
     114 
     115        except Exception, e: 
     116            #we may be showing an xml document ... but it could go wrong if 
     117            #we have crap content ... 
     118            c.xml='Unexpected error loading page [%s]' %str(e) 
     119            c.doc='' 
     120            logging.error(c.xml) 
     121         
     122        response.status_code = 400 
     123        return render('error') 
    70124     
    71125     
    72     def list(self, **data): 
     126    def searchAtoms(self, providerID, atomTypeID, term): 
    73127        ''' 
    74         Allow basic searching and listing of atom data 
     128        Search for atoms with specified filter info 
     129        @param providerID: provider ID of atom or 'all' for all 
     130        @param atomTypeID: type of atom or 'all' for all 
     131        @param term: text to search for in atom 
     132        @return array of dicts with info for each doc found in search 
    75133        ''' 
    76         logging.info("Rendering atom listings page") 
     134        logging.info("Search for atoms with the following filter: \ 
     135            \nProviderID: '%s'\nAtom Type: '%s'\nText in title: '%s'" \ 
     136            %(providerID, atomTypeID, term)) 
     137         
     138        dr = DocumentRetrieve(self.cf.get('NDG_EXIST','local'), 
     139                              self.cf.get('NDG_EXIST','passwordFile')) 
    77140     
     141        results = dr.search(term, 
     142                            start=1, 
     143                            howmany=10000, # NB, we want to get back everything! 
     144                            target=ndg_eXist.ATOM_TARGET, 
     145                            providerID = providerID,  
     146                            atomTypeID = atomTypeID) 
     147 
     148        logging.info("Search completed") 
     149        print results 
     150        return results 
     151 
     152             
     153         
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/public/layout/ndg2.css

    r4243 r4268  
    1717} 
    1818 
     19.fullWidth 
     20{ 
     21width: 100%; 
     22} 
    1923 
    2024td.column 
  • TI05-delivery/ows_framework/trunk/ows_server/ows_server/templates/htmlUtilities.py

    r2672 r4268  
    22# This is a collection of template utilities for producing html 
    33# 
     4import logging 
     5 
    46class selector: 
    57    ''' Provides a selection icon to add a dataset to a selector box ''' 
     
    5052    else: 
    5153        return t 
     54     
     55 
     56def getVocabTermDataDropdown(list, selected=None, defaultVal=None): 
     57    '''  
     58    Gets a dropdown option list suitable for use in the h.select helper 
     59    @param list: list of VocabTermItems 
     60    @keyword selected: the value currently selected 
     61    @keyword defaultVal: an additional item to add - to represent a default - e.g. 
     62    'all' or 'none' 
     63    ''' 
     64    logging.debug("Setting up drop down list for data") 
     65    if selected: 
     66        logging.debug("(current val:'%s')" %selected) 
     67    r='' 
     68     
     69    if defaultVal: 
     70        r+='<option value="%s--%s">%s</option>' %(defaultVal.vocabURL, \ 
     71            defaultVal.termID, defaultVal.termID) 
     72 
     73    # NB, need to include both vocabURL and term ID for the data to be 
     74    # meaningful 
     75    for val in list: 
     76        default='' 
     77        # NB, the selected val will be the full, latest term url - so only 
     78        # compare the start and end for match 
     79        if selected and selected.endswith(val.termID) and \ 
     80            selected.startswith(val.vocabURL): 
     81            default='selected="selected"' 
     82        r+='<option value="%s--%s" %s>%s</option>' %(val.vocabURL, \ 
     83            val.termID, default, val.title or val.termID) 
     84     
     85    logging.debug("- produced drop down contents: '%s'" %r) 
     86    return r 
     87     
Note: See TracChangeset for help on using the changeset viewer.