Changeset 370

Show
Ignore:
Timestamp:
22-04-10 09:31:50 (4 years ago)
Author:
roberth
Message:

Updated studies list to handle the new data model.
Updated the bootstrap to contain some studies with attached events and persons in order to test the updated studies list
Added fieldExists method to TemplateEntity? to check whether a given field exists or not

Location:
trunk/grails-app
Files:
7 modified

Legend:

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

    r367 r370  
    4848                        ).with { if (!validate()) { errors.each { println it} } else save()} 
    4949 
     50                        // Create a few persons, roles and Affiliations 
     51                        println ".adding persons, roles and affiliations" 
     52                        def affiliation1 = new PersonAffiliation( 
     53                            name: "Science Institute NYC" 
     54                        ).save(); 
     55                        def affiliation2 = new PersonAffiliation( 
     56                            name: "InfoStats GmbH, Hamburg" 
     57                        ).save(); 
     58                        def role1 = new PersonRole( 
     59                            name: "Principal Investigator" 
     60                        ).save(); 
     61                        def role2 = new PersonRole( 
     62                            name: "Statician" 
     63                        ).save(); 
     64                        def person1 = new Person( 
     65                            lastName: "Scientist", 
     66                            firstName: "John", 
     67                            midInitials: "R", 
     68                            email: "john@scienceinstitute.com", 
     69                            phone: "1-555-3049", 
     70                            address: "First street 2,NYC" 
     71                        ) 
     72                        .addToAffiliations( affiliation1 ) 
     73                        .addToAffiliations( affiliation2 ) 
     74                        .save(); 
     75                         
     76                        def person2 = new Person( 
     77                            lastName: "Statician", 
     78                            firstName: "Jane", 
     79                            midInitials: "W", 
     80                            email: "jane@statisticalcompany.de", 
     81                            phone: "49-555-8291", 
     82                            address: "Dritten strasse 38, Hamburg, Germany" 
     83                        ) 
     84                        .addToAffiliations( affiliation2 ) 
     85                        .save(); 
    5086 
    5187 /*   COMMENTED OUT BECAUSE IT BREAKS EVERYTHING AFTER REFACTORING THE DATAMODEL 
     
    223259                        def studyTemplate = new Template( 
    224260                                name: 'Academic study', entity: dbnp.studycapturing.Study) 
    225                                 .addToFields(new TemplateField(name: 'Description',type: TemplateFieldType.TEXT)) 
     261                                //.addToFields(new TemplateField(name: 'Description',type: TemplateFieldType.TEXT)) 
    226262                                .addToFields(new TemplateField(name: 'Study code',type: TemplateFieldType.STRING)) 
    227263                                .addToFields(new TemplateField(name: 'Objectives',type: TemplateFieldType.TEXT)) 
     
    303339 
    304340                        // Human sample template 
    305 /* COMMENTED OUT AS IT BREAKS THE WHOLE LOT 
    306341                        def humanSampleTemplate = new Template( 
    307342                                name: 'Human tissue sample', entity: dbnp.studycapturing.Sample) 
     
    363398 
    364399 
     400                        // Event template 
     401                        def dietTreatmentTemplate = new Template( 
     402                                name: 'Diet treatment ', entity: dbnp.studycapturing.Event) 
     403                        .addToFields(sampleDescriptionField) 
     404                        .addToFields(new TemplateField( 
     405                                name: 'Diet', type: TemplateFieldType.STRING)) 
     406                        .with { if (!validate()) { errors.each { println it} } else save()} 
     407 
     408                        def boostTreatmentTemplate = new Template( 
     409                                name: 'Boost treatment ', entity: dbnp.studycapturing.Event) 
     410                        .addToFields(sampleDescriptionField) 
     411                        .addToFields(new TemplateField( 
     412                                name: 'Compound', type: TemplateFieldType.STRING)) 
     413                        .with { if (!validate()) { errors.each { println it} } else save()} 
     414 
     415                        /* 
    365416                        //events 
    366417                        def eventDiet = new EventDescription( 
     
    403454 
    404455                        println('Adding PPS3 study...') 
    405  
     456                        */ 
    406457                        // studies 
    407458                        def exampleStudy = new Study( 
     
    410461                                code:"PPS3_leptin_module", 
    411462                                researchQuestion:"Leptin etc.", 
    412                                 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.", 
    413463                                ecCode:"2007117.c", 
    414464                                startDate: Date.parse('yyyy-MM-dd','2007-12-11') 
    415                         ).with { if (!validate()) { errors.each { println it} } else save()} 
     465                        ) 
     466                        //.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." ) 
     467                        .with { if (!validate()) { errors.each { println it} } else save()} 
    416468 
    417469                        def exampleHumanStudy = new Study( 
     
    420472                                code:"Human example code", 
    421473                                researchQuestion:"Leptin etc.", 
    422                                 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.", 
    423474                                ecCode:"2007117.c", 
    424475                                startDate: Date.parse('yyyy-MM-dd','2007-12-11') 
    425                         ).with { if (!validate()) { errors.each { println it} } else save()} 
     476                        ) 
     477                        //.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." ) 
     478                        .with { if (!validate()) { errors.each { println it} } else save()} 
    426479 
    427480                        def evLF = new Event( 
    428481                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
    429482                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    430                                 eventDescription: eventDiet, 
    431                                 parameterStringValues: ['Diet':'10% fat (palm oil)'] 
    432                         ).with { if (!validate()) { errors.each { println it} } else save()} 
     483                                template: dietTreatmentTemplate 
     484                        ) 
     485                        .setFieldValue( 'Diet','10% fat (palm oil)' ) 
     486                        .with { if (!validate()) { errors.each { println it} } else save()} 
    433487 
    434488                        def evHF = new Event( 
    435489                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
    436490                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    437                                 eventDescription: eventDiet, 
    438                                 parameterStringValues: ['Diet':'45% fat (palm oil)'] 
    439                         ).with { if (!validate()) { errors.each { println it} } else save()} 
     491                                template: dietTreatmentTemplate 
     492                        ) 
     493                        .setFieldValue( 'Diet','45% fat (palm oil)' ) 
     494                        .with { if (!validate()) { errors.each { println it} } else save()} 
    440495 
    441496                        def evBV = new Event( 
    442497                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
    443498                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    444                                 eventDescription: eventBoost, 
    445                                 parameterStringValues: ['Compound':'Vehicle'] 
    446                         ).with { if (!validate()) { errors.each { println it} } else save()} 
     499                                template: boostTreatmentTemplate 
     500                        ) 
     501                        .setFieldValue( 'Compound','Vehicle' ) 
     502                        .with { if (!validate()) { errors.each { println it} } else save()} 
    447503 
    448504                        def evBL = new Event( 
    449505                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
    450506                                endTime: Date.parse('yyyy-MM-dd','2008-01-14'), 
    451                                 eventDescription: eventBoost, 
    452                                 parameterStringValues: ['Compound':'Leptin'] 
    453                         ).with { if (!validate()) { errors.each { println it} } else save()} 
    454  
     507                                template: boostTreatmentTemplate 
     508                        ) 
     509                        .setFieldValue( 'Compound','Leptin' ) 
     510                        .with { if (!validate()) { errors.each { println it} } else save()} 
     511 
     512                        /* 
    455513                        def evLF4 = new Event( 
    456514                                startTime: Date.parse('yyyy-MM-dd','2008-01-07'), 
     
    494552                                        parameterFloatValues: ['Sample weight':5F] 
    495553                        ).with { if (!validate()) { errors.each { println it} } else save()} 
     554                        */ 
    496555 
    497556                        // Add events to study 
     
    501560                        .addToEvents(evBV) 
    502561                        .addToEvents(evBL) 
    503                         .addToEvents(evLF4) 
     562                        /* 
     563                        .addToEvents(evLF4) 
    504564                        .addToEvents(evHF4) 
    505565                        .addToEvents(evBV4) 
     
    507567                        .addToSamplingEvents(evS) 
    508568                        .addToSamplingEvents(evS4) 
     569                        */ 
    509570                        .save() 
    510571 
     
    529590                        .with { if (!validate()) { errors.each { println it} } else save()} 
    530591 
     592                        /* 
    531593                        def LFBV4 = new EventGroup(name:"10% fat + vehicle for 4 weeks") 
    532594                        .addToEvents(evLF4) 
     
    548610                        .addToEvents(evBL4) 
    549611                        .with { if (!validate()) { errors.each { println it} } else save()} 
     612                        */ 
    550613 
    551614            // Add subjects and samples and compose EventGroups 
    552615 
    553616                        def x=1 
    554                         80.times { 
     617                        40.times { 
    555618                                def currentSubject = new Subject( 
    556619                                        name: "A" + x++, 
     
    559622                                ) 
    560623                                .setFieldValue("Gender", "Male") 
    561                                 .setFieldValue("Genotype", c57bl6Term) 
     624                                //.setFieldValue("Genotype", c57bl6Term) 
    562625                                .setFieldValue("Age (weeks)", 17) 
    563626                                .setFieldValue("Cage", "" + (int)(x/2)) 
     
    568631 
    569632                                // Add subject to appropriate EventGroup 
    570                                 if (x > 70) { HFBL4.addToSubjects(currentSubject).save() } 
     633                                /* 
     634                                if (x > 70) { HFBL4.addToSubjects(currentSubject).save() } 
    571635                                else if (x > 60) { HFBV4.addToSubjects(currentSubject).save() } 
    572636                                else if (x > 50) { LFBL4.addToSubjects(currentSubject).save() } 
     
    576640                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() } 
    577641                                else             { LFBV1.addToSubjects(currentSubject).save() } 
    578  
    579                         } 
     642                                */ 
     643 
     644                                if (x > 30) { HFBL1.addToSubjects(currentSubject).save() } 
     645                                else if (x > 20) { HFBV1.addToSubjects(currentSubject).save() } 
     646                                else if (x > 10) { LFBL1.addToSubjects(currentSubject).save() } 
     647                                else             { LFBV1.addToSubjects(currentSubject).save() } 
     648 
     649                        } 
    580650 
    581651                        // Add EventGroups to study 
     
    585655                        .addToEventGroups(HFBV1) 
    586656                        .addToEventGroups(HFBL1) 
    587                         .addToEventGroups(LFBV4) 
    588                         .addToEventGroups(LFBL4) 
    589                         .addToEventGroups(HFBV4) 
    590                         .addToEventGroups(HFBL4) 
    591                         .save() 
    592  
    593                         println 'Adding PPSH study' 
     657                        //.addToEventGroups(LFBV4) 
     658                        //.addToEventGroups(LFBL4) 
     659                        //.addToEventGroups(HFBV4) 
     660                        //.addToEventGroups(HFBL4) 
     661 
     662                        // Add persons to study 
     663                        def studyperson1 = new StudyPerson( person: person1, role: role1 ).save(); 
     664                        def studyperson2 = new StudyPerson( person: person2, role: role2 ).save(); 
     665 
     666                        exampleStudy 
     667                        .addToPersons( studyperson1 ) 
     668                        .addToPersons( studyperson2 ) 
     669                        .save() 
     670 
     671                        /* 
     672                        println 'Adding PPSH study' 
    594673 
    595674                        def humanStudy = new Study( 
  • trunk/grails-app/domain/dbnp/studycapturing/Event.groovy

    r359 r370  
    8888 
    8989        def String toString() { 
    90                 return eventDescription ? eventDescription.name : "" 
     90                return fieldExists( 'Description' ) ? getFieldValue( 'Description') : "" 
    9191        } 
    9292 
  • trunk/grails-app/domain/dbnp/studycapturing/Study.groovy

    r359 r370  
    6060        } 
    6161 
     62        /** 
     63         * Return the unique Event templates that are used in this study 
     64         */ 
     65        def Set<Template> giveEventTemplates() { 
     66                TemplateEntity.giveTemplates(events); 
     67        } 
    6268 
     69        /** 
     70         * Return the unique SamplingEvent templates that are used in this study 
     71         */ 
     72        def Set<Template> giveSamplingEventTemplates() { 
     73                TemplateEntity.giveTemplates(events); 
     74        } 
     75         
    6376        /** 
    6477         * Returns the template of all subjects in the study 
  • trunk/grails-app/domain/dbnp/studycapturing/TemplateEntity.groovy

    r359 r370  
    263263 
    264264        /** 
     265         * Check whether a given template field exists or not 
     266         * @param fieldName The name of the template field 
     267         * @return true if the given field exists and false otherwise 
     268         */ 
     269        def fieldExists(String fieldName) { 
     270                TemplateFieldType fieldType = template.getFieldType(fieldName) 
     271 
     272                // If the field is found, a TemplateFieldType is returned 
     273                // otherwise null 
     274                if (fieldType) { 
     275                    return true 
     276                } else { 
     277                    return false 
     278                } 
     279        } 
     280 
     281        /** 
    265282         * Set a template/entity field value 
    266283         * @param fieldName The name of the template or entity field 
  • trunk/grails-app/views/study/list_extended.gsp

    r359 r370  
    2121  <% def tmpList = [] %> 
    2222 
     23 
    2324  <div class="nav"> 
    2425    <span class="menuButton"><a class="home" href="${createLink(uri: '/')}">Home</a></span> 
     
    4344     <% }} %> 
    4445 
    45     <% if (selectedStudies.size()>0) {%> 
     46      <% 
     47        /* Determine all template fields that are available in one or more templates used */ 
     48        def allTemplateFields = [] 
     49        selectedStudies.each { println it.giveFields(); allTemplateFields += it.giveFields() } 
     50        allTemplateFields = allTemplateFields.unique(); 
     51      %> 
     52     <g:if test="${selectedStudies.size()>0}"> 
    4653 
    4754        <div id="tabs"> 
     
    4956        <li><a href="#study">Study Information</a></li> 
    5057        <li><a href="#subjects">Subjects</a></li> 
    51         <li><a href="#groups">Groups</a></li> 
    52         <li><a href="#protocols">Protocols</a></li> 
    5358        <li><a href="#events">Events</a></li> 
    54         <li><a href="#event-description">Event Description</a></li> 
    5559        <li><a href="#event-group">Event Groups</a></li> 
    5660        <li><a href="#assays">Assays</a></li> 
     61        <li><a href="#persons">Persons</a></li> 
    5762      </ul> 
    5863 
     
    7479        </g:each> 
    7580      </tr> 
    76  
    77       <g:each in="${att_list}" var="att"> 
    78       <tr> 
    79         <td><b>${att[0].toUpperCase()+att.substring(1)}</b></td> 
    80         <g:each in="${selectedStudies}" status="k" var="studyIns"> 
    81  
    82    <g:if test="${att == 'events'}"> 
    83      <td> 
    84   <% def eventList = [] %> 
    85              <g:each in="${studyIns.events}" var="s"> 
    86               <%  eventList.add(s.eventDescription) %> 
    87              </g:each> 
    88   <g:if test="${eventList.size()==0}"> 
    89           - 
    90          </g:if> 
    91         <g:else> 
    92            <% def sampEvent = eventList.get(0).name %> 
    93            ${sampEvent} 
    94          <g:each in="${eventList}" var="event"> 
    95            <g:if test="${(event.name!=sampEvent)}"> 
    96             ${event.name} 
    97          </g:if> 
     81      <tr> 
     82        <td><b>Template</b></td> 
     83        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     84          <td><g:link controller="template" action="show" id="${studyIns.template?.id}"> 
     85${studyInse?.template?.encodeAsHTML()}</g:link></td> 
     86        </g:each> 
     87      </tr> 
     88 
     89      <tr> 
     90        <td><b>Title</b></td> 
     91        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     92          <td>${fieldValue(bean: studyIns, field: "title")}</td> 
     93        </g:each> 
     94      </tr> 
     95      <tr> 
     96        <td><b>Start</b></td> 
     97        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     98          <td><g:formatDate date="${studyIns?.startDate}" /></td> 
     99        </g:each> 
     100      </tr> 
     101       
     102      <tr> 
     103        <td><b>Date Created</b></td> 
     104        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     105          <td><g:formatDate date="${studyIns?.dateCreated}" /></td> 
     106        </g:each> 
     107      </tr> 
     108      <tr> 
     109        <td><b>Last updated</b></td> 
     110        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     111          <td><g:formatDate date="${studyIns?.lastUpdated}" /></td> 
     112        </g:each> 
     113      </tr> 
     114 
     115      <tr> 
     116        <td><b>Events</b></td> 
     117        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     118          <td> 
     119            <g:if test="${studyIns.giveEventTemplates().size()==0}"> 
     120              - 
     121            </g:if> 
     122            <g:else> 
     123             ${studyIns.giveEventTemplates().name} 
     124            </g:else> 
     125          </td> 
     126        </g:each> 
     127      </tr> 
     128      <tr> 
     129        <td><b>Sampling Events</b></td> 
     130        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     131          <td> 
     132            <g:if test="${studyIns.giveSamplingEventTemplates().size()==0}"> 
     133              - 
     134            </g:if> 
     135            <g:else> 
     136             ${studyIns.giveSamplingEventTemplates().name} 
     137            </g:else> 
     138          </td> 
     139        </g:each> 
     140      </tr> 
     141      <tr> 
     142        <td><b>Owner</b></td> 
     143        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     144          <td> 
     145            <g:link controller="user" action="show" id="${studyIns?.owner?.id}">${studyIns?.owner?.encodeAsHTML()}</g:link> 
     146          </td> 
     147        </g:each> 
     148      </tr> 
     149 
     150      <tr> 
     151        <td><b>Readers</b></td> 
     152        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     153          <td> 
     154            <g:if test="${studyIns.readers.size()==0}"> 
     155              - 
     156            </g:if> 
     157            <g:else> 
     158              <g:each in="${studyIns.readers}" var="r"> 
     159                <li><g:link controller="user" action="show" id="${r.id}">${r?.encodeAsHTML()}</g:link></li> 
     160              </g:each> 
     161            </g:else> 
     162          </td> 
     163        </g:each> 
     164      </tr> 
     165      <tr> 
     166        <td><b>Editors</b></td> 
     167        <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     168          <td> 
     169            <g:if test="${studyIns.editors.size()==0}"> 
     170              - 
     171            </g:if> 
     172            <g:else> 
     173              <g:each in="${studyIns.editors}" var="r"> 
     174                <li><g:link controller="user" action="show" id="${r.id}">${r?.encodeAsHTML()}</g:link></li> 
     175              </g:each> 
     176            </g:else> 
     177          </td> 
     178        </g:each> 
     179      </tr> 
     180 
     181      <!-- All template fields --> 
     182      <g:each in="${allTemplateFields}" var="field"> 
     183        <tr> 
     184          <td><b>${field.name}</b></td> 
     185          <g:each in="${selectedStudies}" status="k" var="studyIns"> 
     186            <td> 
     187              <g:if test="${studyIns.fieldExists(field.name)}"> 
     188                ${studyIns.getFieldValue(field.name)} 
     189              </g:if> 
     190              <g:else> 
     191                - 
     192              </g:else> 
     193            </td> 
    98194          </g:each> 
    99          </g:else> 
    100           </td> 
    101         </g:if> 
    102  
    103 <g:elseif test="${att == 'samplingEvents'}"> 
    104      <td> 
    105   <% def SampeventList = [] %> 
    106              <g:each in="${studyIns.samplingEvents}" var="s"> 
    107               <%  SampeventList.add(s.eventDescription) %> 
    108              </g:each> 
    109   <g:if test="${SampeventList.size()==0}"> 
    110           - 
    111          </g:if> 
    112         <g:else> 
    113            <% def samplEvent = SampeventList.get(0).name %> 
    114            ${samplEvent} 
    115          <g:each in="${SampeventList}" var="samplingEvent"> 
    116            <g:if test="${(samplingEvent.name!=samplEvent)}"> 
    117             ${samplingEvent.name} 
    118          </g:if> 
    119           </g:each> 
    120          </g:else> 
    121           </td> 
    122 </g:elseif> 
    123  
    124           <g:else> 
    125 <td>${fieldValue(bean: studyIns, field: att)}</td> 
    126           </g:else> 
    127         </g:each> 
    128       </tr> 
     195        </tr> 
    129196      </g:each> 
    130197 
     
    186253      </div> 
    187254 
    188           <div id="groups"> 
    189 <table border="2"> 
    190   <tr> 
    191          <g:each in="${selectedStudies}" var="study"> 
    192            <td width="50%"><center><b>${study.title}</b></center></td> 
    193          </g:each> 
    194        </tr> 
    195          <tr> 
    196          <g:each in="${selectedStudies}" var="study"> 
    197            <td> 
    198   <g:if test="${study.groups.size()==0}"> No groups in this study </g:if> 
    199   <g:else><center><b>${study.groups}</b></center></g:else> 
    200          </td> 
    201          </g:each> 
    202        </tr> 
    203 </table> 
    204         </div> 
    205  
    206           <div id="protocols"> 
    207          <table border="2"> 
    208          <tr> 
    209          <g:each in="${selectedStudies}" var="study"> 
    210            <td width="50%"><center><b>${study.title}</b></center></td> 
    211          </g:each> 
    212        </tr> 
    213  
    214          <tr> 
    215          <g:each in="${selectedStudies}" var="stud"> 
    216              <td> 
    217                 <table> 
    218           <tr> 
    219             <td><b>Id </b></td> 
    220             <td><b>Name</b></td> 
    221             <td><b>Parameters</b></td> 
    222             <td><b>Reference</b></td> 
    223           </tr> 
    224  
    225           <% def protocol_list = [] %> 
    226           <% protocol_list.add(stud.events.eventDescription.protocol.unique()) %> 
    227           <% protocol_list.addAll(stud.samplingEvents.eventDescription.protocol.unique()) %> 
    228  
    229           <g:each in="${protocol_list}" var="protocol"> 
    230             <tr> 
    231               <td><g:link controller="protocol" action="show" id="${protocol.id}">${protocol.id}</g:link></td> 
    232           <td>${protocol.name}</td> 
    233           <td> 
    234           <g:each in="${protocol.parameters}" var="p"><ul><li> 
    235             <g:link controller="protocolParameter" action="show" id="${p.id}">${p.name}</g:link> 
    236             </li></ul> 
    237           </g:each> 
    238           </td> 
    239           <td>${protocol.reference}</td> 
    240           </tr> 
    241           </g:each> 
    242              </table> 
    243  
    244         </td> 
    245            </g:each> 
    246          </tr> 
    247        </table> 
    248        </div> 
    249  
    250255          <div id="events"> 
    251256          <table border="2"> 
    252          <tr> 
    253          <g:each in="${selectedStudies}" var="study"> 
    254            <td><center><b>${study.title}</b></center></td> 
    255          </g:each> 
    256        </tr> 
    257  
    258          <tr> 
    259          <g:each in="${selectedStudies}" var="stud"> 
    260              <td> 
    261  
    262         <table> 
    263           <tr> 
    264             <td><b>Event Description</b></td> 
    265             <td><b>Subject</b></td> 
    266             <td><b>Start Time</b></td> 
    267             <td><b>Duration</b></td> 
    268             <td><b>Sampling Event</b></td> 
    269             <td><b>Parameters</b></td> 
    270           </tr> 
    271  
    272           <g:each in="${stud.events}" var="e"> 
    273             <tr> 
    274               <td><g:link controller="event" action="show" id="${e.id}">  ${e.eventDescription.name}</g:link></td> 
    275           <td>?</td> 
    276           <td>${e.getPrettyDuration(stud.startDate,e.startTime)}</td> 
    277           <td>${e.getPrettyDuration()}</td> 
    278            <td><g:checkBox name="event" disabled="${true}" value="${false}"/></td> 
    279  
    280            </tr> 
    281           </g:each> 
    282  
    283           <g:each in="${stud.samplingEvents}" var="e"> 
    284           <tr> 
    285           <td><g:link controller="event" action="show" id="${e.id}">${e.eventDescription.name}</g:link></td> 
    286           <td>?</td> 
    287           <td>${e.getPrettyDuration(stud.startDate,e.startTime)}</td> 
    288           <td>${e.getPrettyDuration()}</td> 
    289             <td><g:checkBox name="samplingEvent" disabled="${true}" value="${true}"/></td> 
    290  
    291             <g:each in="${e.eventDescription.protocol.parameters}" var="param"> 
    292           <td> 
    293             ${param.name} : ${param.listEntries} 
    294           </td> 
    295             </g:each> 
    296           </tr> 
    297           </g:each> 
    298  
    299  
    300         </table> 
    301         </td> 
    302            </g:each> 
    303          </tr> 
    304        </table> 
     257            <tr> 
     258              <g:each in="${selectedStudies}" var="study"> 
     259                <td><center><b>${study.title}</b></center></td> 
     260              </g:each> 
     261            </tr> 
     262 
     263            <tr> 
     264              <g:each in="${selectedStudies}" var="study"> 
     265                <td> 
     266 
     267                  <g:if test="${study.events.size()+study.samplingEvents.size()==0}"> 
     268                    No events in this study 
     269                  </g:if> 
     270                  <g:else> 
     271                      <table> 
     272                        <tr> 
     273                          <td><b>Id </b></td> 
     274                          <td><b>Start time</b></td> 
     275                          <td><b>Duration</b></td> 
     276                          <td><b>Type</b></td> 
     277                          <td><b>Sampling event</b></td> 
     278                          <td><b>Parameters</b></td> 
     279                        </tr> 
     280 
     281                        <g:each in="${study.events + study.samplingEvents}" var="event"> 
     282                          <tr> 
     283                            <td><g:link controller="event" action="show" id="${event.id}">${event.id}</g:link></td> 
     284                            <td>${event.getPrettyDuration(study.startDate,event.startTime)}</td> 
     285                            <td>${event.getPrettyDuration()}</td> 
     286                            <td>${event.template.name}</td> 
     287                            <td> 
     288                              <g:if test="${event instanceof dbnp.studycapturing.SamplingEvent}"> 
     289                                <g:checkBox name="samplingEvent" disabled="${true}" value="${true}"/> 
     290                              </g:if> 
     291                              <g:else> 
     292                                <g:checkBox name="event" disabled="${true}" value="${false}" /> 
     293                              </g:else> 
     294                            </td> 
     295                            <td> 
     296                              <g:set var="fieldCounter" value="${1}" /> 
     297                              <g:each in="${event.giveFields()}" var="field"> 
     298                                <g:if test="${event.getFieldValue(field.name)}"> 
     299                                  <g:if test="${fieldCounter > 1}">, </g:if> 
     300                                    ${field.name} = ${event.getFieldValue( field.name )} 
     301                                  <g:set var="fieldCounter" value="${fieldCounter + 1}" /> 
     302                                </g:if> 
     303                              </g:each> 
     304                            </td> 
     305                          </tr> 
     306                        </g:each> 
     307                      </table> 
     308 
     309                  </g:else> 
     310 
     311                </td> 
     312              </g:each> 
     313            </tr> 
     314          </table> 
    305315 
    306316      </div> 
    307            
    308           <div id="event-description"> 
    309   <table border="2"> 
    310   <tr> 
    311          <g:each in="${selectedStudies}" var="study"> 
    312           <td><center><b>${study.title}</b></center></td> 
    313          </g:each> 
    314   </tr> 
    315    <tr> 
    316          <g:each in="${selectedStudies}" var="stud"> 
    317            <td> 
    318            <table> 
    319           <tr> 
    320  
    321             <td><b>Event Name</b></td> 
    322             <td><b>Parameters </b></td> 
    323           </tr> 
    324           <tr> 
    325             <td><b></b></td> 
    326             <td><b>Name</b></td> 
    327             <td><b>Description</b></td> 
    328             <td><b>Unit</b></td> 
    329             <td><b>Reference</b></td> 
    330             <td><b>Options</b></td> 
    331             <td><b>Type</b></td> 
    332           </tr> 
    333           <g:each in="${dbnp.studycapturing.EventDescription.list()}" var="e"> 
    334           <g:if test="${(stud.events.eventDescription.contains(e))}" > 
    335             <tr> 
    336               <td>${e.name} </td></tr><tr> 
    337             <g:each in="${e.protocol.parameters}" var="p"> 
    338               <td></td> 
    339           <td>${p.name}</td> 
    340           <td>${p.description}</td> 
    341           <td>${p.unit}</td> 
    342           <td>${p.reference}</td> 
    343           <g:if test="${(p.listEntries.size()==0)}" > 
    344           <td>-</td> 
    345             </g:if> 
    346           <g:else> 
    347           <td>${p.listEntries}</td> 
    348           </g:else> 
    349           <td>${p.type}</td> 
    350             </tr> 
    351             </g:each> 
    352             </g:if> 
    353             </g:each> 
    354  
    355            <g:each in="${dbnp.studycapturing.EventDescription.list()}" var="e"> 
    356           <g:if test="${(stud.samplingEvents.eventDescription.contains(e))}" > 
    357             <tr> 
    358               <td>${e.name} </td></tr><tr> 
    359             <g:each in="${e.protocol.parameters}" var="p"> 
    360               <td></td> 
    361           <td>${p.name}</td> 
    362           <td>${p.description}</td> 
    363           <td>${p.unit}</td> 
    364           <td>${p.reference}</td> 
    365           <g:if test="${(p.listEntries.size()==0)}" > 
    366           <td>-</td> 
    367             </g:if> 
    368           <g:else> 
    369           <td>${p.listEntries}</td> 
    370           </g:else> 
    371           <td>${p.type}</td> 
    372             </tr> 
    373             </g:each> 
    374             </g:if> 
    375             </g:each> 
    376  
    377   </table> 
    378         </td> 
    379            </g:each> 
    380          </tr> 
    381        </table> 
    382  
    383           </div> 
    384  
    385           <div id="event-group"> 
    386           </div> 
     317   
     318        <div id="event-group"> 
     319          <table border="2"> 
     320            <tr> 
     321              <g:each in="${selectedStudies}" var="study"> 
     322                <td><center><b>${study.title}</b></center></td> 
     323              </g:each> 
     324            </tr> 
     325 
     326            <tr> 
     327              <g:each in="${selectedStudies}" var="study"> 
     328 
     329                <g:if test="${study.eventGroups.size()==0}"> 
     330                  No event groups in this study 
     331                </g:if> 
     332                <g:else> 
     333                  <table> 
     334                    <tr> 
     335                      <td><b>Name</b></td> 
     336                      <td colspan="${study.giveEventTemplates().size()}"><b>Events</b></td> 
     337                      <td><b>Subjects</b></td> 
     338                    </tr> 
     339                    <tr> 
     340                      <td></td> 
     341                      <g:each in="${study.giveEventTemplates()}" var="eventTemplate"> 
     342                        <td><b>${eventTemplate.name}</b></td> 
     343                      </g:each> 
     344                      <td></td> 
     345                    </tr> 
     346                    <g:each in="${study.eventGroups}" var="eventGroup"> 
     347                      <tr> 
     348                        <td>${eventGroup.name}</td> 
     349 
     350                        <g:each in="${study.giveEventTemplates()}" var="currentEventTemplate"> 
     351                          <td> 
     352                            <g:each in="${eventGroup.events}" var="event"> 
     353                              <g:if test="${event.template.name==currentEventTemplate.name}"> 
     354 
     355                                <g:set var="fieldCounter" value="${1}" /> 
     356                                <g:each in="${event.giveFields()}" var="field"> 
     357                                  <g:if test="${event.getFieldValue(field.name)}"> 
     358                                    <g:if test="${fieldCounter > 1}">, </g:if> 
     359                                      ${field.name} = ${event.getFieldValue( field.name )} 
     360                                    <g:set var="fieldCounter" value="${fieldCounter + 1}" /> 
     361                                  </g:if> 
     362                                </g:each> 
     363                              </g:if> 
     364                            </g:each> 
     365                           </td> 
     366                        </g:each> 
     367                        <td>${eventGroup.subjects.name.join( ', ' )}</td> 
     368                      </tr> 
     369                    </g:each> 
     370                  </table> 
     371                </g:else> 
     372 
     373              </g:each> 
     374            </tr> 
     375          </table> 
     376        </div> 
    387377 
    388378          <div id="assays"> 
     
    438428      </div> 
    439429 
     430 
     431      <div id="persons"> 
     432        <table border="2"> 
     433          <tr> 
     434            <g:each in="${selectedStudies}" var="study"> 
     435              <td><center><b>${study.title}</b></center></td> 
     436            </g:each> 
     437          </tr> 
     438          <tr> 
     439            <g:each in="${selectedStudies}" var="study"> 
     440              <td> 
     441                <g:if test="${study.persons.size()==0}"> 
     442                No persons involved in this study 
     443                </g:if> 
     444                <g:else> 
     445                  <table> 
     446                    <tr> 
     447 
     448                      <td><b>Name</b></td> 
     449                      <td><b>Affiliations</b></td> 
     450                      <td><b>Role</b></td> 
     451                      <td><b>Phone</b></td> 
     452                      <td><b>Email</b></td> 
     453                    </tr> 
     454                    <g:each in="${study.persons}" var="studyperson"> 
     455                      <tr> 
     456                        <td>${studyperson.person.firstName} ${studyperson.person.midInitials} ${studyperson.person.lastName}</td> 
     457                        <td> 
     458                          ${studyperson.person.affiliations.name.join(', ')} 
     459                        </td> 
     460                        <td>${studyperson.role.name}</td> 
     461                        <td>${studyperson.person.phone}</td> 
     462                        <td>${studyperson.person.email}</td> 
     463                      </tr> 
     464                    </g:each> 
     465                  </table> 
     466                </g:else> 
     467              </td> 
     468           </g:each> 
     469         </tr> 
     470       </table> 
     471 
     472      </div> 
     473 
    440474    </div> 
    441475 
    442     <% } %> 
     476    </g:if> 
    443477     
    444      <% if (selectedStudies.size()==0) {%> 
     478    <g:if test="${selectedStudies.size()==0}"> 
    445479    Please select studies to compare. 
    446     <% } %> 
     480    </g:if> 
    447481 
    448482    </div> 
  • trunk/grails-app/views/study/list.gsp

    r359 r370  
    7171 
    7272        </tr> 
     73        <g:if test="${studyInstance.fieldExists( 'Description' )}"> 
    7374        <tr> 
    7475          <td></td> 
    7576          <td colspan="3"> 
    7677            <b>${message(code: 'study.description.label', default: 'Description')} </b>: 
    77 ${fieldValue(bean: studyInstance, field: "description")}</td> 
     78            ${studyInstance.getFieldValue( 'Description' )} 
     79             
     80          </td> 
    7881        </tr> 
     82        </g:if> 
    7983        </table> 
    8084      </g:each> 
  • trunk/grails-app/views/study/show.gsp

    r359 r370  
    2929    <div class="dialog"> 
    3030 
    31 <% protocolList = dbnp.studycapturing.Protocol.list() %> 
    32 <% def study_eventsDescription = [] %> 
    33 <% study_eventsDescription = studyInstance.events.eventDescription.unique() %> 
    34 <% study_eventsDescription.addAll(studyInstance.samplingEvents.eventDescription.unique()) %> 
    35 <% def study_events = [] %> 
    36 <% study_events = studyInstance.events.unique() %> 
    37 <% study_events.addAll(studyInstance.samplingEvents.unique()) %> 
    38  
    3931      <div id="tabs"> 
    4032        <ul> 
    4133          <li><a href="#study">Study Information</a></li> 
    4234          <li><a href="#subjects">Subjects</a></li> 
    43           <li><a href="#groups">Groups</a></li> 
    44           <li><a href="#protocols">Protocols</a></li> 
    4535          <li><a href="#events">Events</a></li> 
    46           <li><a href="#event-description">Event Description</a></li> 
    4736          <li><a href="#event-group">Event Groups</a></li> 
    4837          <li><a href="#assays">Assays</a></li> 
     38          <li><a href="#persons">Persons</a></li> 
    4939        </ul> 
    5040 
     
    5545          <b> Start </b>:<g:formatDate date="${studyInstance?.startDate}" /> <br> 
    5646          <b> Events </b>: 
    57             <g:if test="${studyInstance.events.eventDescription.size()==0}"> 
     47            <g:if test="${studyInstance.giveEventTemplates().size()==0}"> 
    5848              - 
    5949            </g:if> 
    6050            <g:else> 
    61             ${studyInstance.events.eventDescription.unique().toString().replaceAll("]"," "). 
    62           substring(1,studyInstance.events.eventDescription.unique().toString().size())} 
     51             ${studyInstance.giveEventTemplates().name} 
    6352            </g:else> 
    6453          <br> 
    6554          <b>Sampling Events </b>: 
    66             <g:if test="${studyInstance.samplingEvents.eventDescription.size()==0}"> 
     55            <g:if test="${studyInstance.giveSamplingEventTemplates().size()==0}"> 
    6756             - 
    6857            </g:if> 
    6958            <g:else> 
    70              ${studyInstance.samplingEvents.eventDescription.unique().toString().replaceAll("]"," "). 
    71                  substring(1,studyInstance.samplingEvents.eventDescription.unique().toString().size())} 
     59              ${studyInstance.giveSamplingEventTemplates().name} 
    7260            </g:else> 
    7361          <br> 
     
    8674          </g:else> 
    8775          <br> 
    88           <b>Code </b>: ${fieldValue(bean: studyInstance, field: "code")} <br> 
     76 
     77          <!-- All template fields --> 
     78          <g:each in="${studyInstance.giveFields()}" var="field"> 
     79            <b>${field.name}</b>: ${studyInstance.getFieldValue(field.name)}<br /> 
     80          </g:each> 
     81 
    8982          <b>Editors </b>: 
    9083          <g:if test="${studyInstance.editors.size()==0}"> 
     
    9992          </g:else> 
    10093          <br> 
    101           <b>EC Code </b>: ${fieldValue(bean: studyInstance, field: "ecCode")} <br> 
    102           <b>Research Question </b>: ${fieldValue(bean: studyInstance, field: "researchQuestion")} <br> 
    10394          <b>Title </b>: ${fieldValue(bean: studyInstance, field: "title")} <br> 
    104           <b>Description </b>: ${fieldValue(bean: studyInstance, field: "description")} <br> 
    10595          <b>Owner </b>:<g:link controller="user" action="show" id="${studyInstance?.owner?.id}">${studyInstance?.owner?.encodeAsHTML()}</g:link> <br> 
    10696          <b>Date Created </b>:<g:formatDate date="${studyInstance?.dateCreated}" /> <br> 
     
    129119                <g:each in="${template.fields}" var="g"> 
    130120                  <td> 
    131 <% print s.getFieldValue(g.toString())  %> 
     121                  <% print s.getFieldValue(g.toString())  %> 
    132122                  </td> 
    133123                </g:each> 
     
    140130        </div> 
    141131 
    142         <div id="groups"> 
    143           <g:if test="${studyInstance.groups.size()==0}"> 
    144             No groups in this study 
    145           </g:if> 
    146           <g:else> 
    147             <g:each in="${studyInstance.groups}" var="g"> 
    148 ${g.name} 
    149             </g:each> 
    150           </g:else> 
    151         </div> 
    152  
    153         <div id="protocols"> 
    154 <% def protocol_list = [] %> 
    155 <% protocol_list= studyInstance.events.eventDescription.protocol.unique() %> 
    156           <g:if test="${protocol_list.size()==0}"> 
    157             No protocols in this study 
    158           </g:if> 
    159           <g:else> 
    160             <table> 
    161             <tr> 
    162               <td><b>Id </b></td> 
    163               <td><b>Name</b></td> 
    164               <td><b>Parameters</b></td> 
    165               <td><b>Reference</b></td> 
    166             </tr> 
    167             <g:each in="${protocol_list}" var="protocol"> 
    168               <tr> 
    169               <td><g:link controller="protocol" action="show" id="${protocol.id}">${protocol.id}</g:link></td> 
    170               <td>${protocol.name}</td> 
    171               <td> 
    172               <g:each in="${protocol.parameters}" var="p"> 
    173                   <g:link controller="protocolParameter" action="show" id="${p.id}">${p.name}</g:link> 
    174               </g:each> 
    175               </td> 
    176               <td>${protocol.reference}</td> 
    177               </tr> 
    178  
    179             </g:each> 
    180           </table> 
    181           </g:else> 
    182         </div> 
    183132 
    184133        <div id="events"> 
    185           <g:if test="${study_events.size()==0}"> 
    186            No events in this study 
    187           </g:if> 
    188           <g:else> 
    189           <table> 
    190             <tr> 
    191               <td><b>Subject</b></td> 
    192               <td><b>Start Time</b></td> 
    193               <td><b>Duration</b></td> 
    194               <td><b>Event Description</b></td> 
    195               <td><b>Sampling Event</b></td> 
    196               <td><b>Parameters</b></td> 
    197             </tr> 
    198             <g:each in="${study_events}" var="e"> 
    199               <tr> 
    200                 <td>-</td> 
    201                 <td>${e.getPrettyDuration(studyInstance.startDate,e.startTime)}</td> 
    202                 <td>${e.getPrettyDuration()}</td> 
    203                 <td><g:link controller="event" action="show" id="${e.id}">  ${e.eventDescription.name}</g:link></td> 
    204               <td> 
    205               <g:if test="${e instanceof dbnp.studycapturing.SamplingEvent}"> 
    206                 <g:checkBox name="samplingEvent" disabled="${true}" value="${true}"/> 
    207               </g:if> 
    208               <g:else> 
    209                 <g:checkBox name="event" disabled="${true}" value="${false}"/> 
    210               </g:else> 
    211               </td> 
    212               <td> 
    213              <g:if test="${e.parameterStringValues.size()>0}"> 
    214 <% def stringValues = e.parameterStringValues.toString().replaceAll("}"," ") %> 
    215 <% print stringValues.substring(1,stringValues.size()) %> 
    216               </g:if> 
    217               <g:elseif test="${e.parameterIntegerValues.size()>0}"> 
    218 <% def integerValues = e.parameterInteger.toString().replaceAll("}"," ") %> 
    219 <% print integerValues.substring(1,integerValues.size()) %> 
    220               </g:elseif> 
    221               <g:elseif test="${e.parameterFloatValues.size()>0}"> 
    222 <% def floatValues = e.parameterFloatValues.toString().replaceAll("}"," ") %> 
    223 <% print floatValues.substring(1,floatValues.size()) %> 
    224               </g:elseif> 
    225               </td> 
    226               </tr> 
    227             </g:each> 
    228           </table> 
    229           </g:else> 
    230         </div> 
    231  
    232         <div id="event-description"> 
    233           <g:if test="${study_eventsDescription.size()==0}"> 
    234             No events description in this study 
    235           </g:if> 
    236           <g:else> 
    237             <table> 
    238             <tr> 
    239               <td><b>Event Name</b></td> 
    240               <td><b>Parameters </b></td> 
    241             </tr> 
    242             <tr> 
    243               <td><b></b></td> 
    244               <td><b>Name</b></td> 
    245               <td><b>Description</b></td> 
    246               <td><b>Unit</b></td> 
    247               <td><b>Reference</b></td> 
    248               <td><b>Options</b></td> 
    249               <td><b>Type</b></td> 
    250            </tr> 
    251             <g:each in="${study_eventsDescription}" var="e"> 
    252                 <tr> 
    253                   <td>${e.name} </td> 
    254                 <g:each in="${e.protocol.parameters}" var="p"> 
    255                   <td>${p.name}</td> 
    256                   <td>${p.description}</td> 
    257                   <td>${p.unit}</td> 
    258                   <td>${p.reference}</td> 
    259                   <g:if test="${(p.listEntries.size()==0)}" > 
    260                     <td>-</td> 
    261                   </g:if> 
    262                   <g:else> 
    263                     <td>${p.listEntries.toString().replaceAll("]"," ").substring(1,p.listEntries.toString().size())}</td> 
    264                   </g:else> 
    265                   <td>${p.type}</td> 
     134          <g:if test="${studyInstance.events.size()==0}"> 
     135            No events in this study 
     136          </g:if> 
     137          <g:else> 
     138 
     139              <table> 
     140                <tr> 
     141                  <td><b>Id </b></td> 
     142                  <td><b>Start time</b></td> 
     143                  <td><b>Duration</b></td> 
     144                  <td><b>Type</b></td> 
     145                  <td><b>Sampling event</b></td> 
     146                  <td><b>Parameters</b></td> 
     147                </tr> 
     148 
     149                <g:each in="${studyInstance.events}" var="event"> 
     150                  <tr> 
     151                    <td><g:link controller="event" action="show" id="${event.id}">${event.id}</g:link></td> 
     152                    <td>${event.getPrettyDuration(studyInstance.startDate,event.startTime)}</td> 
     153                    <td>${event.getPrettyDuration()}</td> 
     154                    <td>${event.template.name}</td> 
     155                    <td> 
     156                      <g:if test="${event instanceof dbnp.studycapturing.SamplingEvent}"> 
     157                        <g:checkBox name="samplingEvent" disabled="${true}" value="${true}"/> 
     158                      </g:if> 
     159                      <g:else> 
     160                        <g:checkBox name="event" disabled="${true}" value="${false}" /> 
     161                      </g:else> 
     162                    </td> 
     163                    <td> 
     164                      <g:set var="fieldCounter" value="${1}" /> 
     165                      <g:each in="${event.giveFields()}" var="field"> 
     166                        <g:if test="${event.getFieldValue(field.name)}"> 
     167                          <g:if test="${fieldCounter > 1}">, </g:if> 
     168                            ${field.name} = ${event.getFieldValue( field.name )} 
     169                          <g:set var="fieldCounter" value="${fieldCounter + 1}" /> 
     170                        </g:if> 
     171                      </g:each> 
     172                    </td> 
    266173                  </tr> 
    267174                </g:each> 
    268             </g:each> 
    269           </table> 
    270  
    271           <g:form controller="eventDescription" action="create"> 
    272             <INPUT TYPE=submit name=submit Value="New Event Description"> 
    273           </g:form> 
    274 </g:else> 
     175 
     176              </table> 
     177 
     178          </g:else> 
    275179        </div> 
    276180 
     
    280184          </g:if> 
    281185          <g:else> 
    282           <table> 
    283             <tr> 
    284               <td><b>Name</b></td> 
    285               <td colspan="${study_eventsDescription.size()}"><b>Events</b></td> 
    286               <td><b>Subjects</b></td> 
    287             </tr> 
    288             <tr> 
    289               <td></td> 
    290                 <g:each in="${study_eventsDescription}" var="list"> 
    291               <td> 
    292                   <b>${list}</b> 
    293           </td> 
    294                 </g:each> 
    295           </tr> 
    296             <g:each in="${studyInstance.eventGroups}" var="eventGroup"> 
    297             <tr> 
    298               <td>${eventGroup.name}</td> 
    299  
    300                 <g:each in="${study_eventsDescription}" var="des"> 
    301                   <td> 
    302               <g:each in="${eventGroup.events}" var="e"> 
    303                  <g:if test="${e.eventDescription==des}"> 
    304                    <g:if test="${e.parameterStringValues.size()>0}"> 
    305 <% def stringValues = e.parameterStringValues.toString().replaceAll("}"," ") %> 
    306 <% print stringValues.substring(1,stringValues.size()) %> 
    307               </g:if> 
    308               <g:elseif test="${e.parameterIntegerValues.size()>0}"> 
    309 <% def integerValues = e.parameterInteger.toString().replaceAll("}"," ") %> 
    310 <% print integerValues.substring(1,integerValues.size()) %> 
    311               </g:elseif> 
    312               <g:elseif test="${e.parameterFloatValues.size()>0}"> 
    313 <% def floatValues = e.parameterFloatValues.toString().replaceAll("}"," ") %> 
    314 <% print floatValues.substring(1,floatValues.size()) %> 
    315               </g:elseif> 
    316                  </g:if> 
    317                 </g:each> 
    318                  </td> 
    319               </g:each> 
    320  
    321               <td>${eventGroup.subjects.name.toString().replaceAll("]"," "). 
    322     substring(1,eventGroup.subjects.name.toString().size())}</td> 
    323           </tr> 
    324             </g:each> 
    325           </table> 
     186            <table> 
     187              <tr> 
     188                <td><b>Name</b></td> 
     189                <td colspan="${studyInstance.giveEventTemplates().size()}"><b>Events</b></td> 
     190                <td><b>Subjects</b></td> 
     191              </tr> 
     192              <tr> 
     193                <td></td> 
     194                <g:each in="${studyInstance.giveEventTemplates()}" var="eventTemplate"> 
     195                  <td><b>${eventTemplate.name}</b></td> 
     196                </g:each> 
     197                <td></td> 
     198              </tr> 
     199              <g:each in="${studyInstance.eventGroups}" var="eventGroup"> 
     200                <tr> 
     201                  <td>${eventGroup.name}</td> 
     202 
     203                  <g:each in="${studyInstance.giveEventTemplates()}" var="currentEventTemplate"> 
     204                    <td> 
     205                      <g:each in="${eventGroup.events}" var="event"> 
     206                        <g:if test="${event.template.name==currentEventTemplate.name}"> 
     207 
     208                          <g:set var="fieldCounter" value="${1}" /> 
     209                          <g:each in="${event.giveFields()}" var="field"> 
     210                            <g:if test="${event.getFieldValue(field.name)}"> 
     211                              <g:if test="${fieldCounter > 1}">, </g:if> 
     212                                ${field.name} = ${event.getFieldValue( field.name )} 
     213                              <g:set var="fieldCounter" value="${fieldCounter + 1}" /> 
     214                            </g:if> 
     215                          </g:each> 
     216                        </g:if> 
     217                      </g:each> 
     218                     </td> 
     219                  </g:each> 
     220                  <td>${eventGroup.subjects.name.join( ', ' )}</td> 
     221                </tr> 
     222              </g:each> 
     223            </table> 
    326224          </g:else> 
    327225        </div> 
     
    360258        </div> 
    361259 
     260        <div id="persons"> 
     261          <g:if test="${studyInstance.persons.size()==0}"> 
     262            No persons involved in this study 
     263          </g:if> 
     264          <g:else> 
     265            <table> 
     266              <tr> 
     267                  <td><b>Name</b></td> 
     268                  <td><b>Affiliations</b></td> 
     269                  <td><b>Role</b></td> 
     270                  <td><b>Phone</b></td> 
     271                  <td><b>Email</b></td> 
     272              </tr> 
     273              <g:each in="${studyInstance.persons}" var="studyperson"> 
     274                <tr> 
     275                  <td>${studyperson.person.firstName} ${studyperson.person.midInitials} ${studyperson.person.lastName}</td> 
     276                  <td> 
     277                    ${studyperson.person.affiliations.name.join(', ')} 
     278                  </td> 
     279                  <td>${studyperson.role.name}</td> 
     280                  <td>${studyperson.person.phone}</td> 
     281                  <td>${studyperson.person.email}</td> 
     282                </tr> 
     283              </g:each> 
     284            </table> 
     285          </g:else> 
     286        </div> 
    362287      </div> 
    363288    </div>