mirror of
https://gitee.com/dcren/initializr.git
synced 2025-09-18 09:44:47 +08:00
Review TemplateRenderer abstraction
Closes gh-818
This commit is contained in:
@@ -25,13 +25,14 @@ import javax.cache.expiry.Duration;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.spring.initializr.generator.io.IndentingWriterFactory;
|
||||
import io.spring.initializr.generator.io.SimpleIndentStrategy;
|
||||
import io.spring.initializr.generator.io.template.MustacheTemplateRenderer;
|
||||
import io.spring.initializr.generator.io.template.TemplateRenderer;
|
||||
import io.spring.initializr.generator.project.ProjectDirectoryFactory;
|
||||
import io.spring.initializr.metadata.DependencyMetadataProvider;
|
||||
import io.spring.initializr.metadata.InitializrMetadata;
|
||||
import io.spring.initializr.metadata.InitializrMetadataBuilder;
|
||||
import io.spring.initializr.metadata.InitializrMetadataProvider;
|
||||
import io.spring.initializr.metadata.InitializrProperties;
|
||||
import io.spring.initializr.util.TemplateRenderer;
|
||||
import io.spring.initializr.web.ProjectResourceLocator;
|
||||
import io.spring.initializr.web.project.MainController;
|
||||
import io.spring.initializr.web.project.ProjectGenerationInvoker;
|
||||
@@ -40,6 +41,7 @@ import io.spring.initializr.web.support.DefaultDependencyMetadataProvider;
|
||||
import io.spring.initializr.web.support.DefaultInitializrMetadataProvider;
|
||||
import io.spring.initializr.web.ui.UiController;
|
||||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
@@ -50,6 +52,9 @@ import org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfigu
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.bind.Binder;
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.cache.Cache;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.cache.support.NoOpCache;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -84,12 +89,22 @@ public class InitializrAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
public TemplateRenderer templateRenderer(Environment environment) {
|
||||
Binder binder = Binder.get(environment);
|
||||
boolean cache = binder.bind("spring.mustache.cache", Boolean.class).orElse(true);
|
||||
TemplateRenderer templateRenderer = new TemplateRenderer();
|
||||
templateRenderer.setCache(cache);
|
||||
return templateRenderer;
|
||||
public TemplateRenderer templateRenderer(Environment environment,
|
||||
ObjectProvider<CacheManager> cacheManager) {
|
||||
return new MustacheTemplateRenderer("classpath:/templates",
|
||||
determineCache(environment, cacheManager.getIfAvailable()));
|
||||
}
|
||||
|
||||
private Cache determineCache(Environment environment, CacheManager cacheManager) {
|
||||
if (cacheManager != null) {
|
||||
Binder binder = Binder.get(environment);
|
||||
boolean cache = binder.bind("spring.mustache.cache", Boolean.class)
|
||||
.orElse(true);
|
||||
if (cache) {
|
||||
return cacheManager.getCache("initializr.templates");
|
||||
}
|
||||
}
|
||||
return new NoOpCache("templates");
|
||||
}
|
||||
|
||||
@Bean
|
||||
|
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import com.samskivert.mustache.Mustache;
|
||||
import io.spring.initializr.generator.io.template.TemplateRenderer;
|
||||
import io.spring.initializr.generator.version.Version;
|
||||
import io.spring.initializr.metadata.DependencyMetadata;
|
||||
import io.spring.initializr.metadata.DependencyMetadataProvider;
|
||||
@@ -35,7 +36,6 @@ import io.spring.initializr.metadata.InitializrMetadata;
|
||||
import io.spring.initializr.metadata.InitializrMetadataProvider;
|
||||
import io.spring.initializr.util.Agent;
|
||||
import io.spring.initializr.util.Agent.AgentId;
|
||||
import io.spring.initializr.util.TemplateRenderer;
|
||||
import io.spring.initializr.web.mapper.DependencyMetadataV21JsonMapper;
|
||||
import io.spring.initializr.web.mapper.InitializrMetadataJsonMapper;
|
||||
import io.spring.initializr.web.mapper.InitializrMetadataV21JsonMapper;
|
||||
@@ -121,7 +121,8 @@ public class MainController extends AbstractInitializrController {
|
||||
|
||||
@RequestMapping(path = "/", produces = "text/plain")
|
||||
public ResponseEntity<String> serviceCapabilitiesText(
|
||||
@RequestHeader(value = HttpHeaders.USER_AGENT, required = false) String userAgent) {
|
||||
@RequestHeader(value = HttpHeaders.USER_AGENT, required = false) String userAgent)
|
||||
throws IOException {
|
||||
String appUrl = generateAppUrl();
|
||||
InitializrMetadata metadata = this.metadataProvider.get();
|
||||
|
||||
|
@@ -17,16 +17,17 @@
|
||||
package io.spring.initializr.web.support;
|
||||
|
||||
import java.beans.PropertyDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.spring.initializr.generator.io.template.TemplateRenderer;
|
||||
import io.spring.initializr.metadata.Dependency;
|
||||
import io.spring.initializr.metadata.InitializrMetadata;
|
||||
import io.spring.initializr.metadata.MetadataElement;
|
||||
import io.spring.initializr.metadata.Type;
|
||||
import io.spring.initializr.util.TemplateRenderer;
|
||||
|
||||
import org.springframework.beans.BeanWrapperImpl;
|
||||
|
||||
@@ -56,12 +57,13 @@ public class CommandLineHelpGenerator {
|
||||
* @param metadata the initializr metadata
|
||||
* @param serviceUrl the service URL
|
||||
* @return the generic capabilities text document
|
||||
* @throws IOException if rendering the capabilities failed
|
||||
*/
|
||||
public String generateGenericCapabilities(InitializrMetadata metadata,
|
||||
String serviceUrl) {
|
||||
String serviceUrl) throws IOException {
|
||||
Map<String, Object> model = initializeCommandLineModel(metadata, serviceUrl);
|
||||
model.put("hasExamples", false);
|
||||
return this.template.process("cli-capabilities.txt", model);
|
||||
return this.template.render("cli/cli-capabilities", model);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,13 +71,14 @@ public class CommandLineHelpGenerator {
|
||||
* @param metadata the initializr metadata
|
||||
* @param serviceUrl the service URL
|
||||
* @return the generic capabilities text document
|
||||
* @throws IOException if rendering the capabilities failed
|
||||
*/
|
||||
public String generateCurlCapabilities(InitializrMetadata metadata,
|
||||
String serviceUrl) {
|
||||
public String generateCurlCapabilities(InitializrMetadata metadata, String serviceUrl)
|
||||
throws IOException {
|
||||
Map<String, Object> model = initializeCommandLineModel(metadata, serviceUrl);
|
||||
model.put("examples", this.template.process("curl-examples.txt", model));
|
||||
model.put("examples", this.template.render("cli/curl-examples", model));
|
||||
model.put("hasExamples", true);
|
||||
return this.template.process("cli-capabilities.txt", model);
|
||||
return this.template.render("cli/cli-capabilities", model);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -83,13 +86,14 @@ public class CommandLineHelpGenerator {
|
||||
* @param metadata the initializr metadata
|
||||
* @param serviceUrl the service URL
|
||||
* @return the generic capabilities text document
|
||||
* @throws IOException if rendering the capabilities failed
|
||||
*/
|
||||
public String generateHttpieCapabilities(InitializrMetadata metadata,
|
||||
String serviceUrl) {
|
||||
String serviceUrl) throws IOException {
|
||||
Map<String, Object> model = initializeCommandLineModel(metadata, serviceUrl);
|
||||
model.put("examples", this.template.process("httpie-examples.txt", model));
|
||||
model.put("examples", this.template.render("cli/httpie-examples", model));
|
||||
model.put("hasExamples", true);
|
||||
return this.template.process("cli-capabilities.txt", model);
|
||||
return this.template.render("cli/cli-capabilities", model);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -98,12 +102,13 @@ public class CommandLineHelpGenerator {
|
||||
* @param metadata the initializr metadata
|
||||
* @param serviceUrl the service URL
|
||||
* @return the generic capabilities text document
|
||||
* @throws IOException if rendering the capabilities failed
|
||||
*/
|
||||
public String generateSpringBootCliCapabilities(InitializrMetadata metadata,
|
||||
String serviceUrl) {
|
||||
String serviceUrl) throws IOException {
|
||||
Map<String, Object> model = initializeSpringBootCliModel(metadata, serviceUrl);
|
||||
model.put("hasExamples", false);
|
||||
return this.template.process("boot-cli-capabilities.txt", model);
|
||||
return this.template.render("cli/boot-cli-capabilities", model);
|
||||
}
|
||||
|
||||
protected Map<String, Object> initializeCommandLineModel(InitializrMetadata metadata,
|
||||
|
@@ -16,9 +16,9 @@
|
||||
|
||||
package io.spring.initializr.web.autoconfigure;
|
||||
|
||||
import io.spring.initializr.generator.io.template.TemplateRenderer;
|
||||
import io.spring.initializr.metadata.DependencyMetadataProvider;
|
||||
import io.spring.initializr.metadata.InitializrMetadataProvider;
|
||||
import io.spring.initializr.util.TemplateRenderer;
|
||||
import io.spring.initializr.web.ProjectResourceLocator;
|
||||
import io.spring.initializr.web.project.MainController;
|
||||
import io.spring.initializr.web.project.ProjectGenerationInvoker;
|
||||
|
@@ -26,8 +26,8 @@ import org.springframework.test.context.ActiveProfiles;
|
||||
/**
|
||||
* Validate that the "raw" HTTP commands that are described in the command-line help
|
||||
* works. If anything needs to be updated here, please double check the
|
||||
* "curl-examples.txt" as it may need an update as well. This is also a good indicator of
|
||||
* a non backward compatible change.
|
||||
* "cli/curl-examples.mustache" as it may need an update as well. This is also a good
|
||||
* indicator of a non backward compatible change.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
|
@@ -16,19 +16,22 @@
|
||||
|
||||
package io.spring.initializr.web.support;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import io.spring.initializr.generator.io.template.MustacheTemplateRenderer;
|
||||
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
|
||||
import io.spring.initializr.metadata.Dependency;
|
||||
import io.spring.initializr.metadata.InitializrMetadata;
|
||||
import io.spring.initializr.metadata.Type;
|
||||
import io.spring.initializr.util.TemplateRenderer;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link CommandLineHelpGenerator}.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
class CommandLineHelpGeneratorTests {
|
||||
@@ -37,11 +40,12 @@ class CommandLineHelpGeneratorTests {
|
||||
|
||||
@BeforeEach
|
||||
public void init() {
|
||||
this.generator = new CommandLineHelpGenerator(new TemplateRenderer());
|
||||
this.generator = new CommandLineHelpGenerator(
|
||||
new MustacheTemplateRenderer("classpath:/templates"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateGenericCapabilities() {
|
||||
void generateGenericCapabilities() throws IOException {
|
||||
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
|
||||
.addDependencyGroup("test", createDependency("id-b", "depB"),
|
||||
createDependency("id-a", "depA", "and some description"))
|
||||
@@ -57,7 +61,7 @@ class CommandLineHelpGeneratorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateCapabilitiesWithTypeDescription() {
|
||||
void generateCapabilitiesWithTypeDescription() throws IOException {
|
||||
Type type = new Type();
|
||||
type.setId("foo");
|
||||
type.setName("foo-name");
|
||||
@@ -72,7 +76,7 @@ class CommandLineHelpGeneratorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateCapabilitiesWithAlias() {
|
||||
void generateCapabilitiesWithAlias() throws IOException {
|
||||
Dependency dependency = createDependency("dep", "some description");
|
||||
dependency.setAliases(Arrays.asList("legacy", "another"));
|
||||
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
|
||||
@@ -85,7 +89,7 @@ class CommandLineHelpGeneratorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateCurlCapabilities() {
|
||||
void generateCurlCapabilities() throws IOException {
|
||||
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
|
||||
.addDependencyGroup("test", createDependency("id-b", "depB"),
|
||||
createDependency("id-a", "depA", "and some description"))
|
||||
@@ -101,7 +105,7 @@ class CommandLineHelpGeneratorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateHttpCapabilities() {
|
||||
void generateHttpCapabilities() throws IOException {
|
||||
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
|
||||
.addDependencyGroup("test", createDependency("id-b", "depB"),
|
||||
createDependency("id-a", "depA", "and some description"))
|
||||
@@ -118,7 +122,7 @@ class CommandLineHelpGeneratorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateSpringBootCliCapabilities() {
|
||||
void generateSpringBootCliCapabilities() throws IOException {
|
||||
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
|
||||
.addDependencyGroup("test", createDependency("id-b", "depB"),
|
||||
createDependency("id-a", "depA", "and some description"))
|
||||
@@ -139,7 +143,7 @@ class CommandLineHelpGeneratorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateCapabilitiesWithVersionRange() {
|
||||
void generateCapabilitiesWithVersionRange() throws IOException {
|
||||
Dependency first = Dependency.withId("first");
|
||||
first.setDescription("first desc");
|
||||
first.setVersionRange("1.2.0.RELEASE");
|
||||
|
Reference in New Issue
Block a user