From 0807fcd182922f00f3f6fbfb13ea8449aa64e1e4 Mon Sep 17 00:00:00 2001 From: Scott Murphy Heiberg Date: Tue, 10 Sep 2024 17:28:19 -0700 Subject: [PATCH] Allow default scaffold templates for namespaces --- .../ScaffoldingViewResolver.groovy | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/groovy/grails/plugin/scaffolding/ScaffoldingViewResolver.groovy b/src/main/groovy/grails/plugin/scaffolding/ScaffoldingViewResolver.groovy index 0bba265..c75ff88 100644 --- a/src/main/groovy/grails/plugin/scaffolding/ScaffoldingViewResolver.groovy +++ b/src/main/groovy/grails/plugin/scaffolding/ScaffoldingViewResolver.groovy @@ -70,6 +70,28 @@ class ScaffoldingViewResolver extends GroovyPageViewResolver implements Resource viewCacheKey } + private Resource resolveResource(Class controllerClass, shortViewName) { + Resource res = null + if (Environment.isDevelopmentMode()) { + res = new FileSystemResource(new File(BuildSettings.BASE_DIR, "src/main/templates/scaffolding/${shortViewName}.gsp")) + } + + if (!res?.exists()) { + def url = IOUtils.findResourceRelativeToClass(controllerClass, "/META-INF/templates/scaffolding/${shortViewName}.gsp") + res = url ? new UrlResource(url) : null + } + + if (!res.exists() && templateOverridePluginDescriptor) { + def url = IOUtils.findResourceRelativeToClass(templateOverridePluginDescriptor, "/META-INF/templates/scaffolding/${shortViewName}.gsp") + res = url ? new UrlResource(url) : null + } + + if (!res.exists()) { + res = resourceLoader.getResource("classpath:META-INF/templates/scaffolding/${shortViewName}.gsp") + } + res + } + @Override protected View loadView(String viewName, Locale locale) throws Exception { def view = super.loadView(viewName, locale) @@ -93,26 +115,10 @@ class ScaffoldingViewResolver extends GroovyPageViewResolver implements Resource if (scaffoldValue instanceof Class) { def shortViewName = viewName.substring(viewName.lastIndexOf('/') + 1) - Resource res = null - - if (Environment.isDevelopmentMode()) { - res = new FileSystemResource(new File(BuildSettings.BASE_DIR, "src/main/templates/scaffolding/${shortViewName}.gsp")) - } - + Resource res = controllerClass.namespace? resolveResource(controllerClass.clazz, "${controllerClass.namespace}/${shortViewName}") : null if (!res?.exists()) { - def url = IOUtils.findResourceRelativeToClass(controllerClass.clazz, "/META-INF/templates/scaffolding/${shortViewName}.gsp") - res = url ? new UrlResource(url) : null + res = resolveResource(controllerClass.clazz, shortViewName) } - - if (!res.exists() && templateOverridePluginDescriptor) { - def url = IOUtils.findResourceRelativeToClass(templateOverridePluginDescriptor, "/META-INF/templates/scaffolding/${shortViewName}.gsp") - res = url ? new UrlResource(url) : null - } - - if (!res.exists()) { - res = resourceLoader.getResource("classpath:META-INF/templates/scaffolding/${shortViewName}.gsp") - } - if (res.exists()) { def model = model((Class) scaffoldValue) def viewGenerator = new GStringTemplateEngine() @@ -133,9 +139,7 @@ class ScaffoldingViewResolver extends GroovyPageViewResolver implements Resource } else { return view } - } - } } return view