Changeset 1367

Show
Ignore:
Timestamp:
12-01-11 11:50:56 (3 years ago)
Author:
t.w.abma@…
Message:

- added dialog (based on study wizard) for more detailed information what goes wrong in validation step

Location:
trunk/grails-app
Files:
4 modified

Legend:

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

    r1358 r1367  
    148148                        } 
    149149                } 
    150  
    151  
    152150                 
    153151                // put your bussiness logic (if applicable) in here 
     
    214212                    success() 
    215213                } else { 
    216                     log.error ".import wizard mapping error, could not validate all entities"                     
    217                     error()                   
     214                    log.error ".import wizard mapping error, could not validate all entities" 
     215                    error() 
    218216                } 
    219217            }.to "pageFour" 
     
    284282 
    285283        // render errors 
    286         error { 
    287             //println "error?" 
     284        error {                         
    288285            render(view: "_error") 
    289286            onRender { 
     
    303300            on("toPageFour").to "pageFour" 
    304301            on("toPageFive").to "save" 
    305  
    306302        } 
    307303 
     
    466462                        // field of type ontology and value "#invalidterm"? 
    467463                        if (field.type == dbnp.studycapturing.TemplateFieldType.ONTOLOGYTERM && 
    468                             params["entity_" + entity.getIdentifier() + "_" + field.escapedName()] == "#invalidterm"                             
     464                            params["entity_" + entity.getIdentifier() + "_" + field.escapedName()] == "#invalidterm" 
    469465                        ) { 
    470466                            invalidontologies++ 
    471467                        } else 
    472                             entity.setFieldValue (field.toString(), params["entity_" + entity.getIdentifier() + "_" + field.escapedName()])                                                 
     468                        if (field.type == dbnp.studycapturing.TemplateFieldType.ONTOLOGYTERM && 
     469                            params["entity_" + entity.getIdentifier() + "_" + field.escapedName()] != "#invalidterm") { 
     470                            removeFailedCell(flow.importer_failedcells, entity) 
     471                            entity.setFieldValue (field.toString(), params["entity_" + entity.getIdentifier() + "_" + field.escapedName()]) 
     472                        } 
     473                        else 
     474                            entity.setFieldValue (field.toString(), params["entity_" + entity.getIdentifier() + "_" + field.escapedName()]) 
    473475                } 
    474476 
     
    482484                    flow.importer_invalidentities++ 
    483485 
    484                     // add errors to map 
    485                     this.appendErrors(entity, flash.wizardErrors, 'subject_' + entity.getIdentifier() + '_')                     
     486                    // add errors to map                     
     487                    this.appendErrors(entity, flash.wizardErrors, "entity_"+entity.getIdentifier() + "_") 
    486488                     
    487489                                        entity.errors.getAllErrors().each() { 
     
    489491                                        } 
    490492                } else {                     
    491                     // Valid entity, remove it from failedcells 
    492                     flow.importer_failedcells.each { record -> 
    493                         record.importcells.each { cell -> 
    494                             // remove the cell from the failed cells session 
    495                                 if (cell.entityidentifier == entity.getIdentifier()) { 
    496                                 record.removeFromImportcells(cell) 
    497                             } 
    498                         } // end of importcells 
    499                     } // end of failedcells 
     493                    removeFailedCell(flow.importer_failedcells, entity) 
    500494                } // end else if 
    501495 
     
    505499        return (flow.importer_invalidentities == 0) ? true : false 
    506500    } // end of method 
     501 
     502    /** 
     503     * @param failedcell failed ontology cells 
     504     * @param entity entity 
     505     */ 
     506    def removeFailedCell(failedcells, entity) { 
     507        // Valid entity, remove it from failedcells 
     508        failedcells.each { record -> 
     509            record.importcells.each { cell -> 
     510            // remove the cell from the failed cells session 
     511                if (cell.entityidentifier == entity.getIdentifier()) { 
     512                    record.removeFromImportcells(cell) 
     513                } 
     514            } // end of importcells 
     515        } // end of failedcells 
     516    } 
    507517 
    508518    /** 
     
    537547        def appendErrors(object, map) { 
    538548                this.appendErrorMap(getHumanReadableErrors(object), map) 
    539         } 
     549    } 
    540550 
    541551        def appendErrors(object, map, prepend) { 
     
    551561        def appendErrorMap(map, mapToExtend) { 
    552562                map.each() {key, value -> 
    553                         mapToExtend[key] = ['key': key, 'value': value, 'dynamic': false] 
     563                        mapToExtend[key] = ['key': key, 'value': value, 'dynamic': false]             
    554564                } 
    555565        } 
     
    571581                object.errors.getAllErrors().each() { error -> 
    572582                        // error.codes.each() { code -> println code } 
     583            println "errors is " + error 
    573584 
    574585                        // generally speaking g.message(...) should work, 
  • trunk/grails-app/services/dbnp/importer/ImporterService.groovy

    r1326 r1367  
    388388     */ 
    389389    boolean persistEntity(entity) { 
    390             println "persisting ${entity}"         
    391             // if not validated 
    392                 if (entity.validate()) { 
    393                         if (entity.save(flush:true)) { //.merge? 
    394                                 return true 
    395                         } 
    396                         else { // if save was unsuccesful 
    397                                 entity.errors.allErrors.each { 
    398                                         println it 
    399                                 } 
    400                                 return false 
    401                         } 
    402                 } 
    403             else { // if not validated 
    404                     entity.errors.each { 
    405                             println it 
    406                     } 
    407                         return false 
    408             } 
     390            log.info ".import wizard persisting ${entity}" 
     391             
     392        if (entity.save(flush:true)) 
     393            return true 
     394        else { // if save was unsuccesful 
     395            entity.errors.allErrors.each { 
     396                log.error ".import wizard: " + it 
     397            } 
     398            return false 
     399        } 
    409400         } 
    410401 
  • trunk/grails-app/views/importer/common/_error.gsp

    r1281 r1367  
    11<% 
    2         /** 
    3          * Error template 
    4          * 
    5          * @author Tjeerd Abma 
    6          * @since 20101008 
    7          * @package importer 
    8          * 
    9          * Revision information:  
    10          * $Rev$ 
    11          * $Author$ 
    12          * $Date$ 
    13          */ 
     2/** 
     3 * Import Wizard error template 
     4 * 
     5 * @author Jeroen Wesbeek 
     6 * @since 20100114 
     7 * @package wizard 
     8 * @see dbnp.studycapturing.ImporterTagLib 
     9 * @see dbnp.studycapturing.ImporterController 
     10 * 
     11 * Revision information: 
     12 * $Rev$ 
     13 * $Author$ 
     14 * $Date$ 
     15 */ 
    1416%> 
    15 <html> 
    16   <head> 
    17     <meta name="layout" content="main"/> 
    18     <title>Importer wizard - error</title> 
    19   </head> 
    20   <body> 
    21   The following went wrong:<br/> 
    22   <p>${error}</p> 
    23   </body> 
    24 </html> 
     17<g:if test="${wizardErrors}"> 
     18        <div id="wizardError" class="error" title="Import wizard errors"> 
     19                <g:each in="${wizardErrors}" var="error" status="e"> 
     20                        <p> 
     21                                <g:if test="${!e}"><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 50px 0;"></span></g:if> 
     22                                ${error.value['key']} &rarr; ${error.value['value']} 
     23                        </p> 
     24                </g:each> 
     25        </div> 
     26        <script type="text/javascript"> 
     27                // mark error fields 
     28                <g:each in="${wizardErrors}" var="error"> 
     29                var element = $("input:[name='${error.key}'], input:[name='${error.key.toLowerCase().replaceAll("([^a-z0-9])","_")}'], select:[name='${error.key}'], select:[name='${error.key.toLowerCase().replaceAll("([^a-z0-9])","_")}'], textarea:[name='${error.key}'], textarea:[name='${error.key.toLowerCase().replaceAll("([^a-z0-9])","_")}']"); 
     30                  <g:if test="${error.value['dynamic']}"> 
     31                element.addClass('error'); 
     32                 </g:if><g:else> 
     33                element.parent().parent().removeClass('required'); 
     34                element.parent().parent().addClass('error'); 
     35                 </g:else> 
     36                </g:each> 
     37 
     38                // show error dialog 
     39                var we = $("div#wizardError"); 
     40                we.dialog({ 
     41                        modal: true, 
     42                        width: 600, 
     43                        buttons: { 
     44                                Ok: function() { 
     45                                        $(this).dialog('close'); 
     46                                        we.remove(); 
     47                                } 
     48                        } 
     49                }); 
     50        </script> 
     51</g:if> 
  • trunk/grails-app/views/importer/pages/_page_three.gsp

    r1277 r1367  
    1717    <importer:missingProperties datamatrix="${importer_importeddata}" failedcells="${importer_failedcells}"/> 
    1818</af:page> 
     19 
     20<g:render template="common/error"/>