Skip to content

Commit bb00ae6

Browse files
committed
Improve template variables customization
See gh-1626
1 parent 6db9d41 commit bb00ae6

File tree

4 files changed

+33
-64
lines changed

4 files changed

+33
-64
lines changed

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package io.spring.initializr.web.mapper;
1818

19-
import java.util.Collection;
20-
import java.util.Collections;
2119
import java.util.List;
2220

2321
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -47,15 +45,6 @@ public class InitializrMetadataV21JsonMapper extends InitializrMetadataV2JsonMap
4745
* Create a new instance.
4846
*/
4947
public InitializrMetadataV21JsonMapper() {
50-
this(Collections.emptyList());
51-
}
52-
53-
/**
54-
* Create a new instance using the additional template variables.
55-
* @param additionalTemplateVariables the additional template variables
56-
*/
57-
public InitializrMetadataV21JsonMapper(Collection<? extends TemplateVariable> additionalTemplateVariables) {
58-
super(additionalTemplateVariables);
5948
this.dependenciesVariables = new TemplateVariables(
6049
new TemplateVariable("bootVersion", TemplateVariable.VariableType.REQUEST_PARAM));
6150
}
@@ -84,13 +73,17 @@ protected String formatVersionRange(VersionRange versionRange) {
8473
return versionRange.format(Format.V1).toRangeString();
8574
}
8675

87-
private ObjectNode dependenciesLink(String appUrl) {
76+
protected ObjectNode dependenciesLink(String appUrl) {
8877
String uri = (appUrl != null) ? appUrl + "/dependencies" : "/dependencies";
89-
UriTemplate uriTemplate = UriTemplate.of(uri, this.dependenciesVariables);
78+
UriTemplate uriTemplate = UriTemplate.of(uri, getDependenciesVariables());
9079
ObjectNode result = nodeFactory().objectNode();
9180
result.put("href", uriTemplate.toString());
9281
result.put("templated", true);
9382
return result;
9483
}
9584

85+
protected TemplateVariables getDependenciesVariables() {
86+
return this.dependenciesVariables;
87+
}
88+
9689
}

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,9 @@
1616

1717
package io.spring.initializr.web.mapper;
1818

19-
import java.util.Collection;
20-
import java.util.Collections;
21-
2219
import io.spring.initializr.generator.version.Version;
2320
import io.spring.initializr.generator.version.VersionRange;
2421

25-
import org.springframework.hateoas.TemplateVariable;
26-
2722
/**
2823
* A {@link InitializrMetadataJsonMapper} handling the metadata format for v2.2
2924
* <p>
@@ -34,21 +29,6 @@
3429
*/
3530
public class InitializrMetadataV22JsonMapper extends InitializrMetadataV21JsonMapper {
3631

37-
/**
38-
* Create a new instance.
39-
*/
40-
public InitializrMetadataV22JsonMapper() {
41-
this(Collections.emptyList());
42-
}
43-
44-
/**
45-
* Create a new instance using the additional template variables.
46-
* @param additionalTemplateVariables the additional template variables
47-
*/
48-
public InitializrMetadataV22JsonMapper(Collection<? extends TemplateVariable> additionalTemplateVariables) {
49-
super(additionalTemplateVariables);
50-
}
51-
5232
@Override
5333
protected String formatVersion(String versionId) {
5434
return versionId;

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

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616

1717
package io.spring.initializr.web.mapper;
1818

19-
import java.util.ArrayList;
20-
import java.util.Collection;
21-
import java.util.Collections;
2219
import java.util.List;
2320
import java.util.function.Function;
2421
import java.util.stream.Collectors;
@@ -64,28 +61,18 @@ public class InitializrMetadataV2JsonMapper implements InitializrMetadataJsonMap
6461
* Create a new instance.
6562
*/
6663
public InitializrMetadataV2JsonMapper() {
67-
this(Collections.emptyList());
68-
}
69-
70-
/**
71-
* Create a new instance using the additional template variables.
72-
* @param additionalTemplateVariables the additional template variables
73-
*/
74-
public InitializrMetadataV2JsonMapper(Collection<? extends TemplateVariable> additionalTemplateVariables) {
75-
List<TemplateVariable> templateVariables = new ArrayList<>();
76-
templateVariables.add(new TemplateVariable("dependencies", TemplateVariable.VariableType.REQUEST_PARAM));
77-
templateVariables.add(new TemplateVariable("packaging", TemplateVariable.VariableType.REQUEST_PARAM));
78-
templateVariables.add(new TemplateVariable("javaVersion", TemplateVariable.VariableType.REQUEST_PARAM));
79-
templateVariables.add(new TemplateVariable("language", TemplateVariable.VariableType.REQUEST_PARAM));
80-
templateVariables.add(new TemplateVariable("bootVersion", TemplateVariable.VariableType.REQUEST_PARAM));
81-
templateVariables.add(new TemplateVariable("groupId", TemplateVariable.VariableType.REQUEST_PARAM));
82-
templateVariables.add(new TemplateVariable("artifactId", TemplateVariable.VariableType.REQUEST_PARAM));
83-
templateVariables.add(new TemplateVariable("version", TemplateVariable.VariableType.REQUEST_PARAM));
84-
templateVariables.add(new TemplateVariable("name", TemplateVariable.VariableType.REQUEST_PARAM));
85-
templateVariables.add(new TemplateVariable("description", TemplateVariable.VariableType.REQUEST_PARAM));
86-
templateVariables.add(new TemplateVariable("packageName", TemplateVariable.VariableType.REQUEST_PARAM));
87-
templateVariables.addAll(additionalTemplateVariables);
88-
this.templateVariables = new TemplateVariables(templateVariables);
64+
this.templateVariables = new TemplateVariables(
65+
new TemplateVariable("dependencies", TemplateVariable.VariableType.REQUEST_PARAM),
66+
new TemplateVariable("packaging", TemplateVariable.VariableType.REQUEST_PARAM),
67+
new TemplateVariable("javaVersion", TemplateVariable.VariableType.REQUEST_PARAM),
68+
new TemplateVariable("language", TemplateVariable.VariableType.REQUEST_PARAM),
69+
new TemplateVariable("bootVersion", TemplateVariable.VariableType.REQUEST_PARAM),
70+
new TemplateVariable("groupId", TemplateVariable.VariableType.REQUEST_PARAM),
71+
new TemplateVariable("artifactId", TemplateVariable.VariableType.REQUEST_PARAM),
72+
new TemplateVariable("version", TemplateVariable.VariableType.REQUEST_PARAM),
73+
new TemplateVariable("name", TemplateVariable.VariableType.REQUEST_PARAM),
74+
new TemplateVariable("description", TemplateVariable.VariableType.REQUEST_PARAM),
75+
new TemplateVariable("packageName", TemplateVariable.VariableType.REQUEST_PARAM));
8976
}
9077

9178
protected JsonNodeFactory nodeFactory() {
@@ -134,13 +121,17 @@ protected ObjectNode link(String appUrl, Type type) {
134121
return result;
135122
}
136123

137-
private String generateTemplatedUri(String appUrl, Type type) {
124+
protected String generateTemplatedUri(String appUrl, Type type) {
138125
String uri = (appUrl != null) ? appUrl + type.getAction() : type.getAction();
139126
uri = uri + "?type=" + type.getId();
140-
UriTemplate uriTemplate = UriTemplate.of(uri, this.templateVariables);
127+
UriTemplate uriTemplate = UriTemplate.of(uri, getTemplateVariables(type));
141128
return uriTemplate.toString();
142129
}
143130

131+
protected TemplateVariables getTemplateVariables(Type type) {
132+
return this.templateVariables;
133+
}
134+
144135
protected void dependencies(ObjectNode parent, DependenciesCapability capability) {
145136
ObjectNode dependencies = nodeFactory.objectNode();
146137
dependencies.put("type", capability.getType().getName());

initializr-web/src/test/java/io/spring/initializr/web/mapper/InitializrMetadataV22JsonMapperTests.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616

1717
package io.spring.initializr.web.mapper;
1818

19-
import java.util.List;
20-
2119
import com.fasterxml.jackson.core.JsonProcessingException;
2220
import com.fasterxml.jackson.databind.JsonNode;
2321
import com.fasterxml.jackson.databind.ObjectMapper;
2422
import com.fasterxml.jackson.databind.node.ObjectNode;
2523
import io.spring.initializr.generator.test.InitializrMetadataTestBuilder;
2624
import io.spring.initializr.metadata.Dependency;
2725
import io.spring.initializr.metadata.InitializrMetadata;
26+
import io.spring.initializr.metadata.Type;
2827
import org.junit.jupiter.api.Test;
2928

3029
import org.springframework.hateoas.TemplateVariable;
30+
import org.springframework.hateoas.TemplateVariables;
3131

3232
import static org.assertj.core.api.Assertions.assertThat;
3333

@@ -79,8 +79,13 @@ void platformVersionUsingSemVerUIsNotChanged() throws JsonProcessingException {
7979

8080
@Test
8181
void shouldAllowCustomization() throws JsonProcessingException {
82-
InitializrMetadataJsonMapper mapper = new InitializrMetadataV22JsonMapper(
83-
List.of(TemplateVariable.requestParameter("testParameter"))) {
82+
InitializrMetadataJsonMapper mapper = new InitializrMetadataV22JsonMapper() {
83+
@Override
84+
protected TemplateVariables getTemplateVariables(Type type) {
85+
TemplateVariables templateVariables = super.getTemplateVariables(type);
86+
return templateVariables.concat(TemplateVariable.requestParameter("testParameter"));
87+
}
88+
8489
@Override
8590
protected void customizeParent(ObjectNode parent, InitializrMetadata metadata) {
8691
parent.put("testField", "testValue");

0 commit comments

Comments
 (0)