Changeset 1846

Show
Ignore:
Timestamp:
13-05-11 18:42:42 (3 years ago)
Author:
work@…
Message:

- working version of the setup wizard, see #185

Location:
trunk
Files:
3 added
7 modified
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/generic/installation/SetupController.groovy

    r1653 r1846  
    44import dbnp.authentication.SecUser 
    55import org.codehaus.groovy.grails.commons.ConfigurationHolder 
     6import groovy.sql.Sql 
    67 
    78/** 
     
    5657                        // get configuration 
    5758                        def config = ConfigurationHolder.config 
    58                         println config.dump() 
    59                         println config.dataSource.dump() 
    6059 
    6160                        // define variables in the flow scope which is availabe 
     
    6665                        // wizard tabs. Also see common/_tabs.gsp for more information 
    6766                        flow.page = 0 
    68                         //flow.config = ConfigurationHolder.config 
    6967                        flow.pages = [ 
    7068                                [title: 'Configuration Location'], 
    7169                                [title: 'Database'], 
    72                                 [title: 'Page Three'], 
    73                                 [title: 'Page Four'], 
     70                                [title: 'Email / URL'], 
     71                                [title: 'Summary'], 
     72                                [title: 'Apache Configuration'], 
    7473                                [title: 'Done'] 
    7574                        ] 
     
    108107                        onRender { 
    109108                                // Grom a development message 
    110                                 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_database.gsp".grom() 
     109                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_configuration.gsp".grom() 
    111110 
    112111                                flow.page = 1 
    113112 
    114                                 // config 
    115                                 def configPath = new File("/etc/${meta(name: 'app.name')}/") 
    116                                 def configFile = new File("/etc/${meta(name: 'app.name')}/${grails.util.GrailsUtil.environment}.properties") 
    117  
    118                                 // add configuration information to the flow scope 
    119                                 flow.configInfo = [ 
    120                                         path: configPath, 
    121                                         pathExists: configPath.exists(), 
    122                                         pathCanRead: configPath.canRead(), 
    123                                         pathCanWrite: configPath.canWrite(), 
    124                                         pathSummary: (configPath.exists() && configPath.canRead() && configPath.canWrite()), 
    125                                         file: configFile, 
    126                                         fileExists: configFile.exists(), 
    127                                         fileCanRead: configFile.canRead(), 
    128                                         fileCanWrite: configFile.canWrite(), 
    129                                         fileSummary: (configFile.exists() && configFile.canRead() && configFile.canWrite()) 
    130                                 ] 
     113                                // try to load config 
     114                                loadPropertiesFile(flow) 
    131115 
    132116                                success() 
    133117                        } 
    134118                        on("next") { 
    135                                 // put your bussiness logic (if applicable) in here 
    136                         }.to "pageTwo" 
     119                                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 
     120                        }.to "database" 
    137121                        on("toPageTwo") { 
    138                                 // put your bussiness logic (if applicable) in here 
    139                         }.to "pageTwo" 
     122                                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 
     123                        }.to "database" 
    140124                        on("toPageThree") { 
    141                                 // put your bussiness logic (if applicable) in here 
    142                         }.to "pageThree" 
     125                                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 
     126                        }.to "email" 
    143127                        on("toPageFour") { 
    144                                 // put your bussiness logic (if applicable) in here 
    145                         }.to "pageFour" 
     128                                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 
     129                        }.to "summary" 
    146130                        on("toPageFive") { 
    147                                 // put your bussiness logic (if applicable) in here 
    148                                 flow.page = 5 
     131                                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { success() } else { error() } 
     132                        }.to "apache" 
     133                        on("toPageSix") { 
     134                                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { 
     135                                        flow.page = 6 
     136                                        success() 
     137                                } else { 
     138                                        error() 
     139                                } 
    149140                        }.to "save" 
    150141                        on("toConfigurationPath").to "configurationPath" 
     
    152143                } 
    153144 
    154                 // second wizard page 
     145                // create the configuration path 
     146                configurationPath { 
     147                        action { 
     148                                // does the path exist? 
     149                                if (!flow.configInfo.pathExists) { 
     150                                        // no, attempt to create it 
     151                                        if (flow.configInfo.path.mkdirs()) { 
     152                                                // Grom a development message 
     153                                                if (pluginManager.getGrailsPlugin('grom')) ".created ${flow.configInfo.path}".grom() 
     154 
     155                                                // success! 
     156                                                success() 
     157                                        } else { 
     158                                                error() 
     159                                        } 
     160                                } else { 
     161                                        error() 
     162                                } 
     163                        } 
     164                        on("success").to "configuration" 
     165                        on("error").to "configurationPathError" 
     166                } 
     167 
     168                // show manual procedure for creating configuration path 
     169                configurationPathError { 
     170                        render(view: "_configuration_path_error") 
     171                        onRender { 
     172                                // Grom a development message 
     173                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_configuration_path_error.gsp".grom() 
     174 
     175                                flow.page = 1 
     176                        } 
     177                        on("next").to "configuration" 
     178                } 
     179 
     180                // create the configuration file 
     181                configurationFile { 
     182                        action { 
     183                                // does the file exist? 
     184                                if (!flow.configInfo.fileExists) { 
     185                                        // no, attempt to create it 
     186                                        try { 
     187                                                flow.configInfo.file << "# ${meta(name: 'app.name')} ${grails.util.GrailsUtil.environment} configuration\n" 
     188                                                flow.configInfo.file << "#\n" 
     189                                                flow.configInfo.file << "# \$Author\$\n" 
     190                                                flow.configInfo.file << "# \$Date\$\n" 
     191                                                flow.configInfo.file << "# \$Rev\$\n" 
     192 
     193                                                // grom debug message 
     194                                                if (pluginManager.getGrailsPlugin('grom')) ".created ${flow.configInfo.file}".grom() 
     195 
     196                                                // success! 
     197                                                success() 
     198                                        } catch (Exception e) { 
     199                                                error() 
     200                                        } 
     201                                } else { 
     202                                        error() 
     203                                } 
     204                        } 
     205                        on("success").to "configuration" 
     206                        on("error").to "configurationFileError" 
     207                } 
     208 
     209                // show manual procedure for creating configuration path 
     210                configurationFileError { 
     211                        render(view: "_configuration_file_error") 
     212                        onRender { 
     213                                // Grom a development message 
     214                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_configuration_file_error.gsp".grom() 
     215 
     216                                flow.page = 1 
     217                        } 
     218                        on("next").to "configuration" 
     219                } 
     220 
     221                // database page 
    155222                database { 
    156223                        render(view: "_database") 
    157224                        onRender { 
    158225                                // Grom a development message 
    159                                 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_page_two.gsp".grom() 
     226                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial: pages/_database.gsp".grom() 
    160227 
    161228                                flow.page = 2 
    162                                 success() 
    163                         } 
    164                         on("next").to "pageThree" 
    165                         on("previous").to "pageOne" 
    166                         on("toPageOne").to "pageOne" 
    167                         on("toPageThree").to "pageThree" 
    168                         on("toPageFour").to "pageFour" 
     229 
     230                                success() 
     231                        } 
     232                        on("next") { 
     233                                // store form values 
     234                                databasePage(flow, flash, params) ? success() : error() 
     235                        }.to "email" 
     236                        on("previous") { 
     237                                // store form values 
     238                                databasePage(flow, flash, params) ? success() : error() 
     239                        }.to "configuration" 
     240                        on("toPageOne") { 
     241                                // store form values 
     242                                databasePage(flow, flash, params) ? success() : error() 
     243                        }.to "configuration" 
     244                        on("toPageThree") { 
     245                                // store form values 
     246                                databasePage(flow, flash, params) ? success() : error() 
     247                        }.to "email" 
     248                        on("toPageFour") { 
     249                                // store form values 
     250                                databasePage(flow, flash, params) ? success() : error() 
     251                        }.to "summary" 
    169252                        on("toPageFive") { 
    170                                 flow.page = 5 
    171                         }.to "save" 
    172                 } 
    173  
    174                 // second wizard page 
    175                 pageThree { 
    176                         render(view: "_page_three") 
    177                         onRender { 
    178                                 // Grom a development message 
    179                                 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_page_three.gsp".grom() 
     253                                // store form values 
     254                                databasePage(flow, flash, params) ? success() : error() 
     255                        }.to "apache" 
     256                        on("toPageSix") { 
     257                                // store form values 
     258                                if (databasePage(flow, flash, params)) { 
     259                                        flow.page = 6 
     260                                        success() 
     261                                } else { 
     262                                        error() 
     263                                } 
     264                        }.to "save" 
     265                } 
     266 
     267                // email configuration page 
     268                email { 
     269                        render(view: "_email") 
     270                        onRender { 
     271                                // Grom a development message 
     272                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_email.gsp".grom() 
    180273 
    181274                                flow.page = 3 
    182275                                success() 
    183276                        } 
    184                         on("next").to "pageFour" 
    185                         on("previous").to "pageTwo" 
    186                         on("toPageOne").to "pageOne" 
    187                         on("toPageTwo").to "pageTwo" 
    188                         on("toPageFour").to "pageFour" 
     277                        on("next") { 
     278                                emailPage(flow, flash, params) ? success() : error() 
     279                        }.to "summary" 
     280                        on("previous") { 
     281                                emailPage(flow, flash, params) ? success() : error() 
     282                        }.to "database" 
     283                        on("toPageOne") { 
     284                                emailPage(flow, flash, params) ? success() : error() 
     285                        }.to "configuration" 
     286                        on("toPageTwo") { 
     287                                emailPage(flow, flash, params) ? success() : error() 
     288                        }.to "database" 
     289                        on("toPageFour") { 
     290                                emailPage(flow, flash, params) ? success() : error() 
     291                        }.to "summary" 
    189292                        on("toPageFive") { 
    190                                 flow.page = 5 
    191                         }.to "save" 
    192                 } 
    193  
    194                 // second wizard page 
    195                 pageFour { 
    196                         render(view: "_page_four") 
    197                         onRender { 
    198                                 // Grom a development message 
    199                                 if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_page_four.gsp".grom() 
     293                                emailPage(flow, flash, params) ? success() : error() 
     294                        }.to "apache" 
     295                        on("toPageSix") { 
     296                                if (emailPage(flow, flash, params)) { 
     297                                        flow.page = 6 
     298                                        success() 
     299                                } else { 
     300                                        error() 
     301                                } 
     302                        }.to "save" 
     303                } 
     304 
     305                // summary page 
     306                summary { 
     307                        render(view: "_summary") 
     308                        onRender { 
     309                                // Grom a development message 
     310                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_summary.gsp".grom() 
     311 
     312                                // write properties file 
     313                                writePropertiesFile(flow) 
    200314 
    201315                                flow.page = 4 
     
    204318                        on("next") { 
    205319                                // put some logic in here 
     320                                flow.page = 6 
     321                        }.to "save" 
     322                        on("previous").to "pageThree" 
     323                        on("toPageOne").to "configuration" 
     324                        on("toPageTwo").to "database" 
     325                        on("toPageThree").to "email" 
     326                        on("toPageFive").to "apache" 
     327                        on("toPageSix") { 
     328                                flow.page = 6 
     329                        }.to "save" 
     330                } 
     331 
     332                // apache page 
     333                apache { 
     334                        render(view: "_apache") 
     335                        onRender { 
     336                                // Grom a development message 
     337                                if (pluginManager.getGrailsPlugin('grom')) ".rendering the partial pages/_apache.gsp".grom() 
     338 
    206339                                flow.page = 5 
     340 
     341                                flash.context= org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().contextPath 
     342                                flash.domain = flow.configInfo.properties.getProperty('grails.serverURL').replaceFirst(/http:\/\//,"").split(":|/").first() 
     343 
     344                                success() 
     345                        } 
     346                        on("next") { 
     347                                // put some logic in here 
     348                                flow.page = 6 
    207349                        }.to "save" 
    208350                        on("previous").to "pageThree" 
    209                         on("toPageOne").to "pageOne" 
    210                         on("toPageTwo").to "pageTwo" 
    211                         on("toPageThree").to "pageThree" 
    212                         on("toPageFive") { 
    213                                 flow.page = 5 
     351                        on("toPageOne").to "configuration" 
     352                        on("toPageTwo").to "database" 
     353                        on("toPageThree").to "email" 
     354                        on("toPageFour").to "summary" 
     355                        on("toPageSix") { 
     356                                flow.page = 6 
    214357                        }.to "save" 
    215358                } 
     
    252395                        on("next").to "save" 
    253396                        on("previous").to "pageFour" 
    254                         on("toPageOne").to "pageOne" 
    255                         on("toPageTwo").to "pageTwo" 
    256                         on("toPageThree").to "pageThree" 
    257                         on("toPageFour").to "pageFour" 
    258                         on("toPageFive").to "save" 
     397                        on("toPageOne").to "configuration" 
     398                        on("toPageTwo").to "database" 
     399                        on("toPageThree").to "email" 
     400                        on("toPageFour").to "summary" 
     401                        on("toPageFive").to "apache" 
     402                        on("toPageSix").to "save" 
    259403 
    260404                } 
     
    271415                } 
    272416        } 
     417 
     418        /** 
     419         * handle database configuration 
     420         * 
     421         * @param Map LocalAttributeMap (the flow scope) 
     422         * @param Map localAttributeMap (the flash scope) 
     423         * @param Map GrailsParameterMap (the flow parameters = form data) 
     424         * @returns boolean 
     425         */ 
     426        def databasePage(flow, flash, params) { 
     427                // update database properties 
     428                params.dataSource.each { name, value -> 
     429                        flow.configInfo.properties.setProperty("dataSource.${name}", value) 
     430                } 
     431 
     432                // try to connect to the database 
     433                try { 
     434                        def sql = Sql.newInstance( 
     435                                flow.configInfo.properties.getProperty('dataSource.url'), 
     436                                flow.configInfo.properties.getProperty('dataSource.username'), 
     437                                flow.configInfo.properties.getProperty('dataSource.password'), 
     438                                flow.configInfo.properties.getProperty('dataSource.driverClassName') 
     439                        ) 
     440 
     441                        writePropertiesFile(flow) 
     442 
     443                        flash.connection=true 
     444                } catch (Exception e) { 
     445                        flash.connection=false 
     446                } 
     447 
     448                return flash.connection 
     449        } 
     450 
     451        /** 
     452         * handle email and url configuration 
     453         * 
     454         * @param Map LocalAttributeMap (the flow scope) 
     455         * @param Map localAttributeMap (the flash scope) 
     456         * @param Map GrailsParameterMap (the flow parameters = form data) 
     457         * @returns boolean 
     458         */ 
     459        def emailPage(flow, flash, params) { 
     460                // update properties 
     461                flow.configInfo.properties.setProperty('grails.plugins.springsecurity.ui.forgotPassword.emailFrom', params['grails.plugins.springsecurity.ui.forgotPassword.emailFrom']) 
     462                flow.configInfo.properties.setProperty('grails.serverURL', params['grails.serverURL']) 
     463 
     464                writePropertiesFile(flow) 
     465 
     466                return true 
     467        } 
     468 
     469        /** 
     470         * load the configuration properties 
     471         * 
     472         * @param flow 
     473         * @return 
     474         */ 
     475        def loadPropertiesFile(flow) { 
     476                // config 
     477                def configPath = new File("${System.getProperty("user.home")}/etc/${meta(name: 'app.name')}/") 
     478                def configFile = new File("${System.getProperty("user.home")}/etc/${meta(name: 'app.name')}/${grails.util.GrailsUtil.environment}.properties") 
     479 
     480                // add configuration information to the flow scope 
     481                flow.configInfo = [ 
     482                        path: configPath, 
     483                        pathExists: configPath.exists(), 
     484                        pathCanRead: configPath.canRead(), 
     485                        pathCanWrite: configPath.canWrite(), 
     486                        pathSummary: (configPath.exists() && configPath.canRead() && configPath.canWrite()), 
     487                        file: configFile, 
     488                        fileExists: configFile.exists(), 
     489                        fileCanRead: configFile.canRead(), 
     490                        fileCanWrite: configFile.canWrite(), 
     491                        fileSummary: (configFile.exists() && configFile.canRead() && configFile.canWrite()), 
     492                        properties: null 
     493                ] 
     494 
     495                // parse properties 
     496                if (flow.configInfo.pathSummary && flow.configInfo.fileSummary) { 
     497                        def file = new FileInputStream(flow.configInfo.file.toString()) 
     498                        def properties = new Properties() 
     499                        properties.load(file) 
     500 
     501                        // and store in flowscope 
     502                        flow.configInfo.properties = properties 
     503                } 
     504        } 
     505 
     506        /** 
     507         * save the configuration properties 
     508         * 
     509         * @param flow 
     510         * @return 
     511         */ 
     512        def writePropertiesFile(flow) { 
     513                // write properties 
     514                def file = new FileOutputStream(flow.configInfo.file.toString()) 
     515                flow.configInfo.properties.store(file, " ${meta(name: 'app.name')} ${grails.util.GrailsUtil.environment} configuration\n#\n# \$Author\$\n# \$Date\$\n# \$Rev\$\n") 
     516 
     517                // and load them back into the flow 
     518                loadPropertiesFile(flow) 
     519        } 
    273520} 
  • trunk/grails-app/views/setup/common/_on_page.gsp

    r1648 r1846  
    2424%> 
    2525<script type="text/javascript"> 
    26         function onPage() { 
    27                 if (console) { 
    28                         console.log('calling onPage() which can be used to attach generic javascript handlers to DOM elements of a rendered page / partial'); 
    29                 } 
    30         } 
     26        function onPage() { 
     27                if (console) { 
     28                        attachHelpTooltips(); 
     29 
     30                        // syntax highlighting 
     31                        function path() { 
     32                                var args = arguments,result = []; 
     33                                for(var i = 0; i < args.length; i++) result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/')); 
     34                                return result 
     35                        } 
     36 
     37                        SyntaxHighlighter.autoloader.apply(null, path( 
     38                          'applescript            @shBrushAppleScript.js', 
     39                          'bash shell             @shBrushBash.js', 
     40                          'css                    @shBrushCss.js', 
     41                          'diff patch pas         @shBrushDiff.js', 
     42                          'groovy                 @shBrushGroovy.js', 
     43                          'java                   @shBrushJava.js', 
     44                          'jfx javafx             @shBrushJavaFX.js', 
     45                          'js jscript javascript  @shBrushJScript.js', 
     46                          'php                    @shBrushPhp.js', 
     47                          'text plain             @shBrushPlain.js', 
     48                          'py python              @shBrushPython.js', 
     49                          'sql                    @shBrushSql.js', 
     50                          'xml xhtml xslt html    @shBrushXml.js' 
     51                        )); 
     52                        SyntaxHighlighter.all(); 
     53                } 
     54        } 
    3155</script> 
    3256 
  • trunk/grails-app/views/setup/index.gsp

    r1651 r1846  
    1515<head> 
    1616        <meta name="layout" content="main"/> 
    17         <g:javascript library="jquery" plugin="jquery"/> 
    1817        <link rel="stylesheet" href="${resource(dir: 'css', file: 'ajaxflow.css')}"/> 
    1918        <link rel="stylesheet" href="${resource(dir: 'css', file: 'setupwizard.css')}"/> 
     19        <link rel="stylesheet" href="${resource(dir: 'css', file: 'templates.css')}"/> 
     20        <link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" /> 
     21        <link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" /> 
     22        <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js"></script> 
     23        <script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js"></script> 
     24        <script type="text/javascript" src="${resource(dir: 'js', file: 'tooltips.js', plugin: 'gdt')}"></script> 
     25        <script type="text/javascript" src="${resource(dir: 'js', file: 'jquery.qtip-1.0.0-rc3.js', plugin: 'gdt')}"></script> 
    2026</head> 
    2127<body> 
  • trunk/grails-app/views/setup/pages/_configuration_location.gsp

    r1651 r1846  
    44 * 
    55 * @author Jeroen Wesbeek 
    6  * @since  20110318 
     6 * @since  20110513 
    77 * 
    88 * Revision information: 
     
    1515<h1>Configuration file</h1> 
    1616 
    17 <font color="red"><b><i>NOTE: this wizard is in development!</i></b></font> 
     17<g:if test="${configInfo.pathSummary && configInfo.fileSummary}"> 
     18        <span class="info"> 
     19                <span class="okay">The configuration file and path are okay!</span> 
     20                Click next to continue... 
     21        </span> 
     22</g:if><g:else> 
     23        <span class="info"> 
     24                <span class="warning"> 
     25                        You need to fix the configuration 
     26                        <g:if test="${!configInfo.pathSummary && !configInfo.fileSummary}">path and file</g:if> 
     27                        <g:elseif test="${!configInfo.pathSummary}">path</g:elseif> 
     28                        <g:elseif test="${!configInfo.fileSummary}">file</g:elseif> 
     29                        in order to continue 
     30                </span> 
     31                The application is currently using the default ${grails.util.GrailsUtil.environment} configuration. In the following 
     32                steps you will configure the application to use a specific database and (if required) insert default templates and 
     33                data. 
     34        </span> 
     35</g:else> 
    1836 
    19 <g:if test="${configInfo.pathSummary && configInfo.fileSummary}"> 
    20         OK! 
    21 </g:if> 
    22 <g:else> 
    2337<div class="checklist"> 
    2438        <ul class="header"> 
     
    4357        </ul> 
    4458</div> 
    45 </g:else> 
    4659 
    4760</af:page> 
  • trunk/grails-app/views/setup/pages/_database.gsp

    r1651 r1846  
    1313%> 
    1414<af:page> 
    15 <h1>Database configuration</h1> 
     15        <h1>Database configuration</h1> 
    1616 
     17        <af:selectElement name="dataSource.driverClassName" description="database type" error="driver" optionKey="name" optionValue="description" from="[[name:'org.postgresql.Driver', description:'PostgreSQL (prefered)'],[name:'org.hsqldb.jdbcDriver', description: 'In memory']]" value="${configInfo?.properties.getProperty('dataSource.driverClassName')}"> 
     18                Choose the database of choice. Note that while this application in principle supports different database types, it is specifically developer for PostgreSQL. Choosing 
     19                a different database may result in unexpected issues therefore choosing PostgreSQL here is advisable. 
     20                Also note that the In Memory database exists only at runtime, which means the database is lost when the application is restarted! 
     21        </af:selectElement> 
     22        <af:textFieldElement name="dataSource.url" description="url" error="url" value="${configInfo?.properties.getProperty('dataSource.url')}" style="width: 300px;"> 
     23                The URL of your database, example » jdbc:postgresql://localhost:5432/gscf-ci 
     24        </af:textFieldElement> 
     25        <af:textFieldElement name="dataSource.username" description="username" error="username" value="${configInfo?.properties.getProperty('dataSource.username')}" style="width: 100px;"> 
     26                The username for this database 
     27        </af:textFieldElement> 
     28        <af:textFieldElement name="dataSource.password" description="password" error="password" value="${configInfo?.properties.getProperty('dataSource.password')}" style="width: 100px;"> 
     29                The password for this database 
     30        </af:textFieldElement> 
     31        <af:selectElement name="dataSource.dbCreate" description="database creation type" error="dbcreate" optionKey="name" optionValue="description" from="[[name:'update', description:'Create/Update the existing database if changes are required (prefered choice)'],[name:'create', description:'Create the database if required, but do not perform updates'],[name:'create-drop', description: 'Drop the exisiting database and create a fresh database']]" value="${configInfo?.properties.getProperty('dataSource.dbCreate')}"> 
     32                The application is able to automatically create and update your database. Choose what option suites you best. 
     33        </af:selectElement> 
     34 
     35        <g:if test="${connection==false}"> 
     36        <span class="info"> 
     37                <span class="error">Could not connect to database</span> 
     38                Please make sure the database settings are correct 
     39                <g:if test="${configInfo?.properties.getProperty('dataSource.driverClassName') == 'org.postgresql.Driver'}"> 
     40                or create the database and database user if you did not yet do so.<br/> 
     41 
     42                First, as root, change to user postgres and start the Postgres console: 
     43                <pre class="brush:plain"> 
     44                        su - postgres 
     45                        psql 
     46                </pre> 
     47 
     48                Then run the following commands: 
     49                <pre class="brush:plain"> 
     50                        create database "${configInfo?.properties.getProperty('dataSource.url').split("/").last()}"; 
     51                        create user ${configInfo?.properties.getProperty('dataSource.username')} with password '${configInfo?.properties.getProperty('dataSource.password')}'; 
     52                        grant all privileges on database "${configInfo?.properties.getProperty('dataSource.url').split("/").last()}" to ${configInfo?.properties.getProperty('dataSource.username')}; 
     53                        ALTER DATABASE "${configInfo?.properties.getProperty('dataSource.url').split("/").last()}" OWNER TO ${configInfo?.properties.getProperty('dataSource.username')}; 
     54                </pre> 
     55 
     56                When finished, click <i>next</i> to try again. 
     57                </g:if> 
     58        </span> 
     59        </g:if> 
    1760 
    1861</af:page> 
  • trunk/grails-app/views/setup/pages/_email.gsp

    r1648 r1846  
    1313%> 
    1414<af:page> 
    15 <h1>Page Three</h1> 
    16 <p> 
    17 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce est erat, lacinia in porttitor sed, egestas sed nunc. Maecenas mi diam, ornare ac pulvinar a, lacinia sit amet diam. In non nulla vel ligula rhoncus venenatis. Cras mauris nunc, bibendum eu vehicula a, varius non dui. Vestibulum sit amet lacus ac sapien condimentum aliquam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla ornare ipsum in odio posuere quis fermentum felis convallis. Nullam eleifend posuere sollicitudin. Integer ac augue eget tellus pulvinar molestie. Suspendisse potenti. Mauris at lectus mauris, ornare rutrum quam. Nullam lobortis, sapien eget porttitor euismod, felis est viverra odio, in molestie turpis magna in nibh. Mauris sollicitudin dignissim tincidunt. Ut ornare risus at ante semper rutrum. 
    18 </p> 
    19 <p> 
    20 Suspendisse blandit imperdiet felis at aliquam. Vestibulum non convallis nisl. Sed nec risus urna, nec ultricies elit. Phasellus consectetur quam eget mauris vehicula blandit. Maecenas suscipit magna a felis porta vitae tristique nisi bibendum. Fusce sed sapien justo, at mollis orci. Nullam nisi nunc, fringilla ut pellentesque ultrices, viverra ac lectus. Pellentesque orci quam, tempus aliquet ornare id, pulvinar sed ligula. Etiam fermentum congue sagittis. Praesent dictum faucibus suscipit. Ut cursus convallis mi quis consectetur. Sed vel arcu sit amet neque laoreet blandit et cursus lacus. 
    21 </p> 
     15        <h1>Email and URL configuration</h1> 
     16 
     17        <span class="info"> 
     18                <span class="title">Email configuration</span> 
     19                The application uses the default system mailer, which is probably postfix or sendmail, so you only need to 
     20                configure what email adress will be used to send out emails to the users. 
     21        </span> 
     22 
     23        <af:textFieldElement name="grails.plugins.springsecurity.ui.forgotPassword.emailFrom" description="from address" error="grails.plugins.springsecurity.ui.forgotPassword.emailFrom" value="${configInfo?.properties.getProperty('grails.plugins.springsecurity.ui.forgotPassword.emailFrom')}" style="width: 300px;"> 
     24                The from address used for communication to the users. 
     25        </af:textFieldElement> 
     26 
     27        <span class="info"> 
     28                <span class="title">URL configuration</span> 
     29                Define the URL the application will be running on. If you would like to run from Apache (preferable) and not directly from Tomcat 
     30                see the Summary tab for an Apache virtual host configuration example. 
     31                <li>running directly from tomcat: http://my.url:8080${org.codehaus.groovy.grails.web.context.ServletContextHolder.getServletContext().contextPath}</li> 
     32                <li>running from Apache or Tomcat at port 80: http://my.url</li> 
     33        </span> 
     34 
     35        <af:textFieldElement name="grails.serverURL" description="serverl url" error="grails.serverURL" value="${configInfo?.properties.getProperty('grails.serverURL')}" style="width: 300px;"> 
     36                The server URL this application will be served on. 
     37        </af:textFieldElement> 
     38 
    2239</af:page> 
  • trunk/grails-app/views/setup/pages/_final_page.gsp

    r1648 r1846  
    1313%> 
    1414<af:page> 
    15 <h1>Final Page</h1> 
    16 <p> 
    17 This concludes the example wizard. You can click <g:link action="index">here</g:link> to restart the wizard. 
    18 </p> 
     15        <h1>Final Page</h1> 
     16 
     17        This concludes the configuration wizard. Make sure to restart your tomcat container to load the new configuration. 
     18        After restart you can <g:link controller="assayModule" action="list" class="icon icon_user_add">Manage Your Modules</g:link> 
     19        (if you have any). 
    1920</af:page> 
  • trunk/grails-app/views/setup/pages/_summary.gsp

    r1648 r1846  
    44 * 
    55 * @author Jeroen Wesbeek 
    6  * @since  20110318 
     6 * @since  20110513 
    77 * 
    88 * Revision information: 
     
    1313%> 
    1414<af:page> 
    15 <h1>Page Four</h1> 
    16 <p> 
    17 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vitae porta justo. Vestibulum vulputate porta orci sed feugiat. In convallis euismod neque in consectetur. Sed nibh eros, venenatis vitae porta sed, fringilla id ante. Vivamus aliquam congue semper. Duis feugiat sapien id erat dignissim congue a eget velit. Suspendisse imperdiet odio ut urna ullamcorper elementum. Morbi et elit lectus. Nulla imperdiet, libero quis faucibus volutpat, mi tellus porta sem, sed facilisis erat augue sit amet massa. Pellentesque rutrum leo arcu. Fusce sit amet venenatis lacus. Cras venenatis nibh eget est malesuada pretium. Suspendisse eget lectus dui. Etiam mauris tortor, tempus a pulvinar sit amet, condimentum at justo. Nulla suscipit augue eu augue ultricies accumsan tincidunt elit mollis. 
    18 </p> 
    19 <p> 
    20 Mauris euismod felis in arcu mattis accumsan. Cras luctus feugiat lectus, ut blandit nisi ullamcorper sit amet. In dapibus tristique justo, nec egestas arcu ullamcorper vitae. Phasellus sagittis pharetra lorem non convallis. Curabitur pulvinar tellus non arcu vestibulum in elementum ante varius. Proin est magna, sollicitudin at dictum ut, gravida at sem. Sed in urna massa. Aliquam et urna ac erat malesuada rutrum tincidunt vitae purus. Ut mollis nisl vel enim condimentum dapibus. Etiam tristique augue ullamcorper sem placerat vitae congue nibh semper. Maecenas in adipiscing purus. Sed sem eros, convallis vel mollis pretium, consectetur sed ligula. Aliquam erat volutpat. Donec aliquet purus eget nunc dapibus in semper magna malesuada. Nunc ornare egestas elementum. Pellentesque vulputate commodo est, vel sagittis libero molestie non. In hac habitasse platea dictumst. Ut pharetra quam quis nunc eleifend quis sodales justo molestie. Nunc eu bibendum lectus. 
    21 </p> 
     15        <h1>Summary</h1> 
     16 
     17        <span class="info"> 
     18                <span class="title">New application configuration</span> 
     19                Congratulations, you just finished setting up and configuring the application. Below you see the configuration 
     20                file (${configInfo.file}) you have just created. 
     21        </span> 
     22 
     23        Configuration file: ${configInfo.file}<br/> 
     24 
     25 
     26 
     27        <pre class="brush:plain">${configInfo.file.text}</pre> 
     28 
    2229</af:page> 
  • trunk/web-app/css/templates.css

    r1565 r1846  
    77    font-size: 10px; 
    88    margin: 10px 0px 10px 0px; 
     9} 
     10 
     11.info li { 
     12        padding-left: 10px; 
     13        list-style-position: inside; 
    914} 
    1015 
     
    5762    padding-left: 20px; 
    5863    background: url(../plugins/famfamfam-1.0.1/images/icons/eye.png) no-repeat center left; 
     64} 
     65 
     66.info .okay { 
     67    color:#006DBA; 
     68    font-size:14px; 
     69    font-weight:normal; 
     70    display: block; 
     71    margin-bottom: 5px; 
     72    padding-left: 20px; 
     73    background: url(../plugins/famfamfam-1.0.1/images/icons/accept.png) no-repeat center left; 
    5974} 
    6075