Changeset 997


Ignore:
Timestamp:
Oct 26, 2010, 4:33:21 PM (6 years ago)
Author:
j.a.m.wesbeek@…
Message:

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 edited

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