Ignore:
Timestamp:
May 23, 2011, 4:36:00 PM (11 years ago)
Author:
s.h.sikkema@…
Message:

in exporter: module error display improvements (ie. display on screen but still able to export); removed changes to simplewizard; removed unnecessary imports; should handle 'null' parent subject from samples correctly; should handle non number values from modules correctly; deselects module measurements in case of module error/no measurements; removed obsolete entry in topnav

Location:
trunk/grails-app/services/dbnp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/dbnp/modules/ModuleCommunicationService.groovy

    r1852 r1864  
    1515package dbnp.modules
    1616
    17 import dbnp.studycapturing.*
    18 import dbnp.authentication.*
    1917import grails.converters.*
    2018import javax.servlet.http.HttpServletResponse
     
    7573        }
    7674
    77         /**
     75    /**
    7876         * Calls a rest method on a module
    7977         *
  • trunk/grails-app/services/dbnp/studycapturing/AssayService.groovy

    r1853 r1864  
    5050                }
    5151
     52        def moduleError = '', moduleMeasurements = []
     53
     54        try {
     55            moduleMeasurements = requestModuleMeasurementNames(assay)
     56        } catch (e) {
     57            moduleError = e.message
     58        }
     59
    5260                def samples = assay.samples
    5361                [               'Subject Data' :            getUsedTemplateFields( samples*."parentSubject".unique() ),
     
    5563                                        'Sample Data' :             getUsedTemplateFields( samples ),
    5664                                        'Event Group' :             [[name: 'name', comment: 'Name of Event Group', displayName: 'name']],
    57 
    58                                         // If module is not reachable, only the field 'module error' is returned, and is filled later on.
    59                                         'Module Measurement Data':  moduleCommunicationService.isModuleReachable(assay.module.url) ? requestModuleMeasurementNames(assay) : [ [ name: "Module error" ] ]
     65                                        'Module Measurement Data':  moduleMeasurements,
     66                    'ModuleError':              moduleError
    6067                ]
    6168
     
    8390                        headerFields.inject([:]) { map, headerField ->
    8491
    85                                 map + [(headerField.displayName): templateEntities.collect {
     92                                map + [(headerField.displayName): templateEntities.collect { entity ->
    8693
    8794                    // default to an empty string
    8895                    def val = ''
    8996
    90                     def field
    91                     try {
    92 
    93                         val = it.getFieldValue(headerField.name)
    94 
    95                         // Convert RelTime fields to human readable strings
    96                         field = it.getField(headerField.name)
    97                         if (field.type == TemplateFieldType.RELTIME)
    98                             val = new RelTime( val as long )
    99 
    100                     } catch (NoSuchFieldException e) { /* pass */ }
     97                    if (entity) {
     98                        def field
     99                        try {
     100
     101                            val = entity.getFieldValue(headerField.name)
     102
     103                            // Convert RelTime fields to human readable strings
     104                            field = entity.getField(headerField.name)
     105                            if (field.type == TemplateFieldType.RELTIME)
     106                                val = new RelTime( val as long )
     107
     108                        } catch (NoSuchFieldException e) { /* pass */ }
     109                    }
    101110
    102111                    (val instanceof Number) ? val : val.toString()}]
     
    177186                }
    178187
     188                def moduleError = '', moduleMeasurementData = [:]
     189
     190                if (measurementTokens) {
     191
     192            try {
     193                moduleMeasurementData = requestModuleMeasurements(assay, measurementTokens, samples)
     194            } catch (e) {
     195                moduleMeasurementData = ['error' : ['Module error, module not available or unknown assay'] * samples.size() ]
     196                moduleError =  e.message
     197            }
     198
     199                }
     200
    179201                [       'Subject Data' :            getFieldValues(samples, fieldMap['Subject Data'], 'parentSubject'),
    180202                                'Sampling Event Data' :     getFieldValues(samples, fieldMap['Sampling Event Data'], 'parentEvent'),
    181203                'Sample Data' :             getFieldValues(samples, fieldMap['Sample Data']),
    182204                'Event Group' :             eventFieldMap,
    183 
    184                 // If module is not reachable, only the message 'module not reachable' is given for each sample
    185                 'Module Measurement Data':  moduleCommunicationService.isModuleReachable(assay.module.url) ?
    186                                                 ( measurementTokens ? requestModuleMeasurements(assay, measurementTokens, samples) : [:] ) :
    187                                                 [ "Module error": [ "Module not reachable" ] * samples.size() ]
     205                'Module Measurement Data' : moduleMeasurementData,
     206                'ModuleError' :             moduleError
    188207                                ]
    189208        }
     
    249268
    250269                def path = moduleUrl + "/rest/getMeasurements/query"
    251         def query = "assayToken=$assay.assayUUID"
     270        def query = "assayToken=${assay.giveUUID()}"
    252271        def jsonArray
    253272
     
    274293         * @param assay                         Assay for which the module measurements should be retrieved
    275294         * @param measurementTokens     List with the names of the fields to be retrieved. Format: [ 'measurementName1', 'measurementName2' ]
    276          * @param samples                       Samples for which the module
     295         * @param samples                       Samples to collect measurements for
    277296         * @return
    278297         */
     
    329348                                                measurements << null
    330349                                        }  else {
    331                                                 measurements << ( moduleData[ valueIndex ] == JSONObject.NULL ? "" : moduleData[ valueIndex ].toDouble() );
     350
     351                        def val
     352                        def measurement = moduleData[ valueIndex ]
     353
     354                        if          (measurement == JSONObject.NULL)    val = ""
     355                        else if     (measurement instanceof Number)     val = measurement
     356                        else if     (measurement.isDouble())            val = measurement.toDouble()
     357                        else val =   measurement.toString()
     358                                                measurements << val
    332359                                        }
    333360                                } else {
     
    487514                        // transpose d into row wise data and combine with header rows
    488515                        headers + d.transpose()
    489                 }
     516                } else []
    490517
    491518        }
Note: See TracChangeset for help on using the changeset viewer.