source: trunk/grails-app/conf/BootStrap.groovy @ 830

Last change on this file since 830 was 830, checked in by keesvb, 11 years ago

moved Nimble BootStrap? to BootStrap? (there seems to be no way to hack the Nimble Bootstrap to execute before the application BootStrap?), assigned the example studies to the example user, updated study/show to show the study user

  • Property svn:keywords set to Author Date Rev
File size: 4.9 KB
Line 
1import dbnp.studycapturing.*
2
3import dbnp.data.Ontology
4import dbnp.data.Term
5import dbnp.rest.common.CommunicationManager
6import org.codehaus.groovy.grails.commons.GrailsApplication
7import grails.util.GrailsUtil
8
9// Imports for Nimble
10import grails.plugins.nimble.InstanceGenerator
11import grails.plugins.nimble.core.LevelPermission
12import grails.plugins.nimble.core.Role
13import grails.plugins.nimble.core.Group
14import grails.plugins.nimble.core.AdminsService
15import grails.plugins.nimble.core.UserService
16
17/**
18 * Application Bootstrapper
19 * @Author Jeroen Wesbeek
20 * @Since 20091021
21 *
22 * Revision information:
23 * $Rev: 830 $
24 * $Author: keesvb $
25 * $Date: 2010-08-23 13:40:32 +0000 (ma, 23 aug 2010) $
26 */
27class BootStrap {
28
29        // Injections for Nimble
30        def grailsApplication
31        def nimbleService
32        def userService
33        def adminsService
34
35        def init = {servletContext ->
36                // define timezone
37                System.setProperty('user.timezone', 'CET')
38
39                // If there are no users yet in the database
40                println "Executing Nimble bootstrap..."
41
42            // The following must be executed
43            nimbleService.init()
44
45            // Add users
46                def user
47
48                if (dbnp.user.User.count() == 0) {
49
50                        println "Adding example user..."
51
52                        // Create example User account
53                        user = InstanceGenerator.user()
54                        user.username = "user"
55                        user.pass = 'useR123!'
56                        user.passConfirm = 'useR123!'
57                        user.enabled = true
58
59                        def userProfile = InstanceGenerator.profile()
60                        userProfile.fullName = "Test User"
61                        userProfile.owner = user
62                        user.profile = userProfile
63
64                        def savedUser = userService.createUser(user)
65                        if (savedUser.hasErrors()) {
66                          savedUser.errors.each {
67                                log.error(it)
68                          }
69                          throw new RuntimeException("Error creating example user")
70                        }
71
72                        println "Adding example admin user..."
73
74                        // Create example Administrative account
75                        def admins = Role.findByName(AdminsService.ADMIN_ROLE)
76                        def admin = InstanceGenerator.user()
77                        admin.username = "admin"
78                        admin.pass = "admiN123!"
79                        admin.passConfirm = "admiN123!"
80                        admin.enabled = true
81
82                        def adminProfile = InstanceGenerator.profile()
83                        adminProfile.fullName = "Administrator"
84                        adminProfile.owner = admin
85                        admin.profile = adminProfile
86
87                        def savedAdmin = userService.createUser(admin)
88                        if (savedAdmin.hasErrors()) {
89                          savedAdmin.errors.each {
90                                log.error(it)
91                          }
92                          throw new RuntimeException("Error creating administrator")
93                        }
94
95                        adminsService.add(admin)
96                }
97                else {
98                        user = dbnp.user.User.findByUsername("user")
99                }
100
101                println "Done with Nimble bootstrap"
102
103                // If there are no templates yet in the database
104                if (Template.count() == 0) {
105                        println "No templates in the current database.";
106
107                        // If in development or test mode, add the ontologies manually to the database
108                        // without contacting the BioPortal website, to avoid annoying hiccups when the server is busy
109                        if (grails.util.GrailsUtil.environment != GrailsApplication.ENV_PRODUCTION) {
110                                println "Adding ontology descriptors"
111                                BootStrapTemplates.initTemplateOntologies()
112                        }
113
114                        // Add example study, subject, event etc. templates
115                        BootStrapTemplates.initTemplates()
116
117                        // If in development mode and no studies are present, add example studies
118                        if (Study.count() == 0 && grails.util.GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT) {
119                                // check if special file is present in project directory
120                                if ((new File(System.properties['user.dir']+"/.skip-studies").exists())) {
121                                        // yes it is, skip study bootstrapping
122                                        println ".skipping study bootstrapping"
123
124                                        // get species ontology
125                                        def speciesOntology = Ontology.getOrCreateOntologyByNcboId(1132)
126
127                                        // add terms
128                                        def mouseTerm = new Term(
129                                                name: 'Mus musculus',
130                                                ontology: speciesOntology,
131                                                accession: '10090'
132                                        ).with { if (!validate()) { errors.each { println it} } else save()}
133
134                                        def humanTerm = new Term(
135                                                name: 'Homo sapiens',
136                                                ontology: speciesOntology,
137                                                accession: '9606'
138                                        ).with { if (!validate()) { errors.each { println it} } else save()}
139                                } else {
140                                        // general study boostrapping
141                                        BootStrapStudies.addExampleStudies(user)
142                                }
143                        }
144
145                        println "Finished adding templates and studies"
146                }
147
148                /**
149                 * attach ontologies in runtime. Possible problem is that you need
150                 * an internet connection when bootstrapping though.
151                 * @see dbnp.studycapturing.Subject
152                 * @see dbnp.studycapturing.Sample
153                 */
154                TemplateEntity.getField(Subject.domainFields, 'species').ontologies = [Ontology.getOrCreateOntologyByNcboId(1132)]
155                TemplateEntity.getField(Sample.domainFields, 'material').ontologies = [Ontology.getOrCreateOntologyByNcboId(1005)]
156
157                println "Registering SAM REST methods"
158                // register methods for accessing SAM's Rest services
159                if (grails.util.GrailsUtil.environment == GrailsApplication.ENV_PRODUCTION) {
160                        CommunicationManager.SAMServerURL = 'http://sam.dbnp.org'
161                }
162                else {
163                        CommunicationManager.SAMServerURL = 'http://localhost:8182/sam'
164                }
165                CommunicationManager.registerRestWrapperMethodsSAMtoGSCF()
166
167                println "Done with BootStrap"
168        }
169
170        def destroy = {
171        }
172} 
Note: See TracBrowser for help on using the repository browser.