Skip to content

Commit d819723

Browse files
committed
Add support for configuration file format to the initializr-web module
1 parent 10b3b81 commit d819723

12 files changed

+151
-2
lines changed

initializr-web/src/main/java/io/spring/initializr/web/mapper/InitializrMetadataV2JsonMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public String write(InitializrMetadata metadata, String appUrl) {
8888
singleSelect(parent, metadata.getPackagings());
8989
singleSelect(parent, metadata.getJavaVersions());
9090
singleSelect(parent, metadata.getLanguages());
91+
singleSelect(parent, metadata.getConfigurationFileFormats());
9192
singleSelect(parent, metadata.getBootVersions(), this::mapVersionMetadata, this::formatVersion);
9293
text(parent, metadata.getGroupId());
9394
text(parent, metadata.getArtifactId());

initializr-web/src/main/java/io/spring/initializr/web/project/DefaultProjectRequestToDescriptionConverter.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.stream.Collectors;
2323

2424
import io.spring.initializr.generator.buildsystem.BuildSystem;
25+
import io.spring.initializr.generator.configuration.format.ConfigurationFileFormat;
2526
import io.spring.initializr.generator.language.Language;
2627
import io.spring.initializr.generator.packaging.Packaging;
2728
import io.spring.initializr.generator.project.MutableProjectDescription;
@@ -91,6 +92,7 @@ public void convert(ProjectRequest request, MutableProjectDescription descriptio
9192
description.setDescription(request.getDescription());
9293
description.setGroupId(cleanInputValue(request.getGroupId()));
9394
description.setLanguage(Language.forId(request.getLanguage(), request.getJavaVersion()));
95+
description.setConfigurationFileFormat(ConfigurationFileFormat.forId(request.getConfigurationFileFormat()));
9496
description.setName(cleanInputValue(request.getName()));
9597
description.setPackageName(cleanInputValue(request.getPackageName()));
9698
description.setPackaging(Packaging.forId(request.getPackaging()));
@@ -114,6 +116,7 @@ private void validate(ProjectRequest request, InitializrMetadata metadata) {
114116
validatePlatformVersion(request, metadata);
115117
validateType(request.getType(), metadata);
116118
validateLanguage(request.getLanguage(), metadata);
119+
validateConfigurationFileFormat(request.getConfigurationFileFormat(), metadata);
117120
validatePackaging(request.getPackaging(), metadata);
118121
validateDependencies(request, metadata);
119122
}
@@ -149,6 +152,17 @@ private void validateLanguage(String language, InitializrMetadata metadata) {
149152
}
150153
}
151154

155+
private void validateConfigurationFileFormat(String configurationFileFormat, InitializrMetadata metadata) {
156+
if (configurationFileFormat != null) {
157+
DefaultMetadataElement configurationFileFormatFromMetadata = metadata.getConfigurationFileFormats()
158+
.get(configurationFileFormat);
159+
if (configurationFileFormatFromMetadata == null) {
160+
throw new InvalidProjectRequestException(
161+
"Unknown configuration file format '" + configurationFileFormat + "' check project metadata");
162+
}
163+
}
164+
}
165+
152166
private void validatePackaging(String packaging, InitializrMetadata metadata) {
153167
if (packaging != null) {
154168
DefaultMetadataElement packagingFromMetadata = metadata.getPackagings().get(packaging);

initializr-web/src/main/java/io/spring/initializr/web/project/ProjectRequest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public class ProjectRequest {
5050

5151
private String language;
5252

53+
private String configurationFileFormat;
54+
5355
private String packageName;
5456

5557
private String javaVersion;
@@ -145,6 +147,14 @@ public void setLanguage(String language) {
145147
this.language = language;
146148
}
147149

150+
public String getConfigurationFileFormat() {
151+
return this.configurationFileFormat;
152+
}
153+
154+
public void setConfigurationFileFormat(String configurationFileFormat) {
155+
this.configurationFileFormat = configurationFileFormat;
156+
}
157+
148158
public String getPackageName() {
149159
if (StringUtils.hasText(this.packageName)) {
150160
return this.packageName;

initializr-web/src/test/java/io/spring/initializr/web/AbstractInitializrIntegrationTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@ protected void assertDefaultProject(ProjectStructure project) {
167167

168168
protected void assertDefaultJavaProject(ProjectStructure project) {
169169
assertThat(project).containsFiles("src/main/java/com/example/demo/DemoApplication.java",
170-
"src/test/java/com/example/demo/DemoApplicationTests.java",
171-
"src/main/resources/application.properties");
170+
"src/test/java/com/example/demo/DemoApplicationTests.java");
172171
}
173172

174173
protected void assertHasWebResources(ProjectStructure project) {

initializr-web/src/test/java/io/spring/initializr/web/controller/ProjectGenerationControllerIntegrationTests.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,37 @@ void simpleZipProject() {
5353
// alias: jpa -> data-jpa
5454
.hasDependency(Dependency.createSpringBootStarter("data-jpa"))
5555
.hasDependency(Dependency.createSpringBootStarter("test", Dependency.SCOPE_TEST));
56+
// default configuration file format is .properties
57+
assertThat(project).containsFiles("src/main/resources/application.properties");
58+
}
59+
60+
@Test
61+
void simpleZipProjectWithPropertiesFormat() {
62+
ResponseEntity<byte[]> entity = downloadArchive(
63+
"/starter.zip?dependencies=web&configurationFileFormat=properties");
64+
assertArchiveResponseHeaders(entity, MediaType.valueOf("application/zip"), "demo.zip");
65+
ProjectStructure project = projectFromArchive(entity.getBody());
66+
assertDefaultProject(project);
67+
assertHasWebResources(project);
68+
assertThat(project).mavenBuild()
69+
.hasDependenciesSize(2)
70+
.hasDependency(Dependency.createSpringBootStarter("web"))
71+
.hasDependency(Dependency.createSpringBootStarter("test", Dependency.SCOPE_TEST));
72+
assertThat(project).containsFiles("src/main/resources/application.properties");
73+
}
5674

75+
@Test
76+
void simpleZipProjectWithYAMLFormat() {
77+
ResponseEntity<byte[]> entity = downloadArchive("/starter.zip?dependencies=web&&configurationFileFormat=yml");
78+
assertArchiveResponseHeaders(entity, MediaType.valueOf("application/zip"), "demo.zip");
79+
ProjectStructure project = projectFromArchive(entity.getBody());
80+
assertDefaultProject(project);
81+
assertHasWebResources(project);
82+
assertThat(project).mavenBuild()
83+
.hasDependenciesSize(2)
84+
.hasDependency(Dependency.createSpringBootStarter("web"))
85+
.hasDependency(Dependency.createSpringBootStarter("test", Dependency.SCOPE_TEST));
86+
assertThat(project).containsFiles("src/main/resources/application.yml");
5787
}
5888

5989
@Test

initializr-web/src/test/resources/application-test-default.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ initializr:
150150
- name: Kotlin
151151
id: kotlin
152152
default: false
153+
configuration-file-formats:
154+
- name: Properties
155+
id: properties
156+
default: true
157+
- name: YAML
158+
id: yml
159+
default: false
153160
bootVersions:
154161
- name : Latest SNAPSHOT
155162
id: 2.5.0-SNAPSHOT

initializr-web/src/test/resources/metadata/config/test-default.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,24 @@
320320
"title": "Language",
321321
"type": "SINGLE_SELECT"
322322
},
323+
"configurationFileFormats": {
324+
"content": [
325+
{
326+
"default": true,
327+
"id": "properties",
328+
"name": "Properties"
329+
},
330+
{
331+
"default": false,
332+
"id": "yml",
333+
"name": "YAML"
334+
}
335+
],
336+
"description": "configuration file format",
337+
"id": "configurationFileFormat",
338+
"title": "Configuration File Format",
339+
"type": "SINGLE_SELECT"
340+
},
323341
"name": {
324342
"content": "demo",
325343
"description": "project name (infer application name)",

initializr-web/src/test/resources/metadata/test-default-2.0.0-ssl.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,20 @@
149149
}
150150
]
151151
},
152+
"configurationFileFormat": {
153+
"type": "single-select",
154+
"default": "properties",
155+
"values": [
156+
{
157+
"id": "properties",
158+
"name": "Properties"
159+
},
160+
{
161+
"id": "yml",
162+
"name": "YAML"
163+
}
164+
]
165+
},
152166
"bootVersion": {
153167
"type": "single-select",
154168
"default": "2.4.4.RELEASE",

initializr-web/src/test/resources/metadata/test-default-2.0.0.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,20 @@
149149
}
150150
]
151151
},
152+
"configurationFileFormat": {
153+
"type": "single-select",
154+
"default": "properties",
155+
"values": [
156+
{
157+
"id": "properties",
158+
"name": "Properties"
159+
},
160+
{
161+
"id": "yml",
162+
"name": "YAML"
163+
}
164+
]
165+
},
152166
"bootVersion": {
153167
"type": "single-select",
154168
"default": "2.4.4.RELEASE",

initializr-web/src/test/resources/metadata/test-default-2.1.0-ssl.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,20 @@
187187
}
188188
]
189189
},
190+
"configurationFileFormat": {
191+
"type": "single-select",
192+
"default": "properties",
193+
"values": [
194+
{
195+
"id": "properties",
196+
"name": "Properties"
197+
},
198+
{
199+
"id": "yml",
200+
"name": "YAML"
201+
}
202+
]
203+
},
190204
"bootVersion": {
191205
"type": "single-select",
192206
"default": "2.4.4.RELEASE",

0 commit comments

Comments
 (0)