Skip to content

Commit

Permalink
Improve template variables customization
Browse files Browse the repository at this point in the history
  • Loading branch information
mhalbritter committed Feb 12, 2025
1 parent 6db9d41 commit bb00ae6
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@

package io.spring.initializr.web.mapper;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

import com.fasterxml.jackson.databind.node.ObjectNode;
Expand Down Expand Up @@ -47,15 +45,6 @@ public class InitializrMetadataV21JsonMapper extends InitializrMetadataV2JsonMap
* Create a new instance.
*/
public InitializrMetadataV21JsonMapper() {
this(Collections.emptyList());
}

/**
* Create a new instance using the additional template variables.
* @param additionalTemplateVariables the additional template variables
*/
public InitializrMetadataV21JsonMapper(Collection<? extends TemplateVariable> additionalTemplateVariables) {
super(additionalTemplateVariables);
this.dependenciesVariables = new TemplateVariables(
new TemplateVariable("bootVersion", TemplateVariable.VariableType.REQUEST_PARAM));
}
Expand Down Expand Up @@ -84,13 +73,17 @@ protected String formatVersionRange(VersionRange versionRange) {
return versionRange.format(Format.V1).toRangeString();
}

private ObjectNode dependenciesLink(String appUrl) {
protected ObjectNode dependenciesLink(String appUrl) {
String uri = (appUrl != null) ? appUrl + "/dependencies" : "/dependencies";
UriTemplate uriTemplate = UriTemplate.of(uri, this.dependenciesVariables);
UriTemplate uriTemplate = UriTemplate.of(uri, getDependenciesVariables());
ObjectNode result = nodeFactory().objectNode();
result.put("href", uriTemplate.toString());
result.put("templated", true);
return result;
}

protected TemplateVariables getDependenciesVariables() {
return this.dependenciesVariables;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,9 @@

package io.spring.initializr.web.mapper;

import java.util.Collection;
import java.util.Collections;

import io.spring.initializr.generator.version.Version;
import io.spring.initializr.generator.version.VersionRange;

import org.springframework.hateoas.TemplateVariable;

/**
* A {@link InitializrMetadataJsonMapper} handling the metadata format for v2.2
* <p>
Expand All @@ -34,21 +29,6 @@
*/
public class InitializrMetadataV22JsonMapper extends InitializrMetadataV21JsonMapper {

/**
* Create a new instance.
*/
public InitializrMetadataV22JsonMapper() {
this(Collections.emptyList());
}

/**
* Create a new instance using the additional template variables.
* @param additionalTemplateVariables the additional template variables
*/
public InitializrMetadataV22JsonMapper(Collection<? extends TemplateVariable> additionalTemplateVariables) {
super(additionalTemplateVariables);
}

@Override
protected String formatVersion(String versionId) {
return versionId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@

package io.spring.initializr.web.mapper;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -64,28 +61,18 @@ public class InitializrMetadataV2JsonMapper implements InitializrMetadataJsonMap
* Create a new instance.
*/
public InitializrMetadataV2JsonMapper() {
this(Collections.emptyList());
}

/**
* Create a new instance using the additional template variables.
* @param additionalTemplateVariables the additional template variables
*/
public InitializrMetadataV2JsonMapper(Collection<? extends TemplateVariable> additionalTemplateVariables) {
List<TemplateVariable> templateVariables = new ArrayList<>();
templateVariables.add(new TemplateVariable("dependencies", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("packaging", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("javaVersion", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("language", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("bootVersion", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("groupId", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("artifactId", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("version", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("name", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("description", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.add(new TemplateVariable("packageName", TemplateVariable.VariableType.REQUEST_PARAM));
templateVariables.addAll(additionalTemplateVariables);
this.templateVariables = new TemplateVariables(templateVariables);
this.templateVariables = new TemplateVariables(
new TemplateVariable("dependencies", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("packaging", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("javaVersion", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("language", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("bootVersion", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("groupId", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("artifactId", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("version", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("name", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("description", TemplateVariable.VariableType.REQUEST_PARAM),
new TemplateVariable("packageName", TemplateVariable.VariableType.REQUEST_PARAM));
}

protected JsonNodeFactory nodeFactory() {
Expand Down Expand Up @@ -134,13 +121,17 @@ protected ObjectNode link(String appUrl, Type type) {
return result;
}

private String generateTemplatedUri(String appUrl, Type type) {
protected String generateTemplatedUri(String appUrl, Type type) {
String uri = (appUrl != null) ? appUrl + type.getAction() : type.getAction();
uri = uri + "?type=" + type.getId();
UriTemplate uriTemplate = UriTemplate.of(uri, this.templateVariables);
UriTemplate uriTemplate = UriTemplate.of(uri, getTemplateVariables(type));
return uriTemplate.toString();
}

protected TemplateVariables getTemplateVariables(Type type) {
return this.templateVariables;
}

protected void dependencies(ObjectNode parent, DependenciesCapability capability) {
ObjectNode dependencies = nodeFactory.objectNode();
dependencies.put("type", capability.getType().getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@

package io.spring.initializr.web.mapper;

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.spring.initializr.generator.test.InitializrMetadataTestBuilder;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.initializr.metadata.Type;
import org.junit.jupiter.api.Test;

import org.springframework.hateoas.TemplateVariable;
import org.springframework.hateoas.TemplateVariables;

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

Expand Down Expand Up @@ -79,8 +79,13 @@ void platformVersionUsingSemVerUIsNotChanged() throws JsonProcessingException {

@Test
void shouldAllowCustomization() throws JsonProcessingException {
InitializrMetadataJsonMapper mapper = new InitializrMetadataV22JsonMapper(
List.of(TemplateVariable.requestParameter("testParameter"))) {
InitializrMetadataJsonMapper mapper = new InitializrMetadataV22JsonMapper() {
@Override
protected TemplateVariables getTemplateVariables(Type type) {
TemplateVariables templateVariables = super.getTemplateVariables(type);
return templateVariables.concat(TemplateVariable.requestParameter("testParameter"));
}

@Override
protected void customizeParent(ObjectNode parent, InitializrMetadata metadata) {
parent.put("testField", "testValue");
Expand Down

0 comments on commit bb00ae6

Please sign in to comment.