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

Last change on this file since 565 was 565, checked in by duh, 12 years ago
  • upon adding a term the termEditorController now also adds the ontology when the ontologies doest not exist
  • extended the Ontology domain class with functionality to instantiate the Ontology class using the versioned ncboId
  • added 'addDummy' support to termElements and templateElements which caused the study and subject page not to work properly on an empty database (these fields were not rendered so exceptions were thrown).
  • this fixed bug # 107 in half... now the species select (ONTOLOGYTERM) somehow does not show the species in the database, still needs to be fixed
  • Property svn:keywords set to Date Author Rev
File size: 2.7 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: 565 $
12 * $Author: duh $
13 * $Date: 2010-06-15 15:45:16 +0000 (di, 15 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                                        def url = "http://rest.bioontology.org/bioportal/ontologies/" + params.get('term-ontology_id')
70                                        def xml = new URL( url ).getText()
71                                        def data = new XmlParser().parseText( xml )
72                                        def bean = data.data.ontologyBean
73
74                                        // instantiate Ontology with the proper values
75                                        ontology = Ontology.getBioPortalOntologyByVersionedId( params.get('term-ontology_id') ).save(flush:true)
76                                        println ontology
77
78                                        if (ontology.validate()) {
79                                                ontology.save(flush:true)
80                                        }
81                                        println ontology
82                                }
83
84                                // instantiate term with parameters
85                                def term = new Term(
86                                        name: strTerm,
87                                        ontology: ontology,
88                                        accession: params.get('term-concept_id')
89                                )
90
91                                // validate term
92                                if (term.validate()) {
93                                        // save the term to the database
94                                        if (term.save(flush:true)) {
95                                                flash.message = "Term addition succeeded"
96                                                success()
97                                        } else {
98                                                flash.message = "Oops, we encountered a problem while storing the selected term. Please try again."
99                                                term.errors.each() { println it }
100                                                error()
101                                        }
102                                } else {
103                                        // term did not validate properly
104                                        flash.message = "Oops, we encountered a problem while storing the selected term. Please try again."
105                                        term.errors.each() { println it }
106                                        error()
107                                }
108                        }.to "terms"
109                }
110        }
111}
Note: See TracBrowser for help on using the repository browser.