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

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