Ignore:
Timestamp:
Jan 31, 2011, 8:16:03 PM (10 years ago)
Author:
robert@…
Message:
  • Implemented a cache for module rest calls, to increase performance (see moduleCommunicationService)
  • Implemented searching in module data.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/query/AdvancedQueryController.groovy

    r1456 r1458  
    11package dbnp.query
     2import dbnp.modules.*
     3import org.dbnp.gdt.*
    24
    35// TODO: Make use of the searchable-plugin possibilities instead of querying the database directly
     
    911 */
    1012class AdvancedQueryController {
     13        def moduleCommunicationService;
     14       
    1115        def entitiesToSearchFor = [ 'Study': 'Studies', 'Sample': 'Samples']
    1216    def index = {
     
    5660                def fields = [:];
    5761               
     62                // Retrieve all local search fields
    5863                getEntities().each {
    5964                        def entity = getEntity( 'dbnp.studycapturing.' + it );
     
    6671                               
    6772                                fields[ it ] = fieldNames.sort { a, b -> a[0].toUpperCase() + a[1..-1] <=> b[0].toUpperCase() + b[1..-1] };
     73                        }
     74                }
     75               
     76                // Loop through all modules and check which fields are searchable
     77                // Right now, we just combine the results for different entities
     78                AssayModule.list().each { module ->
     79                        def callUrl = module.url + '/rest/getQueryableFields'
     80                        try {
     81                                def json = moduleCommunicationService.callModuleRestMethodJSON( module.url, callUrl );
     82                                def moduleFields = [];
     83                                entitiesToSearchFor.each { entity ->                                   
     84                                        if( json[ entity.key ] ) {
     85                                                json[ entity.key ].each { field ->
     86                                                        moduleFields << field.toString();
     87                                                }
     88                                        }
     89                                }
     90                               
     91                                // Remove 'module' from module name
     92                                def moduleName = module.name.replace( 'module', '' ).trim()
     93                               
     94                                fields[ moduleName ] = moduleFields.unique();
     95                        } catch( Exception e ) {
     96                                log.error( "Error while retrieving queryable fields from " + module.name + ": " + e.getMessage() )
    6897                        }
    6998                }
Note: See TracChangeset for help on using the changeset viewer.