Migrate ProjectDescription to an interface

This commit migrates ProjectDescription to an interface with read-only
accessors and create a MutableProjectDescription implementation that can
be used for both purposes.

As a result, the type separation between ResolvedProjectDescription and
ProjectDescription is no longer necessary.

Closes gh-993
This commit is contained in:
Stephane Nicoll
2019-08-23 18:47:26 +02:00
parent 67de21f629
commit 286e38888c
70 changed files with 565 additions and 592 deletions

View File

@@ -33,7 +33,7 @@ import java.util.function.Function;
import io.spring.initializr.generator.buildsystem.BuildSystem;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.io.template.TemplateRenderer;
import io.spring.initializr.generator.project.ResolvedProjectDescription;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.DependencyMetadata;
import io.spring.initializr.metadata.DependencyMetadataProvider;
@@ -306,7 +306,7 @@ public class MainController extends AbstractInitializrController {
}
}
private static String getWrapperScript(ResolvedProjectDescription description) {
private static String getWrapperScript(ProjectDescription description) {
BuildSystem buildSystem = description.getBuildSystem();
String script = buildSystem.id().equals(MavenBuildSystem.ID) ? "mvnw" : "gradlew";
return (description.getBaseDirectory() != null) ? description.getBaseDirectory() + "/" + script : script;

View File

@@ -32,7 +32,6 @@ import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationContext;
import io.spring.initializr.generator.project.ProjectGenerationException;
import io.spring.initializr.generator.project.ProjectGenerator;
import io.spring.initializr.generator.project.ResolvedProjectDescription;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.initializr.metadata.InitializrMetadataProvider;
import io.spring.initializr.metadata.support.MetadataBuildItemResolver;
@@ -91,7 +90,7 @@ public class ProjectGenerationInvoker {
return (context) -> {
Path projectDir = new DefaultProjectAssetGenerator().generate(context);
publishProjectGeneratedEvent(request, context);
return new ProjectGenerationResult(context.getBean(ResolvedProjectDescription.class), projectDir);
return new ProjectGenerationResult(context.getBean(ProjectDescription.class), projectDir);
};
}
@@ -161,7 +160,7 @@ public class ProjectGenerationInvoker {
}
private byte[] generateBuild(ProjectGenerationContext context) throws IOException {
ResolvedProjectDescription projectDescription = context.getBean(ResolvedProjectDescription.class);
ProjectDescription projectDescription = context.getBean(ProjectDescription.class);
StringWriter out = new StringWriter();
BuildWriter buildWriter = context.getBeanProvider(BuildWriter.class).getIfAvailable();
if (buildWriter != null) {
@@ -179,7 +178,7 @@ public class ProjectGenerationInvoker {
context.setParent(this.parentApplicationContext);
context.registerBean(InitializrMetadata.class, () -> metadata);
context.registerBean(BuildItemResolver.class, () -> new MetadataBuildItemResolver(metadata,
context.getBean(ResolvedProjectDescription.class).getPlatformVersion()));
context.getBean(ProjectDescription.class).getPlatformVersion()));
}
private void publishProjectGeneratedEvent(ProjectRequest request, ProjectGenerationContext context) {

View File

@@ -18,7 +18,7 @@ package io.spring.initializr.web.project;
import java.nio.file.Path;
import io.spring.initializr.generator.project.ResolvedProjectDescription;
import io.spring.initializr.generator.project.ProjectDescription;
/**
* Result of project generation.
@@ -27,28 +27,27 @@ import io.spring.initializr.generator.project.ResolvedProjectDescription;
*/
public class ProjectGenerationResult {
private final ResolvedProjectDescription projectDescription;
private final ProjectDescription projectDescription;
private final Path rootDirectory;
ProjectGenerationResult(ResolvedProjectDescription projectDescription, Path rootDirectory) {
ProjectGenerationResult(ProjectDescription projectDescription, Path rootDirectory) {
this.projectDescription = projectDescription;
this.rootDirectory = rootDirectory;
}
/**
* Return the {@link ResolvedProjectDescription} that was used to generate the
* project.
* Return the {@link ProjectDescription} that was used to generate the project.
* @return the project description
*/
public ResolvedProjectDescription getProjectDescription() {
public ProjectDescription getProjectDescription() {
return this.projectDescription;
}
/**
* Return the root directory.
* @return the root directory
* @see ResolvedProjectDescription#getBaseDirectory()
* @see ProjectDescription#getBaseDirectory()
*/
public Path getRootDirectory() {
return this.rootDirectory;

View File

@@ -23,6 +23,7 @@ import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.BuildSystem;
import io.spring.initializr.generator.language.Language;
import io.spring.initializr.generator.packaging.Packaging;
import io.spring.initializr.generator.project.MutableProjectDescription;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.DefaultMetadataElement;
@@ -50,7 +51,7 @@ public class ProjectRequestToDescriptionConverter {
String springBootVersion = getSpringBootVersion(request, metadata);
List<Dependency> resolvedDependencies = getResolvedDependencies(request, springBootVersion, metadata);
validateDependencyRange(springBootVersion, resolvedDependencies);
ProjectDescription description = new ProjectDescription();
MutableProjectDescription description = new MutableProjectDescription();
description.setApplicationName(getApplicationName(request, metadata));
description.setArtifactId(getArtifactId(request, metadata));
description.setBaseDirectory(getBaseDirectory(request.getBaseDir(), request.getArtifactId()));

View File

@@ -17,7 +17,7 @@
package io.spring.initializr.web.project;
import io.spring.initializr.generator.language.java.JavaLanguage;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.MutableProjectDescription;
import io.spring.initializr.generator.project.ProjectDescriptionCustomizer;
import io.spring.initializr.generator.test.project.ProjectStructure;
import io.spring.initializr.generator.version.Version;
@@ -52,7 +52,7 @@ class ProjectGenerationDescriptionCustomizerTests extends AbstractInitializrCont
ProjectDescriptionCustomizer secondPostProcessor() {
return new ProjectDescriptionCustomizer() {
@Override
public void customize(ProjectDescription description) {
public void customize(MutableProjectDescription description) {
description.setLanguage(new JavaLanguage("1.7"));
}
@@ -67,7 +67,7 @@ class ProjectGenerationDescriptionCustomizerTests extends AbstractInitializrCont
ProjectDescriptionCustomizer firstPostProcessor() {
return new ProjectDescriptionCustomizer() {
@Override
public void customize(ProjectDescription description) {
public void customize(MutableProjectDescription description) {
description.setLanguage(new JavaLanguage("1.2"));
description.setPlatformVersion(Version.parse("2.2.3.RELEASE"));
}