Changeset 2200
- Timestamp:
- Mar 30, 2012, 5:17:57 PM (11 years ago)
- Location:
- trunk/grails-app
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/controllers/api/ApiController.groovy
r2199 r2200 19 19 import dbnp.studycapturing.Study 20 20 import dbnp.studycapturing.Assay 21 import dbnp.authentication.SecUser22 import org.dbnp.gdt.TemplateFieldType23 21 24 22 class ApiController { 25 23 def authenticationService 26 def moduleCommunicationService 27 def ApiService 24 def apiService 28 25 29 26 /** … … 39 36 40 37 // see if we already have a token on file for this device id 41 def token = Token.findByDeviceID(params?.deviceID) 38 String deviceID = (params.containsKey('deviceID')) ? params.deviceID : '' 39 def token = Token.findByDeviceID(deviceID) 42 40 43 41 // generate a new token if we don't have a token on file … … 281 279 } 282 280 } 281 282 def getDataForAssay = { 283 println "api:getDataForAssay: ${params}" 284 285 String deviceID = (params.containsKey('deviceID')) ? params.deviceID : '' 286 String validation = (params.containsKey('validation')) ? params.validation : '' 287 String assayToken = (params.containsKey('assayToken')) ? params.assayToken : '' 288 289 // fetch user and study 290 def user = Token.findByDeviceID(deviceID)?.user 291 def assay = Assay.findByAssayUUID(assayToken) 292 293 // check 294 if (!apiService.validateRequest(deviceID,validation)) { 295 response.sendError(401, 'Unauthorized') 296 } else if (!assay) { 297 response.sendError(400, 'No such assay') 298 } else if (!assay.parent.canRead(user)) { 299 response.sendError(401, 'Unauthorized') 300 } else { 301 // fetch data from model 302 // def measurements = 303 // define sample measurement data matrix 304 305 def matrix = [:] 306 def measurements = apiService.getMeasurements(assay, user) 307 def measurementData = apiService.getMeasurementData(assay, user) 308 309 // iterate through measurementData and build data matrix 310 measurementData.each { data -> 311 if (!matrix.containsKey(data.sampleToken)) matrix[ data.sampleToken ] = [:] 312 matrix[ data.sampleToken ][ data.measurementToken ] = data.value 313 } 314 315 // define result 316 def result = [ 317 'measurements' : apiService.getMeasurements(assay, user), 318 'matrix' : matrix 319 ] 320 321 // set output headers 322 response.status = 200 323 response.contentType = 'application/json;charset=UTF-8' 324 325 if (params.containsKey('callback')) { 326 render "${params.callback}(${result as JSON})" 327 } else { 328 render result as JSON 329 } 330 } 331 } 283 332 } -
trunk/grails-app/domain/dbnp/studycapturing/Assay.groovy
r1873 r2200 1 1 package dbnp.studycapturing 2 2 3 import org.dbnp.gdt.* 3 4 … … 8 9 */ 9 10 class Assay extends TemplateEntity { 10 11 11 // The name of the assay, which should indicate the measurements represented in this assay to the user. 12 String name 12 13 13 14 14 // The dbNP module in which the assay omics data can be found. */ 15 AssayModule module 15 16 16 17 18 17 /** 18 * UUID of this assay 19 */ 19 20 String assayUUID 20 21 21 /** 22 * return the domain fields for this domain class 23 * @return List 24 */ 25 static List<TemplateField> giveDomainFields() { return Assay.domainFields } 26 static List<TemplateField> domainFields = [ 27 new TemplateField( 28 name: 'name', 29 type: TemplateFieldType.STRING, 30 preferredIdentifier: true, 31 comment: 'The name you give here is used to discern this assay within the study (e.g. \'liver transcriptomics\', \'blood lipidomics\')', 32 required: true 33 ), 34 new TemplateField( 35 name: 'module', 36 type: TemplateFieldType.MODULE, 37 comment: 'Select the dbNP module where the actual assay measurement data is stored', 38 required: true 39 ) 40 ] 22 /** 23 * return the domain fields for this domain class 24 * @return List 25 */ 26 static List<TemplateField> giveDomainFields() { return Assay.domainFields } 41 27 42 // An Assay always belongs to one study. 43 static belongsTo = [parent: Study] 28 static List<TemplateField> domainFields = [ 29 new TemplateField( 30 name: 'name', 31 type: TemplateFieldType.STRING, 32 preferredIdentifier: true, 33 comment: 'The name you give here is used to discern this assay within the study (e.g. \'liver transcriptomics\', \'blood lipidomics\')', 34 required: true 35 ), 36 new TemplateField( 37 name: 'module', 38 type: TemplateFieldType.MODULE, 39 comment: 'Select the dbNP module where the actual assay measurement data is stored', 40 required: true 41 ) 42 ] 44 43 45 // An Assay can have many samples on which it is performed, but all samples should be within the 'parent' Study.46 static hasMany = [samples: Sample]44 // An Assay always belongs to one study. 45 static belongsTo = [parent: Study] 47 46 48 static constraints = { 49 assayUUID(nullable:true, unique: true) 50 } 47 // An Assay can have many samples on which it is performed, but all samples should be within the 'parent' Study. 48 static hasMany = [samples: Sample] 49 50 static constraints = { 51 assayUUID(nullable: true, unique: true) 52 } 51 53 52 54 static mapping = { … … 54 56 55 57 // Workaround for bug http://jira.codehaus.org/browse/GRAILS-6754 56 58 templateTextFields type: 'text' 57 59 } 58 60 59 60 61 61 def String toString() { 62 return name; 63 } 62 64 63 65 def getToken() { 64 66 return giveUUID() 65 67 } 66 67 /**68 * Basic equals method to check whether objects are equals, by comparing the ids69 * @param o Object to compare with70 * @return True iff the id of the given Study is equal to the id of this Study71 */72 public boolean equals( Object o ) {73 if( o == null )74 return false;75 68 76 if( !( o instanceof Assay ) ) 77 return false 69 /** 70 * Basic equals method to check whether objects are equals, by comparing the ids 71 * @param o Object to compare with 72 * @return True iff the id of the given Study is equal to the id of this Study 73 */ 74 public boolean equals(Object o) { 75 if (o == null) 76 return false; 78 77 79 Assay s = (Assay) o; 78 if (!(o instanceof Assay)) 79 return false 80 80 81 return this.id == s.id 82 } 83 84 /** 85 * Returns the UUID of this sample and generates one if needed 86 */ 87 public String giveUUID() { 88 if( !this.assayUUID ) { 89 this.assayUUID = UUID.randomUUID().toString(); 90 if( !this.save(flush:true) ) { 91 log.error "Couldn't save assay UUID: " + this.getErrors(); 92 } 93 } 94 95 return this.assayUUID; 96 } 81 Assay s = (Assay) o; 82 83 return this.id == s.id 84 } 85 86 /** 87 * Returns the UUID of this sample and generates one if needed 88 */ 89 public String giveUUID() { 90 if (!this.assayUUID) { 91 this.assayUUID = UUID.randomUUID().toString(); 92 if (!this.save(flush: true)) { 93 log.error "Couldn't save assay UUID: " + this.getErrors(); 94 } 95 } 96 97 return this.assayUUID; 98 } 97 99 } -
trunk/grails-app/services/api/ApiService.groovy
r2199 r2200 23 23 static final String API_SECRET = "th!s_sH0uld^Pr0bab7y_m0v3_t%_th3_uSeR_d0Ma!n_ins7ead!" 24 24 static transactional = false 25 25 26 def moduleCommunicationService 26 27 … … 32 33 */ 33 34 def validateRequest(String deviceID, String validation) { 35 return true 36 34 37 // disable validation check on development and ci 35 38 if (['development', 'ci'].contains(grails.util.GrailsUtil.environment)) { … … 77 80 item['token'] = it.getToken() 78 81 } else if (it.respondsTo('giveUUID')) { 79 // ...while other implement giveUUID82 // ...while others implement giveUUID 80 83 item['token'] = it.giveUUID() 81 84 } else { 82 // and others don't at all... :S 85 // and others don't at all, so far 86 // the consistency... 83 87 item['id'] = it.id 84 88 }
Note: See TracChangeset
for help on using the changeset viewer.