Changeset 1774


Ignore:
Timestamp:
Apr 19, 2011, 3:28:58 PM (6 years ago)
Author:
work@…
Message:
File:
1 edited

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 {
Note: See TracChangeset for help on using the changeset viewer.