Changeset 1611


Ignore:
Timestamp:
Mar 9, 2011, 10:24:41 PM (6 years ago)
Author:
robert@…
Message:

Improved simple study wizard

Location:
trunk/grails-app
Files:
3 edited

Legend:

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

    r1610 r1611  
    6969                                                        'SamplingEvent': Template.findAllByEntity( SamplingEvent.class )
    7070                                ];
     71                       
    7172                                flow.encodedEntity = [
    7273                                                        'Sample': gdtService.encryptEntity( Sample.class.name ),
     
    7475                                                        'Event': gdtService.encryptEntity( Event.class.name ),
    7576                                                        'SamplingEvent': gdtService.encryptEntity( SamplingEvent.class.name )
    76                                                 ]
     77                                ]
    7778
    7879                                if (flow.study.samples)
     
    272273                                        flow.study.addToAssays( flow.assay );
    273274                                }
    274                                
    275                                 println "Events: " + flow.study.events
    276                                 println "Samples: " + flow.study.samples
    277                                 println "Eventgroups" + flow.study.eventGroups
    278275                               
    279276                                if( flow.study.save( flush: true ) ) {
     
    746743                                                        break;
    747744                                                case Subject:
    748                                                         if( !preferredIdentifier || !study.subjects?.find( equalClosure ) ) {
    749                                                                 study.addToSubjects( entity );
     745                                                        // Subjects should have unique names; if the user has entered the same name multiple times,
     746                                                        // the subject will be renamed
     747                                                        def subjectFound = study.subjects?.find( equalClosure ) ;
     748                                                        if( preferredIdentifier && subjectFound ) {
     749                                                                def baseName = entity.getFieldValue( preferredIdentifier.name )
     750                                                                def counter = 1;
     751                                                               
     752                                                                while( study.subjects?.find { it.getFieldValue( preferredIdentifier.name ) == entity.getFieldValue( preferredIdentifier.name ) } ) {
     753                                                                        entity.setFieldValue( preferredIdentifier.name, baseName + " (" + counter++ + ")" )
     754                                                                }
    750755                                                        }
     756                                                        study.addToSubjects( entity );
     757                                                       
    751758                                                        break;
    752759                                                case Event:
  • trunk/grails-app/services/dbnp/importer/ImporterService.groovy

    r1610 r1611  
    282282                // walk through all rows and fill the table with records
    283283                for( int i = rowindex; i <= sheet.getLastRowNum(); i++ ) {
    284                         // Create an entity record based on a row read from Excel and store the cells which failed to be mapped
    285                         def (record, failed) = importOrUpdateRecord( templates, entities, sheet.getRow(i), mcmap, parent, table, existingEntities[i] );
    286 
    287                         // Setup the relationships between the imported entities
    288                         relateEntities( record );
    289 
    290                         // Add record with entities and its values to the table
    291                         table.add(record)
    292 
    293                         // If failed cells have been found, add them to the failed cells list
    294                         if (failed?.importcells?.size() > 0) failedcells.add(failed)
     284                        def row = sheet.getRow(i);
     285                       
     286                        if( row && !rowIsEmpty( row ) ) {
     287                                // Create an entity record based on a row read from Excel and store the cells which failed to be mapped
     288                                def (record, failed) = importOrUpdateRecord( templates, entities, row, mcmap, parent, table, existingEntities[i] );
     289       
     290                                // Setup the relationships between the imported entities
     291                                relateEntities( record );
     292       
     293                                // Add record with entities and its values to the table
     294                                table.add(record)
     295       
     296                                // If failed cells have been found, add them to the failed cells list
     297                                if (failed?.importcells?.size() > 0) failedcells.add(failed)
     298                        }
    295299                }
    296300
    297301                return [ "table": table, "failedCells": failedcells ]
     302        }
     303       
     304        /**
     305         * Checks whether an excel row is empty
     306         * @param row   Row from the excel sheet
     307         * @return              True if all cells in this row are empty or the given row is null. False otherwise
     308         */
     309        def rowIsEmpty( Row excelRow ) {
     310                if( !excelRow )
     311                        return true;
     312               
     313                def df = new DataFormatter();
     314                for( int i = excelRow.getFirstCellNum(); i < excelRow.getLastCellNum(); i++ ) {
     315                        Cell cell = excelRow.getCell( i );
     316                       
     317                        try {
     318                                def value = df.formatCellValue(cell)
     319                                if( value )
     320                                        return false
     321                        } catch (NumberFormatException nfe) {
     322                                // If the number can't be formatted, the row isn't empty
     323                                return false;
     324                        }
     325                }
     326               
     327                return true;
    298328        }
    299329
     
    344374                        importedEntities = importedRows.flatten().findAll { it.class == dbnp.studycapturing.Sample }.unique();
    345375
    346                 def importedSample = null // findEntityInImportedEntities( dbnp.studycapturing.Sample, excelRow, mcmap, importedEntities, df )
    347                 def imported = [] // retrieveEntitiesBySample( importedSample );
     376                def importedSample = findEntityInImportedEntities( dbnp.studycapturing.Sample, excelRow, mcmap, importedEntities, df )
     377                def imported = retrieveEntitiesBySample( importedSample );
     378               
    348379                for( entity in entities ) {
    349380                        // Check whether this entity should be added or updated
     
    372403
    373404                        // Go through the Excel row cell by cell
    374                         for (Cell cell: excelRow) {
     405                        for( int i = excelRow.getFirstCellNum(); i < excelRow.getLastCellNum(); i++ ) {
     406                                Cell cell = excelRow.getCell( i );
     407                               
    375408                                // get the MappingColumn information of the current cell
    376409                                def mc = mcmap[cell.getColumnIndex()]
     
    426459         */
    427460        def findEntityByRow( Class entity, Row excelRow, def mcmap, Study parent = null, List importedEntities = [], DataFormatter df = null ) {
     461                if( !excelRow )
     462                        return
     463               
    428464                if( df == null )
    429465                        df = new DataFormatter();
  • trunk/grails-app/views/simpleWizard/simpleWizard/finish.gsp

    r1608 r1611  
    2525                        <g:link class="view" controller="study" action="show" id="${study.id}">View study</g:link>
    2626                        <g:link class="edit" controller="simpleWizard" action="index" id="${study.id}">Edit study</g:link>
    27                         <g:link class="restart" controller="simpleWizard" action="study">Add another study</g:link>
     27                        <g:link class="restart" controller="simpleWizard" action="index">Add another study</g:link>
    2828                </p>
    2929        </div>
Note: See TracChangeset for help on using the changeset viewer.