source: trunk/grails-app/controllers/dbnp/studycapturing/TermEditorController.groovy @ 573

Last change on this file since 573 was 573, checked in by duh, 12 years ago
  • fixed issue with auto-creating ontologies when an ontology does not yet exist for a given term
  • Property svn:keywords set to Date Author Rev
File size: 2.8 KB
Line 
1/**
2 * TermEditorController Controller
3 *
4 * Webflow driven term editor
5 *
6 * @author  Jeroen Wesbeek
7 * @since       20100420
8 * @package     studycapturing
9 *
10 * Revision information:
11 * $Rev: 573 $
12 * $Author: duh $
13 * $Date: 2010-06-16 14:17:36 +0000 (wo, 16 jun 2010) $
14 */
15package dbnp.studycapturing
16
17import dbnp.data.Term
18import dbnp.data.Ontology
19
20class TermEditorController {
21        /**
22         * index closure
23         */
24    def index = {
25                // got a ontology get parameter?
26                def ontologies = (params.ontologies) ? params.ontologies : null
27
28                // enter the flow!
29        redirect(action: 'pages', params:["ontologies":ontologies])
30    }
31
32        /**
33         * Webflow
34         */
35        def pagesFlow = {
36                // start the flow
37                onStart {
38                        println "start term / ontology editor flow"
39
40                        if (params.ontologies) {
41                                flow.ontologies         = params.ontologies
42                                flow.ontologiesList     = []
43                                params.ontologies.split(/\,/).each() { ncboId ->
44                                        // trim the id
45                                        ncboId.trim()
46
47                                        // and add to the flow scope
48                                        flow.ontologiesList[ flow.ontologies.size() ] = ncboId
49                                }
50                        }
51                }
52
53                // main term editor page
54                terms {
55                        render(view: "terms")
56                        onRender {
57                                println ".rendering term selection popup"
58                        }
59                        on("add") {
60                                println params
61                                def ontology = Ontology.findByNcboVersionedId( params.get('term-ontology_id') as int )
62                def strTerm = params.get('term')
63
64                                // do we have an ontology?
65                                if (!ontology) {
66                                        println ".ontology missing, first fetch ontology information"
67
68                                        // use the NCBO REST service to fetch ontology information
69                                        try {
70                                                def url = "http://rest.bioontology.org/bioportal/ontologies/" + params.get('term-ontology_id')
71                                                def xml = new URL( url ).getText()
72                                                def data = new XmlParser().parseText( xml )
73                                                def bean = data.data.ontologyBean
74
75                                                // instantiate Ontology with the proper values
76                                                ontology = Ontology.getBioPortalOntologyByVersionedId( params.get('term-ontology_id') ).save(flush:true)
77                                                println ontology
78
79                                                if (ontology.validate()) {
80                                                        ontology.save(flush:true)
81                                                }
82                                        } catch (Exception e) {
83                                                // something went wrong, probably the
84                                                // ontology-id is invalid (hence, the term
85                                                // is invalid)
86                                        }
87                                }
88
89                                // instantiate term with parameters
90                                def term = new Term(
91                                        name: strTerm,
92                                        ontology: ontology,
93                                        accession: params.get('term-concept_id')
94                                )
95
96                                // validate term
97                                if (term.validate()) {
98                                        // save the term to the database
99                                        if (term.save(flush:true)) {
100                                                flash.message = "Term addition succeeded"
101                                                success()
102                                        } else {
103                                                flash.message = "Oops, we encountered a problem while storing the selected term. Please try again."
104                                                term.errors.each() { println it }
105                                                error()
106                                        }
107                                } else {
108                                        // term did not validate properly
109                                        flash.message = "Oops, we encountered a problem while storing the selected term. Please try again."
110                                        term.errors.each() { println it }
111                                        error()
112                                }
113                        }.to "terms"
114                }
115        }
116}
Note: See TracBrowser for help on using the repository browser.