root/trunk/grails-app/controllers/dbnp/studycapturing/TermEditorController.groovy @ 1192

Revision 1192, 3.6 KB (checked in by work@…, 3 years ago)

- looking into #187 which is reproducable on ci, but not on dev. Testing with flushing to database...

  • Property svn:keywords set to Author Date Rev
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$
12 * $Author$
13 * $Date$
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                                def ncboId = params.get('term-ncbo_id')
61                                def ncboVersionedId = params.get('term-ontology_id')
62                                def ontology = null
63
64                                try {
65                                        // got the ncboId?
66                                        if (ncboId && ncboId != "null") {
67                                                // find ontology by ncboId
68                                                ontology = Ontology.findByNcboId(ncboId as int)
69                                        } else if (ncboVersionedId && ncboVersionedId != "null") {
70                                                // find ontology by ncboId
71                                                ontology = Ontology.findByNcboVersionedId(ncboVersionedId as int)
72                                        } else {
73                                                // somehow we didn't get both the ncboId as well
74                                                // as the versioned id. Throw an error.
75                                                throw new Exception("We did not receive the ontology with your request, please try again")
76                                        }
77
78                                        // do we have the ontology?
79                                        if (!ontology) {
80                                                // no, try to instantiate by using the BioPortal
81                                                ontology = (ncboId && ncboId != "null") ? Ontology.getBioPortalOntology( ncboId as int ) : Ontology.getBioPortalOntologyByVersionedId( ncboVersionedId as String )
82
83                                                // validate and save ontology
84                                                if (!(ontology.validate() && ontology.save(flush:true))) {
85                                                        if (ncboId && ncboId != "null") {
86                                                                throw new Exception("An Ontology with ncboId ${ncboId} (= Ontology ID) does not seem valid. See http://bioportal.bioontology.org/ontologies")
87                                                        } else {
88                                                                throw new Exception("An Ontology with ncboVersionedId ${ncboVersionedId} (= URL id) does not seem valid. See http://bioportal.bioontology.org/ontologies")
89                                                        }
90                                                }
91                                        }
92
93                                        // instantiate term with parameters
94                                        def term = new Term(
95                                                name: params.get('term'),
96                                                ontology: ontology,
97                                                accession: params.get('term-concept_id')
98                                        )
99
100                                        // validate term
101                                        if (term.validate()) {
102                                                // save the term to the database
103                                                if (term.save(flush:true)) {
104                                                        flash.message = "'" + params.get('term') + "' was successfully added, either search for another term to add or close this window"
105                                                        success()
106                                                } else {
107                                                        flash.errors = ["We encountered a problem while storing the selected term. Please try again."]
108                                                        term.errors.each() { println it }
109                                                        error()
110                                                }
111                                        } else {
112                                                // term did not validate properly
113                                                if (term.errors =~ 'unique') {
114                                                        flash.errors = ["'" + params.get('term') + "' already exists, either search for another term or close this window"]
115                                                } else {
116                                                        flash.errors = ["We encountered a problem while storing the selected term. Please try again."]
117                                                }
118
119                                                error()
120                                        }
121                                } catch (Exception e) {
122                                        flash.errors = ["${e.getMessage()}"]
123
124                                        error()
125                                }
126                        }.to "terms"
127                }
128        }
129}
Note: See TracBrowser for help on using the browser.