Merge branch '1.5.x'

pull/8185/merge
Andy Wilkinson 8 years ago
commit 5ac5aa3e9a

@ -1,5 +1,5 @@
/*
* Copyright 2012-2015 the original author or authors.
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,8 +16,14 @@
package org.springframework.boot.autoconfigure.freemarker;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.boot.bind.PropertySourcesPropertyValues;
import org.springframework.boot.bind.RelaxedDataBinder;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.ClassUtils;
@ -36,18 +42,54 @@ public class FreeMarkerTemplateAvailabilityProvider
public boolean isTemplateAvailable(String view, Environment environment,
ClassLoader classLoader, ResourceLoader resourceLoader) {
if (ClassUtils.isPresent("freemarker.template.Configuration", classLoader)) {
RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment,
"spring.freemarker.");
String loaderPath = resolver.getProperty("template-loader-path",
FreeMarkerProperties.DEFAULT_TEMPLATE_LOADER_PATH);
String prefix = resolver.getProperty("prefix",
FreeMarkerProperties.DEFAULT_PREFIX);
String suffix = resolver.getProperty("suffix",
FreeMarkerProperties.DEFAULT_SUFFIX);
return resourceLoader.getResource(loaderPath + prefix + view + suffix)
.exists();
FreeMarkerTemplateAvailabilityProperties properties = new FreeMarkerTemplateAvailabilityProperties();
RelaxedDataBinder binder = new RelaxedDataBinder(properties,
"spring.freemarker");
binder.bind(new PropertySourcesPropertyValues(
((ConfigurableEnvironment) environment).getPropertySources()));
for (String loaderPath : properties.getTemplateLoaderPath()) {
if (resourceLoader.getResource(loaderPath + properties.getPrefix() + view
+ properties.getSuffix()).exists()) {
return true;
}
}
}
return false;
}
static final class FreeMarkerTemplateAvailabilityProperties {
private List<String> templateLoaderPath = new ArrayList<String>(
Arrays.asList(FreeMarkerProperties.DEFAULT_TEMPLATE_LOADER_PATH));
private String prefix = FreeMarkerProperties.DEFAULT_PREFIX;
private String suffix = FreeMarkerProperties.DEFAULT_SUFFIX;
public List<String> getTemplateLoaderPath() {
return this.templateLoaderPath;
}
public void setTemplateLoaderPath(List<String> templateLoaderPath) {
this.templateLoaderPath = templateLoaderPath;
}
public String getPrefix() {
return this.prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSuffix() {
return this.suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
}

@ -16,10 +16,15 @@
package org.springframework.boot.autoconfigure.groovy.template;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.boot.bind.PropertySourcesPropertyValues;
import org.springframework.boot.bind.RelaxedDataBinder;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.env.PropertyResolver;
import org.springframework.core.io.ResourceLoader;
import org.springframework.util.ClassUtils;
@ -36,18 +41,54 @@ public class GroovyTemplateAvailabilityProvider implements TemplateAvailabilityP
public boolean isTemplateAvailable(String view, Environment environment,
ClassLoader classLoader, ResourceLoader resourceLoader) {
if (ClassUtils.isPresent("groovy.text.TemplateEngine", classLoader)) {
PropertyResolver resolver = new RelaxedPropertyResolver(environment,
"spring.groovy.template.");
String loaderPath = resolver.getProperty("resource-loader-path",
GroovyTemplateProperties.DEFAULT_RESOURCE_LOADER_PATH);
String prefix = resolver.getProperty("prefix",
GroovyTemplateProperties.DEFAULT_PREFIX);
String suffix = resolver.getProperty("suffix",
GroovyTemplateProperties.DEFAULT_SUFFIX);
return resourceLoader.getResource(loaderPath + prefix + view + suffix)
.exists();
GroovyTemplateAvailabilityProperties properties = new GroovyTemplateAvailabilityProperties();
RelaxedDataBinder binder = new RelaxedDataBinder(properties,
"spring.groovy.template");
binder.bind(new PropertySourcesPropertyValues(
((ConfigurableEnvironment) environment).getPropertySources()));
for (String loaderPath : properties.getResourceLoaderPath()) {
if (resourceLoader.getResource(loaderPath + properties.getPrefix() + view
+ properties.getSuffix()).exists()) {
return true;
}
}
}
return false;
}
static final class GroovyTemplateAvailabilityProperties {
private List<String> resourceLoaderPath = new ArrayList<String>(
Arrays.asList(GroovyTemplateProperties.DEFAULT_RESOURCE_LOADER_PATH));
private String prefix = GroovyTemplateProperties.DEFAULT_PREFIX;
private String suffix = GroovyTemplateProperties.DEFAULT_SUFFIX;
public List<String> getResourceLoaderPath() {
return this.resourceLoaderPath;
}
public void setResourceLoaderPath(List<String> resourceLoaderPath) {
this.resourceLoaderPath = resourceLoaderPath;
}
public String getPrefix() {
return this.prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSuffix() {
return this.suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2016 the original author or authors.
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -58,6 +58,14 @@ public class FreeMarkerTemplateAvailabilityProviderTests {
getClass().getClassLoader(), this.resourceLoader)).isTrue();
}
@Test
public void availabilityOfTemplateWithCustomLoaderPathConfiguredAsAList() {
this.environment.setProperty("spring.freemarker.template-loader-path[0]",
"classpath:/custom-templates/");
assertThat(this.provider.isTemplateAvailable("custom", this.environment,
getClass().getClassLoader(), this.resourceLoader)).isTrue();
}
@Test
public void availabilityOfTemplateWithCustomPrefix() {
this.environment.setProperty("spring.freemarker.prefix", "prefix/");

@ -58,6 +58,14 @@ public class GroovyTemplateAvailabilityProviderTests {
getClass().getClassLoader(), this.resourceLoader)).isTrue();
}
@Test
public void availabilityOfTemplateWithCustomLoaderPathConfiguredAsAList() {
this.environment.setProperty("spring.groovy.template.resource-loader-path[0]",
"classpath:/custom-templates/");
assertThat(this.provider.isTemplateAvailable("custom", this.environment,
getClass().getClassLoader(), this.resourceLoader)).isTrue();
}
@Test
public void availabilityOfTemplateWithCustomPrefix() {
this.environment.setProperty("spring.groovy.template.prefix", "prefix/");

Loading…
Cancel
Save