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

Last change on this file since 2184 was 2180, checked in by work@…, 11 years ago
  • adding support for programmatic logins using the 'hello' method in the restController over http basic authentication.
  • e.g. /rest/hello?consumer=myConsumerId
  • Property svn:keywords set to Rev Author Date
File size: 3.5 KB
Line 
1import dbnp.authentication.SecRole
2import dbnp.authentication.SecUser
3import org.codehaus.groovy.grails.commons.GrailsApplication
4import org.dbnp.gdt.*
5import dbnp.studycapturing.Study
6import dbnp.studycapturing.Subject
7import dbnp.studycapturing.Sample
8import dbnp.rest.common.CommunicationManager
9import dbnp.configuration.*
10
11/**
12 * Application Bootstrapper
13 * @Author Jeroen Wesbeek
14 * @Since 20091021
15 *
16 * Revision information:
17 * $Rev: 2180 $
18 * $Author: work@osx.eu $
19 * $Date: 2012-03-12 11:16:52 +0000 (ma, 12 mrt 2012) $
20 */
21class BootStrap {
22        // user spring security
23        def springSecurityService
24
25        // inject the datasource
26        def dataSource
27
28        // inject the grails application
29        def grailsApplication
30
31        def init = { servletContext ->
32                // Grom a development message
33                if (String.metaClass.getMetaMethod("grom")) "bootstrapping application".grom()
34
35                // get configuration
36                def config = grailsApplication.config
37
38                // define timezone
39                System.setProperty('user.timezone', 'CET')
40
41                // set up a client (=external program) role if it does not exist
42                def clientRole = SecRole.findByAuthority('ROLE_CLIENT') ?: new SecRole(authority: 'ROLE_CLIENT').save(failOnError: true)
43
44                // set up authentication (if required)
45                if (!SecRole.count() || !SecUser.count()) BootStrapAuthentication.initDefaultAuthentication(springSecurityService)
46
47                // set up the SAM communication manager
48                // this should probably more dynamic and put into the modules
49                // section instead of the bootstrap as not all instances will
50                // probably run WITH sam. GSCF should be able to run independently
51                // from other modules. Part of gscf ticket #185
52                if (config.modules) {
53                        // Grom a development message
54                        if (String.metaClass.getMetaMethod("grom")) "Registering SAM REST methods".grom()
55                        CommunicationManager.registerModule('gscf', config.grails.serverURL, config.modules)
56                        CommunicationManager.registerRestWrapperMethodsFromSAM()
57                }
58
59                // automatically handle database upgrades
60                DatabaseUpgrade.handleUpgrades(dataSource)
61
62                // developmental/test/demo bootstrapping:
63                //      - templates
64                //      - ontologies
65                //      - and/or studies
66                if (    grails.util.GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT ||
67                grails.util.GrailsUtil.environment == GrailsApplication.ENV_TEST ||
68                grails.util.GrailsUtil.environment == "dbnpdemo") {
69                        // add ontologies?
70                        if (!Ontology.count()) ExampleTemplates.initTemplateOntologies()
71
72                        // add templates?
73                        if (!Template.count()) ExampleTemplates.initTemplates()
74
75                        // add data required for the webtests?
76                        if (grails.util.GrailsUtil.environment == GrailsApplication.ENV_TEST) ExampleStudies.addTestData()
77
78                        // add example studies?
79                        if (!Study.count() && grails.util.GrailsUtil.environment == GrailsApplication.ENV_DEVELOPMENT)
80                                ExampleStudies.addExampleStudies(SecUser.findByUsername('user'), SecUser.findByUsername('admin'))
81                }
82
83                /**
84                 * attach ontologies in runtime. Possible problem is that you need
85                 * an internet connection when bootstrapping though.
86                 * @see dbnp.studycapturing.Subject
87                 * @see dbnp.studycapturing.Sample
88                 */
89                TemplateEntity.getField(Subject.domainFields, 'species').ontologies = [
90                        Ontology.getOrCreateOntologyByNcboId(1132),             // NCBI Organismal Classification
91                        Ontology.getOrCreateOntologyByNcboId(1069)              // Environmental Ontology
92                ]
93                TemplateEntity.getField(Sample.domainFields, 'material').ontologies = [
94                        Ontology.getOrCreateOntologyByNcboId(1005)              // BRENDA Tissue / enzyme source
95                ]
96        }
97
98        def destroy = {
99                // Grom a development message
100                if (String.metaClass.getMetaMethod("grom")) "stopping application...".grom()
101        }
102} 
Note: See TracBrowser for help on using the repository browser.