Changeset 997

Show
Ignore:
Timestamp:
26-10-10 16:33:21 (3 years ago)
Author:
j.a.m.wesbeek@…
Message:

- resolved issue #127 (  https://trac.nbic.nl/gscf/ticket/127 ): new terms do not show in termSelect element after adding them

This bug is caused by the Ontology being updated on the ncbo side. We already have one version in the database (1.71) which has only one term linked (glucose). When you tried to add other terms, these terms came from a newer version of the Ontology (1.72) which did not yet exist in the database so a new Ontology was created. The Terms benzo[a]pyrene, benzene and benzenediols were added to this Ontology.

Resolution: before adding a new ontology, a lookup is performed on name. If this returns an existing ontology, the existing ontology is updated with the updated information of the new version of the ontology. This sollution is not ideal, but good enough for now...

Location:
trunk/grails-app
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BootStrapStudies.groovy

    r976 r997  
    9090 
    9191                def glucoseTerm = new Term( 
    92                         name: 'Glucose', 
     92                        name: 'glucose', 
    9393                        ontology: chebiOntology, 
    9494                        accession: 'CHEBI:17234' 
  • trunk/grails-app/controllers/dbnp/studycapturing/TermEditorController.groovy

    r959 r997  
    5858                        } 
    5959                        on("add") { 
    60                                 println params 
     60                                // get ontology by ncboVersionedId 
    6161                                def ontology = Ontology.findByNcboVersionedId( params.get('term-ontology_id') as int ) 
    6262                def strTerm = params.get('term') 
     
    6464                                // do we have an ontology? 
    6565                                if (!ontology && params.get('term-ontology_id')) { 
     66                                        // no, so either this is a new ontology that does not yet 
     67                                        // exist in the database, or it is a new version of an 
     68                                        // ontology that is already present in the database 
    6669                                        println ".ontology missing, first fetch ontology information" 
    6770 
     
    7477 
    7578                                                // instantiate Ontology with the proper values 
    76                                                 ontology = Ontology.getBioPortalOntologyByVersionedId( params.get('term-ontology_id') ).save(flush:true) 
     79                                                ontology = Ontology.getBioPortalOntologyByVersionedId( params.get('term-ontology_id') ) 
    7780 
    78                                                 if (ontology.validate()) { 
     81                                                // check if this is a newer version of an existing ontology 
     82                                                def checkOntology = Ontology.findByName( ontology.name ) 
     83                                                if ( checkOntology ) { 
     84                                                        // this is a newer version of an existing Ontology, update 
     85                                                        // the ontology to a newer version. This is not the best 
     86                                                        // way to handle these updates as we don't know if terms 
     87                                                        // have been updated. However, introducing different versions 
     88                                                        // of Ontologies results into numerous difficulties as well: 
     89                                                        //      - what to do with studies that rely on an older ontology 
     90                                                        //      - when a new ontology is added, the existing terms of the 
     91                                                        //        older version are lacking in the new version 
     92                                                        //      - the webservice can only search on ontologyid, not on 
     93                                                        //        versions of ncboVersioned id's 
     94                                                        //      - if the name has changed between versions this check 
     95                                                        //        will not work anymore 
     96                                                        //      - etc :) 
     97                                                        // So for now, we will just update the existing ontology with 
     98                                                        // the new information until it becomes clear this needs a 
     99                                                        // more thorough workaround... 
     100                                                        // 
     101                                                        // Jeroen, 20101026 
     102 
     103                                                        // update ontology values 
     104                                                        checkOntology.ncboVersionedId   = ontology.ncboVersionedId 
     105                                                        checkOntology.versionNumber             = ontology.versionNumber 
     106                                                        checkOntology.url                               = ontology.url 
     107 
     108                                                        // store the ontology 
     109                                                        if ( checkOntology.validate() ) { 
     110                                                                println ".updated ontology with new version information" 
     111                                                                checkOntology.save(flush:true) 
     112 
     113                                                                // and use this existing ontology 
     114                                                                ontology = checkOntology 
     115                                                        } 
     116                                                } else if ( ontology.validate() ) { 
     117                                                        // store the ontology 
     118                                                        println ".adding new ontology" 
    79119                                                        ontology.save(flush:true) 
    80120                                                } 
     
    83123                                                // ontology-id is invalid (hence, the term 
    84124                                                // is invalid) 
     125                                                println ".oops? --> " + e.getMessage() 
    85126                                                flash.errors = ["We could not add the ontology for this term, please try again"] 
    86127                                        } 
    87128                                } 
    88129 
    89                                 // instantiate term with parameters 
    90                                 def term = new Term( 
    91                                         name: strTerm, 
    92                                         ontology: ontology, 
    93                                         accession: params.get('term-concept_id') 
    94                                 ) 
     130                                // got an error? 
     131                                if (!flash.errors) { 
     132                                        // instantiate term with parameters 
     133                                        def term = new Term( 
     134                                                name: strTerm, 
     135                                                ontology: ontology, 
     136                                                accession: params.get('term-concept_id') 
     137                                        ) 
    95138 
    96                                 // validate term 
    97                                 if (term.validate()) { 
    98                                         // save the term to the database 
    99                                         if (term.save(flush:true)) { 
    100                                                 flash.message = "'" + params.get('term') + "' was successfully added, either search for another term to add or close this window" 
    101                                                 success() 
     139                                        // validate term 
     140                                        if (term.validate()) { 
     141                                                // save the term to the database 
     142                                                if (term.save(flush:true)) { 
     143                                                        flash.message = "'" + params.get('term') + "' was successfully added, either search for another term to add or close this window" 
     144                                                        success() 
     145                                                } else { 
     146                                                        flash.errors = ["We encountered a problem while storing the selected term. Please try again."] 
     147                                                        term.errors.each() { println it } 
     148                                                        error() 
     149                                                } 
    102150                                        } else { 
    103                                                 flash.errors = ["We encountered a problem while storing the selected term. Please try again."] 
     151                                                // term did not validate properly 
    104152                                                term.errors.each() { println it } 
     153                                                if (term.errors =~ 'unique') { 
     154                                                        flash.errors = ["'" + params.get('term') + "' already exists, either search for another term or close this window"] 
     155                                                } else { 
     156                                                        flash.errors = ["We encountered a problem while storing the selected term. Please try again."] 
     157                                                } 
     158 
    105159                                                error() 
    106160                                        } 
    107                                 } else { 
    108                                         // term did not validate properly 
    109                                         term.errors.each() { println it } 
    110                                         if (term.errors =~ 'unique') { 
    111                                                 flash.errors = ["'" + params.get('term') + "' already exists, either search for another term or close this window"] 
    112                                         } else { 
    113                                                 flash.errors = ["We encountered a problem while storing the selected term. Please try again."]                                           
    114                                         } 
    115                                          
    116                                         error() 
    117161                                } 
    118162                        }.to "terms"