From 07128e98933cb83ee7ee7c7e5bf334a641451cd1 Mon Sep 17 00:00:00 2001 From: Michael Yan Date: Tue, 17 Dec 2024 18:34:57 +0800 Subject: [PATCH] Refactor AbstractGenerator Add methods `getDefaultPackageName()` and `getDefaultPackagePath()` Closes gh-806 --- .../cli/generator/AbstractGenerator.groovy | 8 ++++++++ .../cli/generator/ControllerGenerator.groovy | 17 +++++------------ .../cli/generator/DomainGenerator.groovy | 18 ++++++------------ .../cli/generator/InterceptorGenerator.groovy | 17 +++++------------ .../cli/generator/ServiceGenerator.groovy | 17 +++++------------ .../cli/generator/TaglibGenerator.groovy | 17 +++++------------ 6 files changed, 34 insertions(+), 60 deletions(-) diff --git a/grace-cli/src/main/groovy/grails/cli/generator/AbstractGenerator.groovy b/grace-cli/src/main/groovy/grails/cli/generator/AbstractGenerator.groovy index 858c02b7f7..6fceaa8b30 100644 --- a/grace-cli/src/main/groovy/grails/cli/generator/AbstractGenerator.groovy +++ b/grace-cli/src/main/groovy/grails/cli/generator/AbstractGenerator.groovy @@ -83,6 +83,14 @@ class AbstractGenerator implements Generator { this.fileSystemInteraction } + protected String getDefaultPackageName() { + loadApplicationConfig().getProperty('grails.codegen.defaultPackage') + } + + protected String getDefaultPackagePath() { + getDefaultPackageName()?.replace('.', '/') + } + protected void createFile(String source, String destination, Map model, boolean overwrite) { this.templateRenderer.render(this.templateRenderer.template(getTemplateRoot(), source), fileSystemInteraction.file(destination), model, overwrite) diff --git a/grace-shell/src/main/groovy/org/grails/cli/generator/ControllerGenerator.groovy b/grace-shell/src/main/groovy/org/grails/cli/generator/ControllerGenerator.groovy index d2b03fc158..2968334adb 100644 --- a/grace-shell/src/main/groovy/org/grails/cli/generator/ControllerGenerator.groovy +++ b/grace-shell/src/main/groovy/org/grails/cli/generator/ControllerGenerator.groovy @@ -18,7 +18,6 @@ package org.grails.cli.generator import groovy.transform.CompileStatic import grails.cli.generator.AbstractGenerator -import org.grails.config.CodeGenConfig /** * @author Michael Yan @@ -35,21 +34,18 @@ class ControllerGenerator extends AbstractGenerator { } boolean overwrite = commandLine.hasOption('force') || commandLine.hasOption('f') - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() String propertyName = className.uncapitalize() String[] actionNames = args.size() >= 3 ? args[2..-1] : ['index'] - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') Map model = new HashMap<>() - model['packageName'] = defaultPackage + model['packageName'] = defaultPackageName model['className'] = className model['propertyName'] = propertyName model['actions'] = actionNames - String controllerFile = 'app/controllers/' + packagePath + '/' + className + 'Controller.groovy' - String controllerSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'ControllerSpec.groovy' + String controllerFile = 'app/controllers/' + defaultPackagePath + '/' + className + 'Controller.groovy' + String controllerSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'ControllerSpec.groovy' createFile('Controller.groovy.tpl', controllerFile, model, overwrite) createFile('ControllerSpec.groovy.tpl', controllerSpecFile, model, overwrite) @@ -70,14 +66,11 @@ class ControllerGenerator extends AbstractGenerator { return } - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() String propertyName = className.uncapitalize() - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') - String controllerFile = 'app/controllers/' + packagePath + '/' + className + 'Controller.groovy' - String controllerSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'ControllerSpec.groovy' + String controllerFile = 'app/controllers/' + defaultPackagePath + '/' + className + 'Controller.groovy' + String controllerSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'ControllerSpec.groovy' removeFile(controllerFile) removeFile(controllerSpecFile) diff --git a/grace-shell/src/main/groovy/org/grails/cli/generator/DomainGenerator.groovy b/grace-shell/src/main/groovy/org/grails/cli/generator/DomainGenerator.groovy index a827acad3c..c3a2533cf6 100644 --- a/grace-shell/src/main/groovy/org/grails/cli/generator/DomainGenerator.groovy +++ b/grace-shell/src/main/groovy/org/grails/cli/generator/DomainGenerator.groovy @@ -18,7 +18,6 @@ package org.grails.cli.generator import groovy.transform.CompileStatic import grails.cli.generator.AbstractGenerator -import org.grails.config.CodeGenConfig /** * @author Michael Yan @@ -53,7 +52,7 @@ class DomainGenerator extends AbstractGenerator { } boolean overwrite = commandLine.hasOption('force') || commandLine.hasOption('f') - CodeGenConfig config = loadApplicationConfig() + String className = args[1].capitalize() String propertyName = className.uncapitalize() Map classAttributes = new LinkedHashMap<>() @@ -62,17 +61,15 @@ class DomainGenerator extends AbstractGenerator { String[] attr = (item.contains(':') ? item.split(':') : [item, 'String']) as String[] classAttributes[attr[0]] = TYPES[attr[1]] ?: attr[1] } - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') Map model = new HashMap<>() - model['packageName'] = defaultPackage + model['packageName'] = defaultPackageName model['className'] = className model['propertyName'] = propertyName model['attributes'] = classAttributes - String domainClassFile = 'app/domain/' + packagePath + '/' + className + '.groovy' - String domainClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'Spec.groovy' + String domainClassFile = 'app/domain/' + defaultPackagePath + '/' + className + '.groovy' + String domainClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'Spec.groovy' createFile('DomainClass.groovy.tpl', domainClassFile, model, overwrite) createFile('DomainClassSpec.groovy.tpl', domainClassSpecFile, model, overwrite) @@ -86,13 +83,10 @@ class DomainGenerator extends AbstractGenerator { return } - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') - String domainClassFile = 'app/domain/' + packagePath + '/' + className + '.groovy' - String domainClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'Spec.groovy' + String domainClassFile = 'app/domain/' + defaultPackagePath + '/' + className + '.groovy' + String domainClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'Spec.groovy' removeFile(domainClassFile) removeFile(domainClassSpecFile) diff --git a/grace-shell/src/main/groovy/org/grails/cli/generator/InterceptorGenerator.groovy b/grace-shell/src/main/groovy/org/grails/cli/generator/InterceptorGenerator.groovy index a62ce6b4e8..c02e2e14f2 100644 --- a/grace-shell/src/main/groovy/org/grails/cli/generator/InterceptorGenerator.groovy +++ b/grace-shell/src/main/groovy/org/grails/cli/generator/InterceptorGenerator.groovy @@ -18,7 +18,6 @@ package org.grails.cli.generator import groovy.transform.CompileStatic import grails.cli.generator.AbstractGenerator -import org.grails.config.CodeGenConfig /** * @author Michael Yan @@ -35,18 +34,15 @@ class InterceptorGenerator extends AbstractGenerator { } boolean overwrite = commandLine.hasOption('force') || commandLine.hasOption('f') - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() String propertyName = className.uncapitalize() - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') Map model = new HashMap<>() - model['packageName'] = defaultPackage + model['packageName'] = defaultPackageName model['className'] = className model['propertyName'] = propertyName - String interceptorClassFile = 'app/controllers/' + packagePath + '/' + className + 'Interceptor.groovy' - String interceptorClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'InterceptorSpec.groovy' + String interceptorClassFile = 'app/controllers/' + defaultPackagePath + '/' + className + 'Interceptor.groovy' + String interceptorClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'InterceptorSpec.groovy' createFile('Interceptor.groovy.tpl', interceptorClassFile, model, overwrite) createFile('InterceptorSpec.groovy.tpl', interceptorClassSpecFile, model, overwrite) @@ -61,13 +57,10 @@ class InterceptorGenerator extends AbstractGenerator { return } - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') - String interceptorClassFile = 'app/controllers/' + packagePath + '/' + className + 'Interceptor.groovy' - String interceptorClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'InterceptorSpec.groovy' + String interceptorClassFile = 'app/controllers/' + defaultPackagePath + '/' + className + 'Interceptor.groovy' + String interceptorClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'InterceptorSpec.groovy' removeFile(interceptorClassFile) removeFile(interceptorClassSpecFile) diff --git a/grace-shell/src/main/groovy/org/grails/cli/generator/ServiceGenerator.groovy b/grace-shell/src/main/groovy/org/grails/cli/generator/ServiceGenerator.groovy index 9770a62711..e71dec8d92 100644 --- a/grace-shell/src/main/groovy/org/grails/cli/generator/ServiceGenerator.groovy +++ b/grace-shell/src/main/groovy/org/grails/cli/generator/ServiceGenerator.groovy @@ -18,7 +18,6 @@ package org.grails.cli.generator import groovy.transform.CompileStatic import grails.cli.generator.AbstractGenerator -import org.grails.config.CodeGenConfig /** * @author Michael Yan @@ -35,21 +34,18 @@ class ServiceGenerator extends AbstractGenerator { } boolean overwrite = commandLine.hasOption('force') || commandLine.hasOption('f') - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() String propertyName = className.uncapitalize() String[] methodNames = (args.size() >= 3 ? args[2..-1] : ['serviceMethod']) as String[] - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') Map model = new HashMap<>() - model['packageName'] = defaultPackage + model['packageName'] = defaultPackageName model['className'] = className model['propertyName'] = propertyName model['methods'] = methodNames - String serviceClassFile = 'app/services/' + packagePath + '/' + className + 'Service.groovy' - String serviceClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'ServiceSpec.groovy' + String serviceClassFile = 'app/services/' + defaultPackagePath + '/' + className + 'Service.groovy' + String serviceClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'ServiceSpec.groovy' createFile('Service.groovy.tpl', serviceClassFile, model, overwrite) createFile('ServiceSpec.groovy.tpl', serviceClassSpecFile, model, overwrite) @@ -63,13 +59,10 @@ class ServiceGenerator extends AbstractGenerator { return } - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') - String serviceClassFile = 'app/services/' + packagePath + '/' + className + 'Service.groovy' - String serviceClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'ServiceSpec.groovy' + String serviceClassFile = 'app/services/' + defaultPackagePath + '/' + className + 'Service.groovy' + String serviceClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'ServiceSpec.groovy' removeFile(serviceClassFile) removeFile(serviceClassSpecFile) diff --git a/grace-shell/src/main/groovy/org/grails/cli/generator/TaglibGenerator.groovy b/grace-shell/src/main/groovy/org/grails/cli/generator/TaglibGenerator.groovy index 7d472e6cb3..108783c154 100644 --- a/grace-shell/src/main/groovy/org/grails/cli/generator/TaglibGenerator.groovy +++ b/grace-shell/src/main/groovy/org/grails/cli/generator/TaglibGenerator.groovy @@ -18,7 +18,6 @@ package org.grails.cli.generator import groovy.transform.CompileStatic import grails.cli.generator.AbstractGenerator -import org.grails.config.CodeGenConfig /** * @author Michael Yan @@ -35,21 +34,18 @@ class TaglibGenerator extends AbstractGenerator { } boolean overwrite = commandLine.hasOption('force') || commandLine.hasOption('f') - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() String propertyName = className.uncapitalize() String[] tagNames = (args.size() >= 3 ? args[2..-1] : ['tag']) as String[] - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') Map model = new HashMap<>() - model['packageName'] = defaultPackage + model['packageName'] = defaultPackageName model['className'] = className model['propertyName'] = propertyName model['tags'] = tagNames - String taglibClassFile = 'app/taglib/' + packagePath + '/' + className + 'TagLib.groovy' - String taglibClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'TagLibSpec.groovy' + String taglibClassFile = 'app/taglib/' + defaultPackagePath + '/' + className + 'TagLib.groovy' + String taglibClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'TagLibSpec.groovy' createFile('TagLib.groovy.tpl', taglibClassFile, model, overwrite) createFile('TagLibSpec.groovy.tpl', taglibClassSpecFile, model, overwrite) true @@ -62,13 +58,10 @@ class TaglibGenerator extends AbstractGenerator { return } - CodeGenConfig config = loadApplicationConfig() String className = args[1].capitalize() - String defaultPackage = config.getProperty('grails.codegen.defaultPackage') - String packagePath = defaultPackage.replace('.', '/') - String taglibClassFile = 'app/taglib/' + packagePath + '/' + className + 'TagLib.groovy' - String taglibClassSpecFile = 'src/test/groovy/' + packagePath + '/' + className + 'TagLibSpec.groovy' + String taglibClassFile = 'app/taglib/' + defaultPackagePath + '/' + className + 'TagLib.groovy' + String taglibClassSpecFile = 'src/test/groovy/' + defaultPackagePath + '/' + className + 'TagLibSpec.groovy' removeFile(taglibClassFile) removeFile(taglibClassSpecFile)