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

Last change on this file since 1457 was 1457, checked in by work@…, 9 years ago
  • fixed missing imports caused by Intellij's smart refactoring... guess it's not that smart after all :)
  • Property svn:keywords set to Rev Author Date
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: 1457 $
12 * $Author: work@osx.eu $
13 * $Date: 2011-01-31 13:14:35 +0000 (ma, 31 jan 2011) $
14 */
15package dbnp.studycapturing
16import org.dbnp.gdt.*
17
18class TermEditorController {
19        /**
20         * index closure
21         */
22    def index = {
23                // got a ontology get parameter?
24                def ontologies = (params.ontologies) ? params.ontologies : null
25
26                // enter the flow!
27        redirect(action: 'pages', params:["ontologies":ontologies])
28    }
29
30        /**
31         * Webflow
32         */
33        def pagesFlow = {
34                // start the flow
35                onStart {
36                        println ".start term / ontology editor flow"
37
38                        if (params.ontologies) {
39                                flow.ontologies         = params.ontologies
40                                flow.ontologiesList     = []
41                                params.ontologies.split(/\,/).each() { ncboId ->
42                                        // trim the id
43                                        ncboId.trim()
44
45                                        // and add to the flow scope
46                                        flow.ontologiesList[ flow.ontologies.size() ] = ncboId
47                                }
48                        }
49                }
50
51                // main term editor page
52                terms {
53                        render(view: "terms")
54                        onRender {
55                                println ".rendering term selection popup"
56                        }
57                        on("add") {
58                                def ncboId = params.get('term-ncbo_id')
59                                def ncboVersionedId = params.get('term-ontology_id')
60                                def ontology = null
61
62                                try {
63                                        // got the ncboId?
64                                        if (ncboId && ncboId != "null") {
65                                                // find ontology by ncboId
66                                                ontology = Ontology.findByNcboId(ncboId as int)
67                                        } else if (ncboVersionedId && ncboVersionedId != "null") {
68                                                // find ontology by ncboId
69                                                ontology = Ontology.findByNcboVersionedId(ncboVersionedId as int)
70                                        } else {
71                                                // somehow we didn't get both the ncboId as well
72                                                // as the versioned id. Throw an error.
73                                                throw new Exception("We did not receive the ontology with your request, please try again")
74                                        }
75
76                                        // do we have the ontology?
77                                        if (!ontology) {
78                                                // no, try to instantiate by using the BioPortal
79                                                ontology = (ncboId && ncboId != "null") ? Ontology.getBioPortalOntology( ncboId as int ) : Ontology.getBioPortalOntologyByVersionedId( ncboVersionedId as String )
80
81                                                // validate and save ontology
82                                                if (!(ontology.validate() && ontology.save(flush:true))) {
83                                                        if (ncboId && ncboId != "null") {
84                                                                throw new Exception("An Ontology with ncboId ${ncboId} (= Ontology ID) does not seem valid. See http://bioportal.bioontology.org/ontologies")
85                                                        } else {
86                                                                throw new Exception("An Ontology with ncboVersionedId ${ncboVersionedId} (= URL id) does not seem valid. See http://bioportal.bioontology.org/ontologies")
87                                                        }
88                                                }
89                                        }
90
91                                        // instantiate term with parameters
92                                        def term = new Term(
93                                                name: params.get('term'),
94                                                ontology: ontology,
95                                                accession: params.get('term-concept_id')
96                                        )
97
98                                        // validate term
99                                        if (term.validate()) {
100                                                // save the term to the database
101                                                if (term.save(flush:true)) {
102                                                        flash.message = "'" + params.get('term') + "' was successfully added, either search for another term to add or close this window"
103                                                        success()
104                                                } else {
105                                                        flash.errors = ["We encountered a problem while storing the selected term. Please try again."]
106                                                        term.errors.each() { println it }
107                                                        error()
108                                                }
109                                        } else {
110                                                // term did not validate properly
111                                                if (term.errors =~ 'unique') {
112                                                        flash.errors = ["'" + params.get('term') + "' already exists, either search for another term or close this window"]
113                                                } else {
114                                                        flash.errors = ["We encountered a problem while storing the selected term. Please try again."]
115                                                }
116
117                                                error()
118                                        }
119                                } catch (Exception e) {
120                                        flash.errors = ["${e.getMessage()}"]
121
122                                        error()
123                                }
124                        }.to "terms"
125                }
126        }
127}
Note: See TracBrowser for help on using the repository browser.