Changeset 386


Ignore:
Timestamp:
Apr 27, 2010, 3:53:06 PM (13 years ago)
Author:
roberth
Message:

Updated the template entities to be able to return domain fields, template fields and both.
Rolled back the change of Kees in the Event object, so the startTime and endTime fields returned.
Also updated the studies list with a new layout.

Location:
trunk
Files:
2 added
9 edited

Legend:

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

    r384 r386  
    4747                                accession: '9606'
    4848                        ).with { if (!validate()) { errors.each { println it} } else save()}
     49
     50                        def bloodTerm = new Term(
     51                                name: 'Portion of blood',
     52                                ontology: speciesOntology,
     53                                accession: '9670'
     54                        ).with { if (!validate()) { errors.each { println it} } else save()}
     55
    4956
    5057                        // Create a few persons, roles and Affiliations
     
    135142                        ).with { if (!validate()) { errors.each { println it} } else save()}
    136143                       
    137                         def bloodTerm = new Term(
    138                                 name: 'Portion of blood',
    139                                 ontology: humanBodyOntology,
    140                                 accession: '9670'
    141                         ).with { if (!validate()) { errors.each { println it} } else save()}
    142144
    143145                        def c57bl6Term = new Term(
     
    441443                                name: 'Compound', type: TemplateFieldType.STRING,
    442444                                listEntries: [new TemplateFieldListItem(name:'Vehicle'),new TemplateFieldListItem(name: 'Leptin')]))
     445                        .with { if (!validate()) { errors.each { println it} } else save()}
     446
     447                        def bloodSamplingEventTemplate = new Template(
     448                                name: 'Blood extraction', entity: dbnp.studycapturing.Event)
     449                        .addToFields(sampleDescriptionField)
     450                        .addToFields(new TemplateField(
     451                                name: 'Sample volume', type: TemplateFieldType.FLOAT))
     452                        .with { if (!validate()) { errors.each { println it} } else save()}
     453
     454                        def fastingTreatmentTemplate = new Template(
     455                                name: 'Fasting treatment', entity: dbnp.studycapturing.Event)
     456                        .addToFields(sampleDescriptionField)
     457                        .addToFields(new TemplateField(
     458                                name: 'Fasting period', type: TemplateFieldType.STRING))
    443459                        .with { if (!validate()) { errors.each { println it} } else save()}
    444460
     
    500516                        exampleStudy.save()
    501517
     518
     519                        /* Test output of fields things */
     520                        println "-----------------------------"
     521                        print "Diet domain fields: "
     522                        println exampleStudy.giveDomainFields().join( ", " )
     523
     524                        print "Diet template fields: "
     525                        println exampleStudy.giveTemplateFields().join( ", " )
     526
     527                        print "Diet all fields: "
     528                        println exampleStudy.giveFields().join( ", " )
     529
     530                        println "-----------------------------"
     531
    502532                        println ".adding NuGO PPSH example study..."
    503533                        def exampleHumanStudy = new Study(
     
    515545
    516546                        def evLF = new Event(
    517                                 template: dietTreatmentTemplate
     547                                template: dietTreatmentTemplate,
     548                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     549                                endTime: Date.parse('yyyy-MM-dd','2008-01-14')
    518550                        )
    519551                        .with { if (!validate()) { errors.each { println it} } else save()}
    520552
    521                         evLF.setStartTime(Date.parse('yyyy-MM-dd','2008-01-07'))
    522                         evLF.setEndTime(Date.parse('yyyy-MM-dd','2008-01-14'))
    523 
    524553                        evLF.setFieldValue( 'Diet','10% fat (palm oil)' )
    525554                        evLF.save(flush:true)
     
    529558
    530559                        def evHF = new Event(
    531                                 template: dietTreatmentTemplate
     560                                template: dietTreatmentTemplate,
     561                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     562                                endTime: Date.parse('yyyy-MM-dd','2008-01-14')
    532563                        )
    533                         .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
    534                         .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
    535564                        .setFieldValue( 'Diet','45% fat (palm oil)' )
    536565                        .with { if (!validate()) { errors.each { println it} } else save()}
    537566
    538567                        def evBV = new Event(
    539                                 template: boostTreatmentTemplate
     568                                template: boostTreatmentTemplate,
     569                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     570                                endTime: Date.parse('yyyy-MM-dd','2008-01-14')
    540571                        )
    541                         .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
    542                         .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
    543572                        .setFieldValue( 'Compound','Vehicle' )
    544573                        .with { if (!validate()) { errors.each { println it} } else save()}
    545574
    546575                        def evBL = new Event(
    547                                 template: boostTreatmentTemplate
    548                         )
    549                         .setStartTime( Date.parse('yyyy-MM-dd','2008-01-07'))
    550                         .setEndTime( Date.parse('yyyy-MM-dd','2008-01-14'))
     576                                template: boostTreatmentTemplate,
     577                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'),
     578                                endTime: Date.parse('yyyy-MM-dd','2008-01-14')
     579                        )
    551580                        .setFieldValue( 'Compound','Leptin' )
    552581                        .with { if (!validate()) { errors.each { println it} } else save()}
     
    657686
    658687                        def x=1
    659                         40.times {
     688                        12.times {
    660689                                def currentSubject = new Subject(
    661690                                        name: "A" + x++,
     
    684713                                */
    685714
    686                                 if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
     715                                if (x > 9)      { HFBL1.addToSubjects(currentSubject).save() }
     716                                else if (x > 6) { HFBV1.addToSubjects(currentSubject).save() }
     717                                else if (x > 3)  { LFBL1.addToSubjects(currentSubject).save() }
     718                                else             { LFBV1.addToSubjects(currentSubject).save() }
     719
     720                        }
     721
     722                        // Also add some human subjects
     723                        2.times {
     724                                def currentSubject = new Subject(
     725                                        name: "H" + x++,
     726                                        species: humanTerm,
     727                                        template: humanTemplate,
     728                                )
     729                                .setFieldValue("Gender", "Male")
     730                                //.setFieldValue("Genotype", c57bl6Term)
     731                                .setFieldValue("Age (years)", 27)
     732                                .setFieldValue("Height", 1.5)
     733                                .with { if (!validate()) { errors.each { println it} } else save(flush:true)}
     734
     735                                exampleStudy.addToSubjects(currentSubject)
     736                                .with { if (!validate()) { errors.each { println it} } else save()}
     737
     738                                // Add subject to appropriate EventGroup
     739                                /*
     740                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() }
     741                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() }
     742                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() }
     743                                else if (x > 40) { LFBV4.addToSubjects(currentSubject).save() }
     744                                else if (x > 30) { HFBL1.addToSubjects(currentSubject).save() }
    687745                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() }
    688746                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() }
    689747                                else             { LFBV1.addToSubjects(currentSubject).save() }
     748                                */
     749
     750                                if (x == 0)      { HFBL1.addToSubjects(currentSubject).save() }
     751                                else             { LFBV1.addToSubjects(currentSubject).save() }
    690752
    691753                        }
     754
    692755
    693756                        // Add EventGroups to study
     
    711774                        .save()
    712775                       
    713                         /*
    714776                        println 'Adding PPSH study'
    715777
     
    719781                                code:"PPSH",
    720782                                researchQuestion:"How much are fasting plasma and urine metabolite levels affected by prolonged fasting ?",
    721                                 description:"Human study",
    722783                                ecCode:"unknown",
    723784                                startDate: Date.parse('yyyy-MM-dd','2009-01-01')
     
    725786
    726787                        def fastingEvent = new Event(
    727                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    728                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    729                                         eventDescription: fastingTreatment,
    730                                         parameterStringValues: ['Fasting period':'8h']);
     788                            template: fastingTreatmentTemplate,
     789                            startTime: Date.parse('yyyy-MM-dd','2008-01-14' ),
     790                            endTime: Date.parse('yyyy-MM-dd','2008-01-14' )
     791                        )
     792                        .setFieldValue( 'Fasting period','8h' )
     793                        .with { if (!validate()) { errors.each { println it} } else save()}
    731794
    732795                        def bloodSamplingEvent = new SamplingEvent(
    733                                         startTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    734                                         endTime: Date.parse('yyyy-MM-dd','2008-01-14'),
    735                                         eventDescription: bloodSamplingEventDescription,
    736                                         parameterFloatValues: ['Sample volume':4.5F]);
     796                            template: bloodSamplingEventTemplate,
     797                            startTime: Date.parse('yyyy-MM-dd','2008-01-14' ),
     798                            endTime: Date.parse('yyyy-MM-dd','2008-01-14' )
     799                        )
     800                        .setFieldValue( 'Sample volume',4.5F )
     801                        .with { if (!validate()) { errors.each { println it} } else save()}
    737802
    738803                        def rootGroup = new EventGroup(name: 'Root group');
     
    741806                        rootGroup.save()
    742807
    743             def y = 1
    744             11.times {
    745               def currentSubject = new Subject(
    746                       name: "" + y++,
    747                       species: humanTerm,
    748                       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()}
    749 
    750               rootGroup.addToSubjects currentSubject
    751               rootGroup.save()
    752 
    753               def currentSample = new Sample(
    754                       name: currentSubject.name + '_B',
    755                       material: bloodTerm,
    756                       parentSubject: currentSubject,
    757                       parentEvent: bloodSamplingEvent);
    758 
    759 
    760               humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
    761           }
    762 
    763           humanStudy.addToEvents(fastingEvent)
    764           humanStudy.addToSamplingEvents(bloodSamplingEvent)
    765           humanStudy.addToEventGroups rootGroup
    766           humanStudy.save()
    767 
     808                        def y = 1
     809                        11.times {
     810                          def currentSubject = new Subject(
     811                                  name: "" + y++,
     812                                  species: humanTerm,
     813                                  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()}
     814
     815                          rootGroup.addToSubjects currentSubject
     816                          rootGroup.save()
     817
     818                          def currentSample = new Sample(
     819                                  name: currentSubject.name + '_B',
     820                                  material: bloodTerm,
     821                                  parentSubject: currentSubject,
     822                                  parentEvent: bloodSamplingEvent);
     823
     824                          humanStudy.addToSubjects(currentSubject).addToSamples(currentSample).with { if (!validate()) { errors.each { println it} } else save()}
     825                      }
     826
     827                      humanStudy.addToEvents(fastingEvent)
     828                      humanStudy.addToSamplingEvents(bloodSamplingEvent)
     829                      humanStudy.addToEventGroups rootGroup
     830                      humanStudy.save()
    768831                        // Add clinical data
    769832
     
    793856                        lipidAssay.addToMeasurements ldlMeasurement
    794857                        lipidAssay.addToMeasurements hdlMeasurement
    795 
     858                       
    796859                        def lipidAssayInstance = new dbnp.clinicaldata.ClinicalAssayInstance(
    797860                                assay: lipidAssay
     
    815878
    816879                        // Add assay to study capture module
    817 
    818880                        def clinicalModule = new AssayModule(
    819881                                name: 'Clinical data',
     
    834896                        lipidAssayRef.save()
    835897
    836                         humanStudy.addToAssays(lipidAssayRef);
     898                        humanStudy.addToAssays(lipidAssayRef);
     899
     900                        // Add some sample assay
     901                        // Add assay to study capture module
     902                        def dummyModule = new AssayModule(
     903                                name: 'Dummy data',
     904                                type: AssayType.CLINICAL_DATA,
     905                                platform: 'other type of measurement platform',
     906                                url: 'http://localhost:8080/gscf'
     907                        ).with { if (!validate()) { errors.each { println it} } else save()}
     908
     909                        def dummyAssayRef = new Assay(
     910                                name: 'Test assay',
     911                                module: dummyModule,
     912                                externalAssayId: lipidAssayInstance.id
     913                        ).with { if (!validate()) { errors.each { println it} } else save()}
     914
     915                        humanStudy.addToAssays(dummyAssayRef);
     916
    837917                        humanStudy.save()
    838 */
    839918                }
    840919        }
  • trunk/grails-app/domain/dbnp/studycapturing/Event.groovy

    r384 r386  
    1515class Event extends TemplateEntity implements Serializable {
    1616
     17        Date startTime
     18        Date endTime
     19       
    1720        static constraints = {
    1821                startTime(nullable: true)
     
    2528        }
    2629       
    27         Date getStartTime() {
    28                 getFieldValue('Start time')
    29         }
    3030
    31         def setStartTime(Date value) {
    32                 if (value != null) {
    33                         setFieldValue('Start time',value)
    34                 }
    35                 return this
    36         }
    37 
    38         Date getEndTime() {
    39                 getFieldValue('End time')
    40         }
    41 
    42         def setEndTime(Date value) {
    43                 if (value != null) {
    44                         setFieldValue('End time',value)
    45                 }
    46                 return this
    47         }
    48 
    49         Map giveDomainFields() {
    50                 return ['startTime':TemplateFieldType.DATE,'endTime':TemplateFieldType.DATE]
     31        List<DomainTemplateField> giveDomainFields() {
     32                [ new DomainTemplateField(
     33                            name: 'startDate',
     34                            type: TemplateFieldType.DATE),
     35                        new DomainTemplateField(
     36                            name: 'endDate',
     37                            type: TemplateFieldType.DATE) ];
    5138        }
    5239
  • trunk/grails-app/domain/dbnp/studycapturing/Sample.groovy

    r375 r386  
    1616        // a member that describes the quantity of the sample? --> should be in the templates
    1717
    18         Map giveDomainFields() {
    19                 return ['name':TemplateFieldType.STRING,'material':TemplateFieldType.ONTOLOGYTERM]
     18        List<DomainTemplateField> giveDomainFields() {
     19                [ new DomainTemplateField(
     20                            name: 'name',
     21                            type: TemplateFieldType.STRING),
     22                        new DomainTemplateField(
     23                            name: 'material',
     24                            type: TemplateFieldType.ONTOLOGYTERM) ];
    2025        }
    2126
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r375 r386  
    2323        //String ecCode
    2424
    25         Map giveDomainFields() {
    26                 return ['title':TemplateFieldType.STRING,'startDate':TemplateFieldType.DATE]
     25        List<DomainTemplateField> giveDomainFields() {
     26                [ new TemplateField(
     27                            name: 'title - niet opslaan!',
     28                            type: TemplateFieldType.STRING),
     29                        new TemplateField(
     30                            name: 'startDate',
     31                            type: TemplateFieldType.DATE) ];
    2732        }
    2833
  • trunk/grails-app/domain/dbnp/studycapturing/Subject.groovy

    r375 r386  
    1616        Term species
    1717
    18         Map giveDomainFields() {
    19                 return ['name':TemplateFieldType.STRING,'species':TemplateFieldType.ONTOLOGYTERM]
     18        List<DomainTemplateField> giveDomainFields() {
     19                [ new DomainTemplateField(
     20                            name: 'name',
     21                            type: TemplateFieldType.STRING),
     22                        new DomainTemplateField(
     23                            name: 'species',
     24                            type: TemplateFieldType.ONTOLOGYTERM) ];
    2025        }
    2126}
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy

    r384 r386  
    349349
    350350        /**
     351        * Return all fields defined in the underlying template and the built-in
     352        * domain fields of this entity
     353        */
     354        def List<TemplateField> giveFields() {
     355                return this.giveDomainFields() + this.giveTemplateFields();
     356        }
     357
     358        /**
    351359        * Return all templated fields defined in the underlying template of this entity
    352360        */
    353         def List<TemplateField> giveFields() {
     361        def List<TemplateField> giveTemplateFields() {
    354362                return this.template.fields;
    355363        }
    356364
    357         def List<TemplateField> giveSystemFields() {
    358                 return systemFields;
    359         }
    360        
    361 
    362365        /**
    363366         * Return all relevant 'built-in' domain fields of the super class
    364          * @return key-value pairs describing the built-in fields, with the names as keys and type (as TemplateFieldType) as values
     367         * @return List with DomainTemplateFields
     368         * @see DomainTemplateField
    365369         */
    366         abstract Map giveDomainFields()
     370        abstract List<DomainTemplateField> giveDomainFields()
     371
    367372        /*def giveDomainFields() {
    368373                def fieldSet = [:];
  • trunk/grails-app/views/sandbox/index.gsp

    r375 r386  
    3737                <td>Type</td>
    3838        </tr>
    39         <g:each in="${subject.giveDomainFields()}" var="field">
    40             <tr>
    41                     <td>Domain field</td>
    42                         <td>${field.key}</td>
    43                          <td>${field.value}</td>
    44                 </tr>
    45         </g:each>
    4639        <g:each in="${subject.giveFields()}" var="field">
    4740            <tr>
  • trunk/grails-app/views/study/list.gsp

    r370 r386  
    55    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    66    <meta name="layout" content="main" />
    7   <g:set var="entityName" value="${message(code: 'study.label', default: 'Study')}" />
    8   <title><g:message code="default.list.label" args="[entityName]" /></title>
     7    <g:set var="entityName" value="${message(code: 'study.label', default: 'Study')}" />
     8    <title><g:message code="default.list.label" args="[entityName]" /></title>
    99</head>
    1010<body>
     
    1212  <g:form action="list_extended">
    1313
    14   <div class="nav">
    15     <span class="menuButton"><a class="home" href="${createLink(uri: '/')}">Home</a></span>
    16     <span class="menuButton"><g:link class="create" action="create"><g:message code="default.new.label" args="[entityName]" /></g:link></span>
    17   </div>
    1814  <div class="body">
    1915    <h1><g:message code="default.list.label" args="[entityName]" /></h1>
     
    2218    </g:if>
    2319
    24       <g:each in="${studyInstanceList}" var="studyInstance">
     20    <div class="list">
     21      <table>
     22          <thead>
     23              <tr>
     24                  <th></th>
     25                  <g:sortableColumn property="title" title="${message(code: 'study.title.label', default: 'Title')}" />
     26                  <th>Subjects</th>
     27                  <th>Events</th>
     28                  <th>Assays</th>
     29              </tr>
     30          </thead>
     31          <tbody>
     32          <g:each in="${studyInstanceList}" var="studyInstance" status="i" >
     33              <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
     34
     35                  <td><input type="checkbox" name="${studyInstance.title}" id="${studyInstance.title}"></td>
     36
     37                  <td><g:link action="show" id="${studyInstance.id}">${fieldValue(bean: studyInstance, field: "title")}</g:link></td>
     38
     39                  <td>
     40                    <g:if test="${studyInstance.subjects.species.size()==0}">
     41                      -
     42                    </g:if>
     43                    <g:else>
     44                      <g:each in="${studyInstance.subjects.species.unique()}" var="currentSpecies" status="j">
     45                        <g:if test="${j > 0}">, </g:if>
     46                        <%= studyInstance.subjects.findAll { return it.species == currentSpecies; }.size() %>
     47                        ${currentSpecies}
     48                      </g:each>
     49                    </g:else>
     50                  </td>
     51
     52                  <td>
     53                    <g:if test="${studyInstance.giveEventTemplates().size()==0}">
     54                      -
     55                    </g:if>
     56                    <g:else>
     57                      ${studyInstance.giveEventTemplates().name.join( ', ' )}
     58                    </g:else>
     59                  </td>
     60
     61                  <td>
     62                    <g:if test="${studyInstance.assays.size()==0}">
     63                      -
     64                    </g:if>
     65                    <g:else>
     66                      ${studyInstance.assays.module.platform.unique().join( ', ' )}
     67                    </g:else>
     68                  </td>
     69
     70              </tr>
     71          </g:each>
     72          </tbody>
     73      </table>
     74    </div>
     75    <div class="buttons">
     76        <span class="button"><g:link controller="wizard" class="create" action="index"><g:message code="default.new.label" args="[entityName]" /></g:link></span>
     77    </div>
     78    <div class="paginateButtons">
     79        <g:paginate total="${studyInstanceTotal}" prev="&laquo; Previous" next="&raquo; Next" />
    2580        <br>
    26         <table>
    27           <tr>
    28             <td width="50"></td>
    29             <td colspan="3">
    30               <center><b>${studyInstance.title}</b></center>
    31             </td>
    32           </tr>
    33           <tr>
    34             <td>
    35 
    36               <input type="checkbox" name="${studyInstance.title}" id="${studyInstance.title}"></td>
    37 
    38             <td width="150">
    39           <g:link action="show" id="${studyInstance.id}">
    40 ${message(code: 'study.id.label', default: 'Id')} :
    41 ${fieldValue(bean: studyInstance, field: "id")}</g:link></td>
    42 
    43         <td width="300">
    44 <b>${message(code: 'study.template.label', default: 'Template')} </b>:
    45 ${fieldValue(bean: studyInstance, field: "template")}</td>
    46 
    47 <td >
    48 <b>${message(code: 'study.subjects.label', default: 'Subjects')} </b>:
    49 ${studyInstance.subjects.size()} subjects</td>
    50 
    51         </tr>
    52         <tr>
    53           <td></td>
    54           <td >
    55 <b>${message(code: 'study.owner.label', default: 'Owner')} </b>:
    56 ${fieldValue(bean: studyInstance, field: "owner")}</td>
    57 
    58           <td >
    59 <b>Assays </b>:
    60         <g:each in="${studyInstance.assays}" var="assay">
    61           ${assay.name}
    62         </g:each>
    63           </td>
    64 
    65           <td><b> Samples </b>:
    66           <g:each in="${studyInstance.assays.samples}" var="samples">
    67           ${samples.name}
    68           </g:each>
    69           </td>
    70 
    71 
    72         </tr>
    73         <g:if test="${studyInstance.fieldExists( 'Description' )}">
    74         <tr>
    75           <td></td>
    76           <td colspan="3">
    77             <b>${message(code: 'study.description.label', default: 'Description')} </b>:
    78             ${studyInstance.getFieldValue( 'Description' )}
    79            
    80           </td>
    81         </tr>
    82         </g:if>
    83         </table>
    84       </g:each>
    85    
    86     <div class="paginateButtons">
    87       <g:paginate total="${studyInstanceTotal}" />
    88       <br>
    89       <INPUT TYPE=submit name=submit Value="Compare selected studies">
     81        <INPUT TYPE=submit name=submit Value="Compare selected studies">
    9082    </div>
    9183  </div>
  • trunk/grails-app/views/study/show.gsp

    r370 r386  
    4949            </g:if>
    5050            <g:else>
    51              ${studyInstance.giveEventTemplates().name}
     51              ${studyInstance.giveEventTemplates().name}
    5252            </g:else>
    5353          <br>
Note: See TracChangeset for help on using the changeset viewer.