Changeset 406


Ignore:
Timestamp:
May 11, 2010, 3:35:21 PM (7 years ago)
Author:
keesvb
Message:

added study tests, skip study adds when in test environment in bootstrap, refactored TemplateEntity?

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BootStrap.groovy

    r394 r406  
    33import dbnp.data.Ontology
    44import dbnp.data.Term
     5import org.codehaus.groovy.grails.commons.GrailsApplication
    56
    67/**
     
    484485                        */
    485486                        // studies
    486                         println ".adding NuGO PPS3 leptin example study..."
    487                         def exampleStudy = new Study(
    488                                 template: studyTemplate,
    489                                 title:"NuGO PPS3 mouse study leptin module",
    490                                 code:"PPS3_leptin_module",
    491                                 researchQuestion:"Leptin etc.",
    492                                 ecCode:"2007117.c",
    493                                 startDate: Date.parse('yyyy-MM-dd','2007-12-11')
    494                         )
    495                         .with { if (!validate()) { errors.each { println it} } else save()}
    496 
    497                         exampleStudy.setFieldValue( 'Description', "C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet. After 1 week 10 mice that received a low fat diet were given an IP leptin challenge and 10 mice of the low-fat group received placebo injections. The same procedure was performed with mice that were fed the high-fat diet. After 4 weeks the procedure was repeated. In total 80 mice were culled." )
    498                         exampleStudy.save()
    499 
    500                         println ".adding NuGO PPSH example study..."
    501                         def exampleHumanStudy = new Study(
    502                                 template: studyTemplate,
    503                                 title:"Human example template",
    504                                 code:"Human example code",
    505                                 researchQuestion:"Leptin etc.",
    506                                 ecCode:"2007117.c",
    507                                 startDate: Date.parse('yyyy-MM-dd','2007-12-11')
    508                         )
    509                         .with { if (!validate()) { errors.each { println it} } else save()}
    510 
    511                         exampleHumanStudy.setFieldValue( 'Description', "C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet. After 1 week 10 mice that received a low fat diet were given an IP leptin challenge and 10 mice of the low-fat group received placebo injections. The same procedure was performed with mice that were fed the high-fat diet. After 4 weeks the procedure was repeated. In total 80 mice were culled." )
    512                         exampleHumanStudy.save()
    513 
    514                         def evLF = new Event(
    515                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    516                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    517                                 template: dietTreatmentTemplate
    518                         )
    519                         .with { if (!validate()) { errors.each { println it} } else save()}
    520                         evLF.setFieldValue( 'Diet','10% fat (palm oil)' )
    521                         evLF.save(flush:true)
    522 
    523                         def evHF = new Event(
    524                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    525                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    526                                 template: dietTreatmentTemplate
    527                         )
    528                         .setFieldValue( 'Diet','45% fat (palm oil)' )
    529                         .with { if (!validate()) { errors.each { println it} } else save()}
    530 
    531                         def evBV = new Event(
    532                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    533                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    534                                 template: boostTreatmentTemplate
    535                         )
    536                         .setFieldValue( 'Compound','Vehicle' )
    537                         .with { if (!validate()) { errors.each { println it} } else save()}
    538 
    539                         def evBL = new Event(
    540                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    541                                 endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    542                                 template: boostTreatmentTemplate
    543                         )
    544                         .setFieldValue( 'Compound','Leptin' )
    545                         .with { if (!validate()) { errors.each { println it} } else save()}
    546 
    547                         /*
    548                         def evLF4 = new Event(
    549                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    550                                 endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
    551                                 eventDescription: eventDiet,
    552                                 parameterStringValues: ['Diet':'10% fat (palm oil)']
    553                         ).with { if (!validate()) { errors.each { println it} } else save()}
    554 
    555                         def evHF4 = new Event(
    556                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    557                                 endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
    558                                 eventDescription: eventDiet,
    559                                 parameterStringValues: ['Diet':'45% fat (palm oil)']
    560                         ).with { if (!validate()) { errors.each { println it} } else save()}
    561 
    562                         def evBV4 = new Event(
    563                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    564                                 endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
    565                                 eventDescription: eventBoost,
    566                                 parameterStringValues: ['Compound':'Vehicle']
    567                         ).with { if (!validate()) { errors.each { println it} } else save()}
    568 
    569                         def evBL4 = new Event(
    570                                 startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    571                                 endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
    572                                 eventDescription: eventBoost,
    573                                 parameterStringValues: ['Compound':'Leptin']
    574                         ).with { if (!validate()) { errors.each { println it} } else save()}
    575 
    576                         def evS = new SamplingEvent(
    577                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     487                        if (!(grails.util.GrailsUtil.environment == GrailsApplication.ENV_TEST)) {
     488                                println ".adding NuGO PPS3 leptin example study..."
     489                                def exampleStudy = new Study(
     490                                        template: studyTemplate,
     491                                        title:"NuGO PPS3 mouse study leptin module",
     492                                        code:"PPS3_leptin_module",
     493                                        researchQuestion:"Leptin etc.",
     494                                        ecCode:"2007117.c",
     495                                        startDate: Date.parse('yyyy-MM-dd','2007-12-11')
     496                                )
     497                                .with { if (!validate()) { errors.each { println it} } else save()}
     498
     499                                exampleStudy.setFieldValue( 'Description', "C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet. After 1 week 10 mice that received a low fat diet were given an IP leptin challenge and 10 mice of the low-fat group received placebo injections. The same procedure was performed with mice that were fed the high-fat diet. After 4 weeks the procedure was repeated. In total 80 mice were culled." )
     500                                exampleStudy.save()
     501
     502                                println ".adding NuGO PPSH example study..."
     503                                def exampleHumanStudy = new Study(
     504                                        template: studyTemplate,
     505                                        title:"Human example template",
     506                                        code:"Human example code",
     507                                        researchQuestion:"Leptin etc.",
     508                                        ecCode:"2007117.c",
     509                                        startDate: Date.parse('yyyy-MM-dd','2007-12-11')
     510                                )
     511                                .with { if (!validate()) { errors.each { println it} } else save()}
     512
     513                                exampleHumanStudy.setFieldValue( 'Description', "C57Bl/6 mice were fed a high fat (45 en%) or low fat (10 en%) diet after a four week run-in on low fat diet. After 1 week 10 mice that received a low fat diet were given an IP leptin challenge and 10 mice of the low-fat group received placebo injections. The same procedure was performed with mice that were fed the high-fat diet. After 4 weeks the procedure was repeated. In total 80 mice were culled." )
     514                                exampleHumanStudy.save()
     515
     516                                def evLF = new Event(
     517                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    578518                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    579                                         eventDescription: samplingEvent,
    580                                         parameterFloatValues: ['Sample weight':5F]
    581                         ).with { if (!validate()) { errors.each { println it} } else save()}
    582 
    583                         def evS4 = new SamplingEvent(
    584                                         startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
     519                                        template: dietTreatmentTemplate
     520                                )
     521                                .with { if (!validate()) { errors.each { println it} } else save()}
     522                                evLF.setFieldValue( 'Diet','10% fat (palm oil)' )
     523                                evLF.save(flush:true)
     524
     525                                def evHF = new Event(
     526                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     527                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     528                                        template: dietTreatmentTemplate
     529                                )
     530                                .setFieldValue( 'Diet','45% fat (palm oil)' )
     531                                .with { if (!validate()) { errors.each { println it} } else save()}
     532
     533                                def evBV = new Event(
     534                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     535                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     536                                        template: boostTreatmentTemplate
     537                                )
     538                                .setFieldValue( 'Compound','Vehicle' )
     539                                .with { if (!validate()) { errors.each { println it} } else save()}
     540
     541                                def evBL = new Event(
     542                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     543                                        endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     544                                        template: boostTreatmentTemplate
     545                                )
     546                                .setFieldValue( 'Compound','Leptin' )
     547                                .with { if (!validate()) { errors.each { println it} } else save()}
     548
     549                                /*
     550                                def evLF4 = new Event(
     551                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
    585552                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
    586                                         eventDescription: samplingEvent,
    587                                         parameterFloatValues: ['Sample weight':5F]
    588                         ).with { if (!validate()) { errors.each { println it} } else save()}
    589                         */
    590 
    591                         // Add events to study
    592                         exampleStudy
    593                         .addToEvents(evLF)
    594                         .addToEvents(evHF)
    595                         .addToEvents(evBV)
    596                         .addToEvents(evBL)
    597                         /*
    598                         .addToEvents(evLF4)
    599                         .addToEvents(evHF4)
    600                         .addToEvents(evBV4)
    601                         .addToEvents(evBL4)
    602                         .addToSamplingEvents(evS)
    603                         .addToSamplingEvents(evS4)
    604                         */
    605                         .save()
    606 
    607                         def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
    608                         .addToEvents(evLF)
    609                         .addToEvents(evBV)
    610                         .with { if (!validate()) { errors.each { println it} } else save()}
    611 
    612                         def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
    613                         .addToEvents(evLF)
    614                         .addToEvents(evBL)
    615                         .with { if (!validate()) { errors.each { println it} } else save()}
    616 
    617                         def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
    618                         .addToEvents(evHF)
    619                         .addToEvents(evBV)
    620                         .with { if (!validate()) { errors.each { println it} } else save()}
    621 
    622                         def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
    623                         .addToEvents(evHF)
    624                         .addToEvents(evBL)
    625                         .with { if (!validate()) { errors.each { println it} } else save()}
    626 
    627                         /*
    628                         def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
    629                         .addToEvents(evLF4)
    630                         .addToEvents(evBV4)
    631                         .with { if (!validate()) { errors.each { println it} } else save()}
    632 
    633                         def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
    634                         .addToEvents(evLF4)
    635                         .addToEvents(evBL4)
    636                         .with { if (!validate()) { errors.each { println it} } else save()}
    637 
    638                         def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
    639                         .addToEvents(evHF4)
    640                         .addToEvents(evBV4)
    641                         .with { if (!validate()) { errors.each { println it} } else save()}
    642 
    643                         def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
    644                         .addToEvents(evHF4)
    645                         .addToEvents(evBL4)
    646                         .with { if (!validate()) { errors.each { println it} } else save()}
    647                         */
    648 
    649             // Add subjects and samples and compose EventGroups
    650 
    651                         def x=1
    652                         40.times {
    653                                 def currentSubject = new Subject(
    654                                         name: "A" + x++,
    655                                         species: mouseTerm,
    656                                         template: mouseTemplate,
    657                                 )
    658                                 .setFieldValue("Gender", "Male")
    659                                 //.setFieldValue("Genotype", c57bl6Term)
    660                                 .setFieldValue("Age (weeks)", 17)
    661                                 .setFieldValue("Cage", "" + (int)(x/2))
    662                                 .with { if (!validate()) { errors.each { println it} } else save(flush:true)}
    663 
    664                                 exampleStudy.addToSubjects(currentSubject)
    665                                 .with { if (!validate()) { errors.each { println it} } else save()}
    666 
    667                                 // Add subject to appropriate EventGroup
     553                                        eventDescription: eventDiet,
     554                                        parameterStringValues: ['Diet':'10% fat (palm oil)']
     555                                ).with { if (!validate()) { errors.each { println it} } else save()}
     556
     557                                def evHF4 = new Event(
     558                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     559                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
     560                                        eventDescription: eventDiet,
     561                                        parameterStringValues: ['Diet':'45% fat (palm oil)']
     562                                ).with { if (!validate()) { errors.each { println it} } else save()}
     563
     564                                def evBV4 = new Event(
     565                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     566                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
     567                                        eventDescription: eventBoost,
     568                                        parameterStringValues: ['Compound':'Vehicle']
     569                                ).with { if (!validate()) { errors.each { println it} } else save()}
     570
     571                                def evBL4 = new Event(
     572                                        startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     573                                        endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
     574                                        eventDescription: eventBoost,
     575                                        parameterStringValues: ['Compound':'Leptin']
     576                                ).with { if (!validate()) { errors.each { println it} } else save()}
     577
     578                                def evS = new SamplingEvent(
     579                                                startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     580                                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     581                                                eventDescription: samplingEvent,
     582                                                parameterFloatValues: ['Sample weight':5F]
     583                                ).with { if (!validate()) { errors.each { println it} } else save()}
     584
     585                                def evS4 = new SamplingEvent(
     586                                                startTime: Date.parse('yyyy-MM-dd','2008-02-04'),
     587                                                endTime: Date.parse('yyyy-MM-dd','2008-02-04'),
     588                                                eventDescription: samplingEvent,
     589                                                parameterFloatValues: ['Sample weight':5F]
     590                                ).with { if (!validate()) { errors.each { println it} } else save()}
     591                                */
     592
     593                                // Add events to study
     594                                exampleStudy
     595                                .addToEvents(evLF)
     596                                .addToEvents(evHF)
     597                                .addToEvents(evBV)
     598                                .addToEvents(evBL)
    668599                                /*
    669                                 if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
    670                                 else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
    671                                 else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
    672                                 else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
    673                                 else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
    674                                 else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
    675                                 else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
    676                                 else             { LFBV1.addToSubjects(currentSubject).save() }
    677                                 */
    678 
    679                                 if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
    680                                 else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
    681                                 else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
    682                                 else             { LFBV1.addToSubjects(currentSubject).save() }
    683 
    684                         }
    685 
    686                         // Add EventGroups to study
    687                         exampleStudy
    688                         .addToEventGroups(LFBV1)
    689                         .addToEventGroups(LFBL1)
    690                         .addToEventGroups(HFBV1)
    691                         .addToEventGroups(HFBL1)
    692                         //.addToEventGroups(LFBV4)
    693                         //.addToEventGroups(LFBL4)
    694                         //.addToEventGroups(HFBV4)
    695                         //.addToEventGroups(HFBL4)
    696 
    697                         // Add persons to study
    698                         def studyperson1 = new StudyPerson( person: person1, role: role1 ).save();
    699                         def studyperson2 = new StudyPerson( person: person2, role: role2 ).save();
    700 
    701                         exampleStudy
    702                         .addToPersons( studyperson1 )
    703                         .addToPersons( studyperson2 )
    704                         .save()
    705                        
    706                         /*
    707                         println 'Adding PPSH study'
    708 
    709                         def humanStudy = new Study(
    710                                 template: studyTemplate,
    711                                 title:"NuGO PPS human study",
    712                                 code:"PPSH",
    713                                 researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
    714                                 description:"Human study",
    715                                 ecCode:"unknown",
    716                                 startDate: Date.parse('yyyy-MM-dd','2009-01-01')
    717                         ).with { if (!validate()) { errors.each { println it} } else save()}
    718 
    719                         def fastingEvent = new Event(
    720                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    721                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    722                                         eventDescription: fastingTreatment,
    723                                         parameterStringValues: ['Fasting period':'8h']);
    724 
    725                         def bloodSamplingEvent = new SamplingEvent(
    726                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    727                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    728                                         eventDescription: bloodSamplingEventDescription,
    729                                         parameterFloatValues: ['Sample volume':4.5F]);
    730 
    731                         def rootGroup = new EventGroup(name: 'Root group');
    732                         rootGroup.addToEvents fastingEvent
    733                         rootGroup.addToEvents bloodSamplingEvent
    734                         rootGroup.save()
    735 
    736             def y = 1
    737             11.times {
    738               def currentSubject = new Subject(
    739                       name: "" + y++,
    740                       species: humanTerm,
    741                       template: humanTemplate).setFieldValue("Gender", (boolean) (x / 2) ? "Male" : "Female").setFieldValue("DOB", new java.text.SimpleDateFormat("dd-mm-yy").parse("01-02-19" + (10 + (int) (Math.random() * 80)))).setFieldValue("Age (years)", 30).setFieldValue("Height", Math.random() * 2F).setFieldValue("Weight (kg)", Math.random() * 150F).setFieldValue("BMI", 20 + Math.random() * 10F).with { if (!validate()) { errors.each { println it} } else save()}
    742 
    743               rootGroup.addToSubjects currentSubject
    744               rootGroup.save()
    745 
    746               def currentSample = new Sample(
    747                       name: currentSubject.name + '_B',
    748                       material: bloodTerm,
    749                       parentSubject: currentSubject,
    750                       parentEvent: bloodSamplingEvent);
    751 
    752 
    753               humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
    754           }
    755 
    756           humanStudy.addToEvents(fastingEvent)
    757           humanStudy.addToSamplingEvents(bloodSamplingEvent)
    758           humanStudy.addToEventGroups rootGroup
    759           humanStudy.save()
    760 
    761                         // Add clinical data
    762 
    763                         def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
    764                                 name: 'Lipid profile',
    765                                 approved: true
    766                         ).with { if (!validate()) { errors.each { println it} } else save()}
    767 
    768                         def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
    769                                 name: 'LDL',
    770                                 unit: 'mg/dL',
    771                                 type: dbnp.data.FeatureType.QUANTITATIVE,
    772                                 referenceValues: '100 mg/dL',
    773                                 detectableLimit: 250,
    774                                 isDrug: false, isIntake: true, inSerum: true
    775                         ).with { if (!validate()) { errors.each { println it} } else save()}
    776 
    777                         def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
    778                                 name: 'HDL',
    779                                 unit: 'mg/dL',
    780                                 type: dbnp.data.FeatureType.QUANTITATIVE,
    781                                 referenceValues: '50 mg/dL',
    782                                 detectableLimit: 100,
    783                                 isDrug: false, isIntake: true, inSerum: true
    784                         ).with { if (!validate()) { errors.each { println it} } else save()}
    785 
    786                         lipidAssay.addToMeasurements ldlMeasurement
    787                         lipidAssay.addToMeasurements hdlMeasurement
    788 
    789                         def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
    790                                 assay: lipidAssay
    791                         ).with { if (!validate()) { errors.each { println it} } else save()}
    792 
    793                         humanStudy.samples*.each {
    794                                 new dbnp.clinicaldata.ClinicalFloatData(
    795                                         assay: lipidAssayInstance,
    796                                         measurement: ldlMeasurement,
    797                                         sample: it.name,
    798                                         value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
    799                                 ).with { if (!validate()) { errors.each { println it} } else save()}
    800 
    801                                 new dbnp.clinicaldata.ClinicalFloatData(
    802                                         assay: lipidAssayInstance,
    803                                         measurement: hdlMeasurement,
    804                                         sample: it.name,
    805                                         value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
    806                                 ).with { if (!validate()) { errors.each { println it} } else save()}
     600                                .addToEvents(evLF4)
     601                                .addToEvents(evHF4)
     602                                .addToEvents(evBV4)
     603                                .addToEvents(evBL4)
     604                                .addToSamplingEvents(evS)
     605                                .addToSamplingEvents(evS4)
     606                                */
     607                                .save()
     608
     609                                def LFBV1 = new EventGroup(name:"10% fat + vehicle for 1 week")
     610                                .addToEvents(evLF)
     611                                .addToEvents(evBV)
     612                                .with { if (!validate()) { errors.each { println it} } else save()}
     613
     614                                def LFBL1 = new EventGroup(name:"10% fat + leptin for 1 week")
     615                                .addToEvents(evLF)
     616                                .addToEvents(evBL)
     617                                .with { if (!validate()) { errors.each { println it} } else save()}
     618
     619                                def HFBV1 = new EventGroup(name:"45% fat + vehicle for 1 week")
     620                                .addToEvents(evHF)
     621                                .addToEvents(evBV)
     622                                .with { if (!validate()) { errors.each { println it} } else save()}
     623
     624                                def HFBL1 = new EventGroup(name:"45% fat + leptin for 1 week")
     625                                .addToEvents(evHF)
     626                                .addToEvents(evBL)
     627                                .with { if (!validate()) { errors.each { println it} } else save()}
     628
     629                                /*
     630                                def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks")
     631                                .addToEvents(evLF4)
     632                                .addToEvents(evBV4)
     633                                .with { if (!validate()) { errors.each { println it} } else save()}
     634
     635                                def LFBL4 = new EventGroup(name:"10% fat + leptin for 4 weeks")
     636                                .addToEvents(evLF4)
     637                                .addToEvents(evBL4)
     638                                .with { if (!validate()) { errors.each { println it} } else save()}
     639
     640                                def HFBV4 = new EventGroup(name:"45% fat + vehicle for 4 weeks")
     641                                .addToEvents(evHF4)
     642                                .addToEvents(evBV4)
     643                                .with { if (!validate()) { errors.each { println it} } else save()}
     644
     645                                def HFBL4 = new EventGroup(name:"45% fat + leptin for 4 weeks")
     646                                .addToEvents(evHF4)
     647                                .addToEvents(evBL4)
     648                                .with { if (!validate()) { errors.each { println it} } else save()}
     649                                */
     650
     651                    // Add subjects and samples and compose EventGroups
     652
     653                                def x=1
     654                                40.times {
     655                                        def currentSubject = new Subject(
     656                                                name: "A" + x++,
     657                                                species: mouseTerm,
     658                                                template: mouseTemplate,
     659                                        )
     660                                        .setFieldValue("Gender", "Male")
     661                                        //.setFieldValue("Genotype", c57bl6Term)
     662                                        .setFieldValue("Age (weeks)", 17)
     663                                        .setFieldValue("Cage", "" + (int)(x/2))
     664                                        .with { if (!validate()) { errors.each { println it} } else save(flush:true)}
     665
     666                                        exampleStudy.addToSubjects(currentSubject)
     667                                        .with { if (!validate()) { errors.each { println it} } else save()}
     668
     669                                        // Add subject to appropriate EventGroup
     670                                        /*
     671                                        if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
     672                                        else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
     673                                        else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
     674                                        else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
     675                                        else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
     676                                        else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
     677                                        else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
     678                                        else             { LFBV1.addToSubjects(currentSubject).save() }
     679                                        */
     680
     681                                        if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
     682                                        else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
     683                                        else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
     684                                        else             { LFBV1.addToSubjects(currentSubject).save() }
     685
     686                                }
     687
     688                                // Add EventGroups to study
     689                                exampleStudy
     690                                .addToEventGroups(LFBV1)
     691                                .addToEventGroups(LFBL1)
     692                                .addToEventGroups(HFBV1)
     693                                .addToEventGroups(HFBL1)
     694                                //.addToEventGroups(LFBV4)
     695                                //.addToEventGroups(LFBL4)
     696                                //.addToEventGroups(HFBV4)
     697                                //.addToEventGroups(HFBL4)
     698
     699                                // Add persons to study
     700                                def studyperson1 = new StudyPerson( person: person1, role: role1 ).save();
     701                                def studyperson2 = new StudyPerson( person: person2, role: role2 ).save();
     702
     703                                exampleStudy
     704                                .addToPersons( studyperson1 )
     705                                .addToPersons( studyperson2 )
     706                                .save()
     707
     708
     709                                /*
     710                                println 'Adding PPSH study'
     711
     712                                def humanStudy = new Study(
     713                                        template: studyTemplate,
     714                                        title:"NuGO PPS human study",
     715                                        code:"PPSH",
     716                                        researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
     717                                        description:"Human study",
     718                                        ecCode:"unknown",
     719                                        startDate: Date.parse('yyyy-MM-dd','2009-01-01')
     720                                ).with { if (!validate()) { errors.each { println it} } else save()}
     721
     722                                def fastingEvent = new Event(
     723                                                startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     724                                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     725                                                eventDescription: fastingTreatment,
     726                                                parameterStringValues: ['Fasting period':'8h']);
     727
     728                                def bloodSamplingEvent = new SamplingEvent(
     729                                                startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     730                                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
     731                                                eventDescription: bloodSamplingEventDescription,
     732                                                parameterFloatValues: ['Sample volume':4.5F]);
     733
     734                                def rootGroup = new EventGroup(name: 'Root group');
     735                                rootGroup.addToEvents fastingEvent
     736                                rootGroup.addToEvents bloodSamplingEvent
     737                                rootGroup.save()
     738
     739                    def y = 1
     740                    11.times {
     741                      def currentSubject = new Subject(
     742                              name: "" + y++,
     743                              species: humanTerm,
     744                              template: humanTemplate).setFieldValue("Gender", (boolean) (x / 2) ? "Male" : "Female").setFieldValue("DOB", new java.text.SimpleDateFormat("dd-mm-yy").parse("01-02-19" + (10 + (int) (Math.random() * 80)))).setFieldValue("Age (years)", 30).setFieldValue("Height", Math.random() * 2F).setFieldValue("Weight (kg)", Math.random() * 150F).setFieldValue("BMI", 20 + Math.random() * 10F).with { if (!validate()) { errors.each { println it} } else save()}
     745
     746                      rootGroup.addToSubjects currentSubject
     747                      rootGroup.save()
     748
     749                      def currentSample = new Sample(
     750                              name: currentSubject.name + '_B',
     751                              material: bloodTerm,
     752                              parentSubject: currentSubject,
     753                              parentEvent: bloodSamplingEvent);
     754
     755
     756                      humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
     757                  }
     758
     759                  humanStudy.addToEvents(fastingEvent)
     760                  humanStudy.addToSamplingEvents(bloodSamplingEvent)
     761                  humanStudy.addToEventGroups rootGroup
     762                  humanStudy.save()
     763
     764                                // Add clinical data
     765
     766                                def lipidAssay = new dbnp.clinicaldata.ClinicalAssay(
     767                                        name: 'Lipid profile',
     768                                        approved: true
     769                                ).with { if (!validate()) { errors.each { println it} } else save()}
     770
     771                                def ldlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
     772                                        name: 'LDL',
     773                                        unit: 'mg/dL',
     774                                        type: dbnp.data.FeatureType.QUANTITATIVE,
     775                                        referenceValues: '100 mg/dL',
     776                                        detectableLimit: 250,
     777                                        isDrug: false, isIntake: true, inSerum: true
     778                                ).with { if (!validate()) { errors.each { println it} } else save()}
     779
     780                                def hdlMeasurement = new dbnp.clinicaldata.ClinicalMeasurement(
     781                                        name: 'HDL',
     782                                        unit: 'mg/dL',
     783                                        type: dbnp.data.FeatureType.QUANTITATIVE,
     784                                        referenceValues: '50 mg/dL',
     785                                        detectableLimit: 100,
     786                                        isDrug: false, isIntake: true, inSerum: true
     787                                ).with { if (!validate()) { errors.each { println it} } else save()}
     788
     789                                lipidAssay.addToMeasurements ldlMeasurement
     790                                lipidAssay.addToMeasurements hdlMeasurement
     791
     792                                def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
     793                                        assay: lipidAssay
     794                                ).with { if (!validate()) { errors.each { println it} } else save()}
     795
     796                                humanStudy.samples*.each {
     797                                        new dbnp.clinicaldata.ClinicalFloatData(
     798                                                assay: lipidAssayInstance,
     799                                                measurement: ldlMeasurement,
     800                                                sample: it.name,
     801                                                value: Math.round(Math.random()*ldlMeasurement.detectableLimit)
     802                                        ).with { if (!validate()) { errors.each { println it} } else save()}
     803
     804                                        new dbnp.clinicaldata.ClinicalFloatData(
     805                                                assay: lipidAssayInstance,
     806                                                measurement: hdlMeasurement,
     807                                                sample: it.name,
     808                                                value: Math.round(Math.random()*hdlMeasurement.detectableLimit)
     809                                        ).with { if (!validate()) { errors.each { println it} } else save()}
     810                                }
     811
     812                                // Add assay to study capture module
     813
     814                                def clinicalModule = new AssayModule(
     815                                        name: 'Clinical data',
     816                                        type: AssayType.CLINICAL_DATA,
     817                                        platform: 'clinical measurements',
     818                                        url: 'http://localhost:8080/gscf'
     819                                ).with { if (!validate()) { errors.each { println it} } else save()}
     820
     821                                def lipidAssayRef = new Assay(
     822                                        name: 'Lipid profiling',
     823                                        module: clinicalModule,
     824                                        externalAssayId: lipidAssayInstance.id
     825                                ).with { if (!validate()) { errors.each { println it} } else save()}
     826
     827                                humanStudy.samples*.each {
     828                                        lipidAssayRef.addToSamples(it)
     829                                }
     830                                lipidAssayRef.save()
     831
     832                                humanStudy.addToAssays(lipidAssayRef);
     833                                humanStudy.save()
     834                                */
    807835                        }
    808 
    809                         // Add assay to study capture module
    810 
    811                         def clinicalModule = new AssayModule(
    812                                 name: 'Clinical data',
    813                                 type: AssayType.CLINICAL_DATA,
    814                                 platform: 'clinical measurements',
    815                                 url: 'http://localhost:8080/gscf'
    816                         ).with { if (!validate()) { errors.each { println it} } else save()}
    817 
    818                         def lipidAssayRef = new Assay(
    819                                 name: 'Lipid profiling',
    820                                 module: clinicalModule,
    821                                 externalAssayId: lipidAssayInstance.id
    822                         ).with { if (!validate()) { errors.each { println it} } else save()}
    823 
    824                         humanStudy.samples*.each {
    825                                 lipidAssayRef.addToSamples(it)
    826                         }
    827                         lipidAssayRef.save()
    828 
    829                         humanStudy.addToAssays(lipidAssayRef);
    830                         humanStudy.save()
    831 */
    832836                }
    833837        }
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy

    r397 r406  
    252252
    253253        /**
     254         * Find a field domain or template field by its name and return its description
     255         * @param fieldsCollection the set of fields to search in, usually something like this.giveFields()
     256         * @param fieldName The name of the domain or template field
     257         * @return the TemplateField description of the field
     258         * @throws NoSuchFieldException If the field is not found or the field type is not supported
     259         */
     260        private static def getField(Collection fieldsCollection, String fieldName) {
     261                // escape the fieldName for easy matching
     262                // (such escaped names are commonly used
     263                // in the HTTP forms of this application)
     264                String escapedLowerCaseFieldName = fieldName.toLowerCase().replaceAll("([^a-z0-9])","_")
     265
     266                // Find the target template field, if not found, throw an error
     267                def field = fieldsCollection.find { it.name.toLowerCase().replaceAll("([^a-z0-9])", "_") == escapedLowerCaseFieldName }
     268
     269                if (field) {
     270                        return field
     271                }
     272                else {
     273                        throw new NoSuchFieldException("Field ${fieldName} not recognized")
     274                }
     275        }
     276
     277        /**
    254278         * Find a domain or template field by its name and return its value for this entity
    255279         * @param fieldName The name of the domain or template field
     
    258282         */
    259283        def getFieldValue(String fieldName) {
    260                 // escape the fieldName for easy matching
    261                 // (such escaped names are commonly used
    262                 // in the HTTP forms of this application)
    263                 def escapedLowerCaseFieldName = fieldName.toLowerCase().replaceAll("([^a-z0-9])","_")
    264 
    265                 // Find the target template field, if not found, throw an error
    266                 TemplateField field = this.giveFields().find { it.name.toLowerCase().replaceAll("([^a-z0-9])", "_") == escapedLowerCaseFieldName }
    267 
    268                 // field found?
    269                 if (field == null) {
    270                         // no such field
    271                         throw new NoSuchFieldException("Field ${fieldName} not recognized")
    272                 } else {
     284                TemplateField field = getField(this.giveFields(),fieldName)
     285                if (isDomainField(field)) {
     286                        return this[field.name]
     287                }
     288                else {
    273289                        return getStore(field.type)[fieldName]
    274290                }
     
    280296         * @return true if the given field exists and false otherwise
    281297         */
    282         def fieldExists(String fieldName) {
    283                 // escape the fieldName for easy matching
    284                 // (such escaped names are commonly used
    285                 // in the HTTP forms of this application)
    286                 def escapedLowerCaseFieldName = fieldName.toLowerCase().replaceAll("([^a-z0-9])","_")
    287 
    288                 // check if this domain class has got this property
    289                 if (this.properties.containsKey(fieldName)) {
    290                         // domain class contains this property
     298        boolean fieldExists(String fieldName) {
     299                // getField should throw a NoSuchFieldException if the field does not exist
     300                try {
     301                        TemplateField field = getField(this.giveFields(),fieldName)
     302                }
     303                // so return false in that case
     304                catch(NoSuchFieldException e) {
     305                        return false
     306                }
     307                // otherwise, return true (but double check if field really is not null)
     308                if (field) {
    291309                        return true
    292                 } else if (template == null) {
    293                         // no, and we haven't got a template set either
     310                }
     311                else {
    294312                        return false
    295                 } else {
    296                         // the domain class doesn't have this property but
    297                         // it has a template defined. Check the template
    298                         // fields to see if such a template field exists
    299                         TemplateField field = this.template.fields.find { it.name.toLowerCase().replaceAll("([^a-z0-9])","_") == escapedLowerCaseFieldName }
    300 
    301                         // does the template field exist?
    302                         if (field == null) {
    303                                 // no such template field
    304                                 return false
    305                         } else {
    306                                 // found!
    307                                 return true
    308                         }
    309313                }
    310314        }
     
    316320         */
    317321        def setFieldValue(String fieldName, value) {
    318                 // escape the fieldName for easy matching
    319                 // (such escaped names are commonly used
    320                 // in the HTTP forms of this application)
    321                 def escapedLowerCaseFieldName = fieldName.toLowerCase().replaceAll("([^a-z0-9])","_")
    322 
    323                 // Find the target template field, if not found, throw an error
    324                 TemplateField field = this.giveFields().find { it.name.toLowerCase().replaceAll("([^a-z0-9])", "_") == escapedLowerCaseFieldName }
    325 
    326                 // field found?
    327                 if (field == null) {
    328                         // no such field
    329                         throw new NoSuchFieldException("Field ${fieldName} not found in class template fields")
    330                 } else {
    331                         // Set the value of the found template field
    332                         // Convenience setter for template string list fields: find TemplateFieldListItem by name
    333                         if (field.type == TemplateFieldType.STRINGLIST && value && value.class == String) {
    334                                 // Kees insensitive pattern matching ;)
    335                                 def escapedLowerCaseValue = value.toLowerCase().replaceAll("([^a-z0-9])", "_")
    336                                 value = field.listEntries.find {
    337                                         it.name.toLowerCase().replaceAll("([^a-z0-9])", "_") == escapedLowerCaseValue
    338                                 }
    339                         }
    340 
    341                         // Convenience setter for dates: handle string values for date fields
    342                         if (field.type == TemplateFieldType.DATE && value && value.class == String) {
    343                                 // a string was given, attempt to transform it into a date instance
    344                                 // and -for now- assume the dd/mm/yyyy format
    345                                 def dateMatch = value =~ /^([0-9]{1,})([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})((([^0-9]{1,})([0-9]{1,2}):([0-9]{1,2})){0,})/
    346                                 if (dateMatch.matches()) {
    347                                         // create limited 'autosensing' datetime parser
    348                                         // assume dd mm yyyy  or dd mm yy
    349                                         def parser = 'd' + dateMatch[0][2] + 'M' + dateMatch[0][4] + (((dateMatch[0][5] as int) > 999) ? 'yyyy' : 'yy')
    350 
    351                                         // add time as well?
    352                                         if (dateMatch[0][7] != null) {
    353                                                 parser += dateMatch[0][6] + 'HH:mm'
    354                                         }
    355 
    356                                         value = new Date().parse(parser, value)
    357                                 }
    358                         }
    359 
    360                         // Set the field value
     322
     323                TemplateField field = getField(this.giveFields(),fieldName)
     324
     325                // Convenience setter for template string list fields: find TemplateFieldListItem by name
     326                if (field.type == TemplateFieldType.STRINGLIST && value && value.class == String) {
     327                        value = getField(field.listEntries,value).name
     328                        println value
     329                }
     330
     331                // Convenience setter for dates: handle string values for date fields
     332                if (field.type == TemplateFieldType.DATE && value && value.class == String) {
     333                        // a string was given, attempt to transform it into a date instance
     334                        // and -for now- assume the dd/mm/yyyy format
     335                        def dateMatch = value =~ /^([0-9]{1,})([^0-9]{1,})([0-9]{1,})([^0-9]{1,})([0-9]{1,})((([^0-9]{1,})([0-9]{1,2}):([0-9]{1,2})){0,})/
     336                        if (dateMatch.matches()) {
     337                                // create limited 'autosensing' datetime parser
     338                                // assume dd mm yyyy  or dd mm yy
     339                                def parser = 'd' + dateMatch[0][2] + 'M' + dateMatch[0][4] + (((dateMatch[0][5] as int) > 999) ? 'yyyy' : 'yy')
     340
     341                                // add time as well?
     342                                if (dateMatch[0][7] != null) {
     343                                        parser += dateMatch[0][6] + 'HH:mm'
     344                                }
     345
     346                                value = new Date().parse(parser, value)
     347                        }
     348                }
     349
     350                // Set the field value
     351                if (isDomainField(field)) {
     352                        this[field.name] = value
     353                }
     354                else {
     355                        // Caution: this assumes that all template...Field Maps are already initialized (as is done now above as [:])
     356                        // If that is ever changed, the results are pretty much unpredictable (random Java object pointers?)!
    361357                        def store = getStore(field.type)
    362358                        if (!value && store[fieldName]) {
     
    372368                        }
    373369                }
     370
    374371                return this
     372        }
     373
     374        boolean isDomainField(TemplateField field) {
     375                return this.giveDomainFields()*.name.contains(field.name)
     376        }
     377
     378        boolean isDomainField(String fieldName) {
     379                return this.giveDomainFields()*.name.contains(fieldName)
    375380        }
    376381
  • trunk/test/integration/gscf/SubjectTests.groovy

    r402 r406  
    2626        final String testSubjectBMITemplateFieldName = "BMI"
    2727        final double testSubjectBMI = 25.32
     28        final String testSubjectGenderTemplateFieldName = "Gender"
     29        final String testSubjectGender = "female"
     30        final String testSubjectGenderDBName = "Female"
    2831
    2932        /**
     
    98101                def domainFields = subject.giveDomainFields()
    99102                assert domainFields
    100                 println domainFields[0]
    101103                assert domainFields[0].name == 'name'
    102104                assert domainFields[1].name == 'species'
     105
     106                // Also, make sure isDomainField() says the same
     107                assert subject.isDomainField(domainFields[0])
     108                assert subject.isDomainField(domainFields[1])
     109                assert subject.isDomainField('name')
     110                assert subject.isDomainField('species')
     111                // To be sure it just doesn't always return true :-)
     112                assert !subject.isDomainField('123~!name')
     113                assert !subject.isDomainField(testSubjectBMITemplateFieldName)
    103114
    104115                // Get the ontologies from species and make sure this is 1 ontology with NCBO ID 1132
     
    123134                // Assign species, subject should now validate and save
    124135                subject.setFieldValue('species',humanTerm)
     136                if (!subject.validate()) {
     137                        subject.errors.each { println it}
     138                }
    125139                assert subject.validate()
    126140                assert subject.save(flush:true)
     
    139153                def subjectDB = Subject.findByName(testSubjectName)
    140154                assert subjectDB
    141 
    142155                assert subjectDB.getFieldValue('name').equals(testSubjectName)
    143156                assert subjectDB.getFieldValue('species') == Term.findByName(testSubjectSpeciesTerm)
     
    192205        }
    193206
     207        void testSetGender() {
     208                def subject = Subject.findByName(testSubjectName)
     209                assert subject
     210
     211                // Set gender
     212                subject.setFieldValue(testSubjectGenderTemplateFieldName,testSubjectGender)
     213
     214                // Test if gender is set properly (to its canonical database name) via getFieldValue()
     215                assert subject.getFieldValue(testSubjectGenderTemplateFieldName).name == testSubjectGenderDBName
     216
     217                // Try to save object
     218                assert subject.validate()
     219                assert subject.save(flush: true)
     220
     221                // Try to retrieve the subject and make sure the Gender was stored properly
     222                def subjectDB = Subject.findByName(testSubjectName)
     223                assert subjectDB
     224                assert subjectDB.getFieldValue(testSubjectGenderTemplateFieldName).name == testSubjectGenderDBName
     225        }
     226
    194227        protected void tearDown() {
    195228                super.tearDown()
Note: See TracChangeset for help on using the changeset viewer.