Changeset 146


Ignore:
Timestamp:
Oct 14, 2010, 7:56:10 PM (6 years ago)
Author:
j.saito@…
Message:

Removed three possible sources for null-pointer exceptions in the CommunicationManager?.

Added a simpel way of handling REST errors using a new RestException? class.

I have tried to introduce Exception handling for errors in the Communication manager. So far, I only committed exceptions for something going wrong. I have been working on a more fine grained distinction between server side errors and client side errors related to REST. however, these errors require some sort of convention for delivering from the server side to the client side. Therefore, they require a convention to be agreed to by NMCDSP and I have not committed these Exceptions.

Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • grails-app/controllers/RestController.groovy

    r139 r146  
    77import org.compass.core.impl.*
    88import dbnp.rest.common.CommunicationManager
     9import dbnp.rest.*
    910
    1011
     
    8485     */
    8586    def getMeasurements = {
     87
     88                def valid = CommunicationManager.hasValidParams( params, {render it as JSON }, 'assayToken' )
     89                if( !valid ) {
     90                        return
     91                }
     92
     93
    8694                def assayToken = params.assayToken
    87         if( !assayToken ) { return render [] as JSON }
    88 
    89                 def list = []
     95                def list = []
    9096                def assay = SimpleAssay.find( "from SimpleAssay as a where a.externalAssayID =? ", [assayToken] )
    9197                SimpleAssayMeasurement
     
    9399                                .each{ measurement ->
    94100                                        def tripple = [:]
    95                                 tripple['value'] = measurement.value
    96                                 tripple['sampleToken'] = measurement.sample.externalSampleId
    97                                 tripple['measurementToken'] = measurement.type.name
     101                                tripple['value'] = measurement.value
     102                                tripple['sampleToken'] = measurement.sample.externalSampleId
     103                                tripple['measurementToken'] = measurement.type.name
    98104                                        list.push tripple
    99105                                }
     106
    100107                render list as JSON
    101108    }
     
    527534
    528535        def test = {
    529                 render CommunicationManager.getSamples('PPSH-Glu-B')
     536                render CommunicationManager.getStudies()
    530537        }
    531538
  • src/groovy/dbnp/rest/common/CommunicationManager.groovy

    r136 r146  
    11package dbnp.rest.common
    22
     3import dbnp.rest.*
    34import grails.converters.JSON
    45import java.net.URLEncoder
     
    4546            conn.setRequestProperty("Authorization", "Basic ${authString}")
    4647            return JSON.parse( conn.content.text )
    47             //return conn.content.text
    48                 //return JSON.parse( url.newReader() )
    4948    }
    5049
     
    111110
    112111    public static addRestWrapper( serverURL, restName, params = [], closure = { return it } ) {
    113                 CommunicationManager.metaClass.registerStaticMethod( restName ) { Object [] strangeGroovyArgs ->
    114                         def map = [:]
    115                     def args = strangeGroovyArgs[0]        // groovy nests the parameters of the methods in some other array
    116                         if(params.size > 0 )
    117                         {
    118                                 for( i in 0..(params.size-1) ) {
    119                                         def param = params[i]
    120                                         map[param] = args[i]
     112                def result
     113                try {
     114                        CommunicationManager.metaClass.registerStaticMethod( restName ) { Object [] strangeGroovyArgs ->
     115                                def map = [:]
     116                            def args = strangeGroovyArgs[0]        // groovy nests the parameters of the methods in some other array
     117                                if(params.size > 0 )
     118                                {
     119                                        for( i in 0..(params.size-1) ) {
     120                                                def param = params[i]
     121                                                map[param] = args[i]
     122                                        }
    121123                                }
    122                         }
    123                         return closure( getRestResource( serverURL, restName, map ) )
    124                 }
     124                                result = closure( getRestResource( serverURL, restName, map ) )
     125                        }
     126                } catch ( Exception e ) { result = RestException.getErrorObject()  }
     127                return result
    125128        }
    126129
     
    253256                addRestWrapper( url+'/rest', 'getQueryResultWithOperator',  ['query','operator','value'], closure2 )
    254257
    255 
    256258        }
    257259       
     260
     261
     262    /**
     263     * Give list of missing parameters for a parameter call in a RestController.
     264     * 
     265     * @params params Map params        The parameter list required by this view.
     266     * @params requiredParamers                 List of parameter names that must be provided
     267     * @return true, if params has all required parameters, an error hash otherwise
     268     */ 
     269        static String hasValidParams( params, render, Object [] requiredParams ) {
     270                def list = []
     271                requiredParams.each { p ->
     272                        if( !params[p] ) list.push p
     273                }
     274                if(list.size()<=0) { return true }
     275                render( ['error':list] )
     276                return false  // return erro object
     277        }
     278
     279
    258280}
Note: See TracChangeset for help on using the changeset viewer.