blob: 75e426f38b6ad207b2b866f604e3182fcbfcef96 [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import grails.util.GrailsNameUtils
import groovy.transform.Field
@Field String usageMessage = '''
grails s2ui-create-challenge-questions <domain-class-package> <challenge-qa-class-name> <user-domain-class-name> [number-of-questions]
domain-class-package is required and is the package where domainName will live
challenge-qa-class-name is required and is the Name of the domain class used to store this information
user-domain-class-name is required and is the package and name of the User class. In most circumstance I would put this in the same package but it will work if they are different.
number-of-questions is optional but if not given will default to 2.
Example: s2ui-create-challenge-questions com.mycompany ChallengeQuestion com.mycompany.User 2
'''
@Field Map templateAttributes
description 'Creates Domian Objects, Service Listener, Controller, I18N and updates the application.groovy file so it can be used', {
usage usageMessage
argument name: 'Domain class package', description: 'The package to use for the domain classes'
argument name: 'Challenge QA class name', description: 'The name of challenge questions and answers class'
argument name: 'User class name', description: 'The name of the User/Person class'
argument name: 'Number Of Questions', description: 'The number of challenge questions generated', required: false
}
String domainPackage = args[0].toLowerCase()
String domainName =args[1]
Model saModel = model(domainPackage + '.' + domainName)
Integer numberOfQuestions = args.size() > 3 ? args[3].toInteger() : 2
Model userModel = args[2].indexOf('.') > -1 ? model(args[2]) : model(domainPackage + '.' + args[2])
File grailsApp = file('grails-app')
def chsa = saModel.simpleName.toCharArray()
chsa[0] = Character.toLowerCase(chsa[0])
def chup = userModel.modelName.toCharArray()
chup[0] = Character.toLowerCase(chup[0])
String camelCaseSaNamevar = new String(chsa)
templateAttributes = [
packageName: saModel.packageName,
saClassName: saModel.simpleName,
camelCaseSaName: camelCaseSaNamevar,
saClassProperty: saModel.modelName,
numberOfQuestions: numberOfQuestions,
userPropName: new String(chup),
userDomainName: (userModel.packageName.toLowerCase() == saModel.packageName ? "" : userModel.packageName.toLowerCase() + '.') + userModel.modelName.toLowerCase().capitalize()
]
String directoryName = saModel.packageName.replaceAll('\\.', '/')
File serviceDestinationDirectory = new File(new File(grailsApp, 'services'), directoryName)
serviceDestinationDirectory.mkdirs()
render template('ChallengeQuestionsService.groovy.template'),
new File(serviceDestinationDirectory, "${saModel.simpleName}Service.groovy"),
templateAttributes, false
render template('ChallengeQuestionsListenerService.groovy.template'),
new File(serviceDestinationDirectory, "${saModel.simpleName}ListenerService.groovy"),
templateAttributes, false
File domainDestinationDirectory = new File(new File(grailsApp, 'domain'), directoryName)
domainDestinationDirectory.mkdirs()
render template('ChallengeQuestions.groovy.template'),
new File(domainDestinationDirectory, "${saModel.simpleName}.groovy"),
templateAttributes, false
File controllerDirectory = new File(new File(grailsApp, 'controllers'), directoryName)
controllerDirectory.mkdirs()
render template('ChallengeQuestionsController.groovy.template'),
new File(controllerDirectory, "${saModel.simpleName}Controller.groovy"),
templateAttributes, false
File viewDirectory = new File(new File(grailsApp,'views'), camelCaseSaNamevar)
viewDirectory.mkdirs()
render template('ChallengeQuestionsEdit.gsp.template'),
new File(viewDirectory, 'edit.gsp'),
templateAttributes, false
render template('ChallengeQuestionsCreate.gsp.template'),
new File(viewDirectory, 'create.gsp'),
templateAttributes, false
render template('ChallengeQuestionsIndex.gsp.template'),
new File(viewDirectory,'index.gsp'),
templateAttributes, false
file('grails-app/conf/application.groovy').withWriterAppend { BufferedWriter writer ->
writer.newLine()
writer.writeLine '// Added by the Spring Security UI plugin:'
writer.writeLine "grails.plugin.springsecurity.ui.forgotPassword.forgotPasswordExtraValidationDomainClassName = '${saModel?.packageName}.${saModel?.simpleName}'"
writer.writeLine "grails.plugin.springsecurity.ui.forgotPassword.forgotPasswordExtraValidation = ["
for(int i = 1; i <= numberOfQuestions; i++) {
writer.writeLine "\t[labelDomain: 'myQuestion$i', prop:'myAnswer$i'],"
}
writer.writeLine ']'
writer.newLine()
}
file('grails-app/i18n/messages.properties').withWriterAppend { BufferedWriter writer ->
writer.newLine()
writer.writeLine "spring.security.ui.menu.${saModel.simpleName}=${saModel.simpleName} Questions"
writer.newLine()
}
println("Finished s2ui-create-challenge-questions!")