Changeset 1774

Show
Ignore:
Timestamp:
19-04-11 15:28:58 (3 years ago)
Author:
work@…
Message:

- resolves #398

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/studycapturing/StudyWizardController.groovy

    r1744 r1774  
    149149                                                // load study 
    150150                                                if (this.loadStudy(flow, flash, [studyid:flow.jump.id],authenticationService.getLoggedInUser())) { 
    151                                                         // iterate through eventgroups and get their identifiers. Somehow 
    152                                                         // we really need to do this here, otherwise (only!) the eventGroup's 
    153                                                         // identifiers keep iterating in the events page, messing up the 
    154                                                         // GET request, and deleting all samples 
    155                                                         //      use case:       1) load study 
    156                                                         //                              2) click samples tab 
    157                                                         //                              3) click events tab (eventGroup identifiers increases for the SAME 
    158                                                         //                                 eventGroup while you would expect the identifier for a eventGroup 
    159                                                         //                                 to remain stable) 
    160                                                         //                              4) click next or sample tab --> get parameters are wrong so all samples 
    161                                                         //                                 are deleted 
    162                                                         //                              5) click on the events tab --> the eventGroup identifiers are now stable?! 
    163                                                         // The only thing that makes EventGroup different from the other entities is that 
    164                                                         // EventGroup extends Identity directly, while the other entities extend TemplateEntity 
    165                                                         // which in turn extends Identity. 
    166                                                         // 
    167                                                         // The following line fixed the issue, but it is extremely weird we even have to do this... 
    168                                                         flow.study.eventGroups.each { it.getIdentifier() } 
    169  
    170151                                                        toStudyPage() 
    171152                                                } else { 
     
    11891170                        // set 'quicksave' variable 
    11901171                        flow.quickSave = true 
     1172 
     1173                        // somehow the identifiers not always seem to work as expected 
     1174                        // when data is lazily fetched from the database. Iterating over 
     1175                        // the hasMany relationships and pre-fetching the identfiers after 
     1176                        // loading the study seems to solve the issues. 
     1177                        // See #367, #397 and #398 
     1178                        flow.study.hasMany.each { name, instance -> 
     1179                                if (flow.study."${name}"?.size() && flow.study."${name}"?.first().hasProperty('template')) { 
     1180                                        flow.study."${name}"?.each { it.getIdentifier() } 
     1181                                } 
     1182                        } 
    11911183 
    11921184                        return true 
     
    16341626 
    16351627                        // handle eventGrouping 
    1636                         ( ((flow.study.events) ? flow.study.events : []) + ((flow.study.samplingEvents) ? flow.study.samplingEvents : []) ) .each() { event -> 
     1628                        ( ((flow.study.events) ? flow.study.events : []) + ((flow.study.samplingEvents) ? flow.study.samplingEvents : []) ) .each { event -> 
    16371629                                if (params.get( 'event_' + event.getIdentifier() + '_group_' + eventGroup.getIdentifier() )) { 
    16381630                                        // add to eventGroup 
     
    16621654 
    16631655                                                                // instantiate a sample 
    1664                                                                 flow.study.addToSamples( 
    1665                                                                         new Sample( 
    1666                                                                                 parentSubject   : subject, 
    1667                                                                                 parentEvent             : event, 
    1668                                                                                 parentEventGroup: eventGroup, 
    1669                                                                                 name                    : sampleName, 
    1670                                                                                 template                : (event.sampleTemplate) ? event.sampleTemplate : '' 
    1671                                                                         ) 
     1656                                                                def newSample = new Sample( 
     1657                                                                        parentSubject   : subject, 
     1658                                                                        parentEvent             : event, 
     1659                                                                        parentEventGroup: eventGroup, 
     1660                                                                        name                    : sampleName, 
     1661                                                                        template                : (event.sampleTemplate) ? event.sampleTemplate : '' 
    16721662                                                                ) 
     1663 
     1664                                                                // and add it 
     1665                                                                flow.study.addToSamples(newSample) 
    16731666                                                        } 
    16741667                                                } 
     
    17581751 
    17591752                                                        // instantiate a sample 
    1760                                                         flow.study.addToSamples( 
    1761                                                                 new Sample( 
     1753                                                        def newSample = new Sample( 
    17621754                                                                        parentSubject   : subject, 
    17631755                                                                        parentEvent             : samplingEvent, 
     
    17661758                                                                        template                : (samplingEvent.sampleTemplate) ? samplingEvent.sampleTemplate : '' 
    17671759                                                                ) 
    1768                                                         ) 
     1760 
     1761                                                        flow.study.addToSamples(newSample) 
    17691762                                                } 
    17701763                                        } else { 
     1764                                                // do nothing 
    17711765                                        } 
    17721766                                } else {