Changeset 1411

Show
Ignore:
Timestamp:
18-01-11 15:51:25 (3 years ago)
Author:
t.w.abma@…
Message:

- cleaned up importer service and controller (and removed flow variables for failed/succesfull entities)

Location:
trunk/grails-app
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/importer/ImporterController.groovy

    r1388 r1411  
    191191                    success() 
    192192                } else { 
    193                     println "properties are wrong" 
     193                    log.error ".import wizard, properties are set wrong" 
    194194                    error() 
    195195                } 
     
    273273                    if (pluginManager.getGrailsPlugin('grom')) ".persisting instances to the database...".grom()                     
    274274 
    275                     if (saveEntities(flow, params)) {                         
     275                    if (saveEntities(flow, params)) { 
    276276                        success() 
    277                     } else { 
     277                    } else {                         
    278278                        log.error ".import wizard imported error, something went wrong showing the imported entities"                         
    279279                        //throw Exception 
     
    281281                } catch (Exception e) { 
    282282                    // put your error handling logic in 
    283                     // here                     
     283                    // here 
     284                    log.error ".import wizard, could not save entities:\n" + e.dump() 
    284285                    flow.page = 4 
    285286                    error() 
     
    543544    } 
    544545 
    545     boolean saveEntities(flow, params) { 
    546             def (validatedSuccesfully, updatedEntities, failedToPersist) = ImporterService.saveDatamatrix(flow.importer_study, flow.importer_importeddata) 
    547  
    548             flow.importer_validatedsuccesfully = validatedSuccesfully 
    549             flow.importer_failedtopersist = failedToPersist 
    550             flow.imported_updatedentities = updatedEntities 
    551             flow.importer_totalrows = flow.importer_importeddata.size 
    552             flow.importer_referer = "" 
     546    boolean saveEntities(flow, params) {             
     547            //def (validatedSuccesfully, updatedEntities, failedToPersist) = 
     548            try { 
     549                ImporterService.saveDatamatrix(flow.importer_study, flow.importer_importeddata) 
     550                 
     551            } 
     552            catch (Exception e) {                 
     553                log.error ".import wizard saveEntities error\n" + e.dump() 
     554            } 
     555             
     556            //flow.importer_validatedsuccesfully = validatedSuccesfully 
     557            //flow.importer_failedtopersist = failedToPersist 
     558            //flow.imported_updatedentities = updatedEntities 
     559            //flow.importer_totalrows = flow.importer_importeddata.size 
     560            //flow.importer_referer = ""             
    553561 
    554562            return true 
     
    596604                def errors = [:] 
    597605                object.errors.getAllErrors().each() { error -> 
    598                         // error.codes.each() { code -> println code } 
    599             println "errors is " + error 
     606                        // error.codes.each() { code -> println code }             
    600607 
    601608                        // generally speaking g.message(...) should work, 
  • trunk/grails-app/services/dbnp/importer/ImporterService.groovy

    r1402 r1411  
    6161            def datamatrix_celldata = df.formatCellValue(sheet.getRow(datamatrix_start).getCell(columnindex)) 
    6262            def datamatrix_cell     = sheet.getRow(datamatrix_start).getCell(columnindex)            
    63             def headercell = sheet.getRow(headerrow-1+sheet.getFirstRowNum()).getCell(columnindex) 
     63        def headercell = sheet.getRow(headerrow-1+sheet.getFirstRowNum()).getCell(columnindex) 
    6464            def tft = TemplateFieldType.STRING //default templatefield type 
    6565 
     
    210210    def importData(template_id, Workbook wb, int sheetindex, int rowindex, mcmap) { 
    211211        def sheet = wb.getSheetAt(sheetindex) 
     212    def template = Template.get(template_id) 
    212213        def table = [] 
    213         def failedcells = [] // list of records 
     214    def failedcells = [] // list of records 
    214215         
    215216        // walk through all rows and fill the table with records 
    216217        (rowindex..sheet.getLastRowNum()).each { i ->        
    217218            // Create an entity record based on a row read from Excel and store the cells which failed to be mapped 
    218             def (record, failed) = createRecord(template_id, sheet.getRow(i), mcmap) 
     219            def (record, failed) = createRecord(template, sheet.getRow(i), mcmap) 
    219220 
    220221            // Add record with entity and its values to the table 
     
    276277        def validatedSuccesfully = 0 
    277278    def entitystored = null 
    278     def failedtopersist = [] 
    279     def persisterrors = [] 
    280     def updatedentities = [] 
    281  
     279     
    282280    // Study passed? Sync data 
    283281    if (study!=null) study.refresh() 
     282 
     283    //study.subjects.each { it.refresh() } 
    284284         
    285285        // go through the data matrix, read every record and validate the entity and try to persist it 
    286286        datamatrix.each { record -> 
    287             record.each { entity ->             
     287            record.each { entity ->                 
    288288                        switch (entity.getClass()) { 
    289289                        case Study       :  log.info "Persisting Study `" + entity + "`: " 
    290290                                                entity.owner = AuthenticationService.getLoggedInUser()                                               
    291                                                 if (persistEntity(entity)) validatedSuccesfully++; 
    292                                                     else failedtopersist.add(entity) 
     291                                                persistEntity(entity)                                                     
    293292                                        break 
    294293                        case Subject :  log.info "Persisting Subject `" + entity + "`: " 
    295294 
    296295                                        // is the current entity not already in the database? 
    297                                         entitystored = isEntityStored(entity) 
     296                                        //entitystored = isEntityStored(entity) 
    298297                                                 
    299298                                        // this entity is new, so add it to the study 
    300                                         if (entitystored==null) study.addToSubjects(entity) 
    301                                             else { // existing entity, so update it 
    302                                                 updateEntity(entitystored, entity) 
    303                                                 updatedentities.add(entity) 
    304                                             } 
    305  
    306                                         if (persistEntity(study)) validatedSuccesfully++; 
    307                                             else failedtopersist.add(entity) 
     299                                        //if (entitystored==null) 
     300                                        study.addToSubjects(entity) 
     301                                         
     302                                        /*else { // existing entity, so update it 
     303                                            updateEntity(entitystored, entity) 
     304                                            updatedentities.add(entity) 
     305                                        }*/ 
     306     
    308307                                        break 
    309308                        case Event       :  log.info "Persisting Event `" + entity + "`: "                                       
    310309                                        study.addToEvents(entity) 
    311                                         if (persistEntity(entity)) validatedSuccesfully++; 
    312                                             else failedtopersist.add(entity) 
     310                                        persistEntity(entity) 
    313311                                        break 
    314312                        case Sample      :  log.info "Persisting Sample `" + entity +"`: "                                       
    315313                                                 
    316                                         // is this sample validatable (sample name unique for example?) 
    317                                         if (entity.validate()) { 
    318                                             study.addToSamples(entity) 
    319                                                 if (persistEntity(study)) validatedSuccesfully++; 
    320                                         } else { 
    321                                             failedtopersist.add(entity) 
    322                                         } 
     314                                        // is this sample validatable (sample name unique for example?)                                         
     315                                        study.addToSamples(entity) 
     316                                        persistEntity(study) 
     317                                         
    323318                                        break 
    324319                    case SamplingEvent: log.info "Persisting SamplingEvent `" + entity + "`: "                                     
    325320                                        study.addToSamplingEvents(entity) 
    326                                         if (persistEntity(entity)) validatedSuccesfully++; 
    327                                             else failedtopersist.add(entity) 
     321                                        persistEntity(entity) 
    328322                                        break 
    329                         default          :  log.info "Skipping persisting of `" + entity.getclass() +"`" 
    330                                         failedtopersist.add(entity) 
     323                        default          :  log.info "Skipping persisting of `" + entity.getclass() +"`"                                         
    331324                                        break 
    332325                        } // end switch 
    333326            } // end record 
    334         } // end datamatrix     
    335         return [validatedSuccesfully, updatedentities, failedtopersist] 
     327        } // end datamatrix 
     328 
     329 
     330    if (study!=null) persistEntity(study) 
     331     
     332        //return [validatedSuccesfully, updatedentities, failedtopersist] 
     333    //return [0,0,0] 
    336334    } 
    337335 
     
    391389    boolean persistEntity(entity) { 
    392390            log.info ".import wizard persisting ${entity}" 
    393              
    394         if (entity.save(flush:true)) 
    395             return true 
    396         else { // if save was unsuccesful 
    397             entity.errors.allErrors.each { 
    398                 log.error ".import wizard: " + it 
    399             } 
    400             return false 
    401         } 
     391 
     392         try {           
     393                entity.save(flush:true) 
     394                return true 
     395 
     396         } catch (Exception e) { 
     397             def session = sessionFactory.currentSession 
     398             session.setFlushMode(org.hibernate.FlushMode.MANUAL) 
     399             log.error ".import wizard, failed to save entity:\n" + org.apache.commons.lang.exception.ExceptionUtils.getRootCauseMessage(e) 
     400         } 
     401 
     402         return true 
    402403         } 
    403404 
     
    408409         * @param excelrow POI based Excel row containing the cells 
    409410         * @param mcmap map containing MappingColumn objects 
    410          * @return list of entities and list of failed cells 
     411     * @return list of entities and list of failed cells 
    411412         */ 
    412         def createRecord(template_id, Row excelrow, mcmap) { 
    413                 def df = new DataFormatter() 
    414                 def template = Template.get(template_id) 
     413        def createRecord(template, Row excelrow, mcmap) { 
     414                def df = new DataFormatter()             
    415415        def tft = TemplateFieldType 
    416416                def record = [] // list of entities and the read values 
     
    441441                    // which entity does the current cell (field) belong to? 
    442442                    switch (mc.entity) { 
    443                         case Study: // does the entity already exist in the record? If not make it so. 
    444                         (record.any {it.getClass() == mc.entity}) ? 0 : record.add(study)                         
    445                                                 study.setFieldValue(mc.property, value) 
    446                                                 break 
    447                         case Subject: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(subject) 
    448                                                 subject.setFieldValue(mc.property, value) 
    449                                                 break 
    450                         case SamplingEvent: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(samplingEvent) 
    451                                                 samplingEvent.setFieldValue(mc.property, value) 
    452                                                 break 
    453                         case Event: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(event) 
    454                                                 event.setFieldValue(mc.property, value) 
    455                                                 break 
    456                         case Sample: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(sample) 
    457                                                 sample.setFieldValue(mc.property, value) 
    458                                                 break 
    459                         case Object:   // don't import 
    460                                                 break 
     443                        case    Study: // does the entity already exist in the record? If not make it so. 
     444                                (record.any {it.getClass() == mc.entity}) ? 0 : record.add(study) 
     445                                study.setFieldValue(mc.property, value) 
     446                                break 
     447                        case    Subject: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(subject) 
     448                                subject.setFieldValue(mc.property, value) 
     449                                break 
     450                        case    SamplingEvent: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(samplingEvent) 
     451                                samplingEvent.setFieldValue(mc.property, value) 
     452                                break 
     453                        case    Event: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(event) 
     454                                event.setFieldValue(mc.property, value) 
     455                                break 
     456                        case    Sample: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(sample) 
     457                                sample.setFieldValue(mc.property, value) 
     458                                break 
     459                        case    Object:   // don't import 
     460                                break 
    461461                    } // end switch 
    462462                } catch (Exception iae) { 
  • trunk/grails-app/views/importer/pages/_final_page.gsp

    r1394 r1411  
    2323</p> 
    2424 
    25 ${importer_validatedsuccesfully} of ${importer_totalrows} rows were imported succesfully. 
    26  
    27     <g:if test="${importer_failedtopersist}"> 
    28       <p>The following entities could not be persisted:</p> 
    29       <table> 
    30       <g:each var="entity" in="${importer_failedtopersist}"> 
    31         <tr> 
    32         <g:each var="field" in="${entity.giveFields()}"> 
    33           <td> 
    34             <g:if test="${entity.getFieldValue(field.name)!=null}"> 
    35               <b>${field.name}</b> ${entity.getFieldValue(field.name)} 
    36             </g:if> 
    37            <g:else><b>${field.name}</b> &#215; 
    38             </g:else> 
    39           </td> 
    40         </g:each> 
    41         <td> 
    42            <g:each var="error" in="${entity.errors.allErrors}"> 
    43              <b>error</b>: field `${error.getField()}` rejected value: ${error.getRejectedValue()}</b> 
    44         </g:each> 
    45         </td> 
    46       </tr> 
    47       </g:each> 
    48       </table> 
    49     </g:if> 
     25All rows were imported succesfully. 
    5026 
    5127    <g:if test="${importer_referer}">