/
InitializrMetadataV21JsonMapper.java
76 lines (65 loc) · 2.61 KB
/
InitializrMetadataV21JsonMapper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.web.mapper;
import java.util.List;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.Type;
import org.springframework.hateoas.TemplateVariable;
import org.springframework.hateoas.TemplateVariables;
import org.springframework.hateoas.UriTemplate;
/**
* A {@link InitializrMetadataJsonMapper} handling the metadata format for v2.1
* <p>
* Version 2.1 brings the "versionRange" attribute for a dependency to restrict the Spring
* Boot versions that can be used against it. That version also adds an additional
* `dependencies` endpoint.
*
* @author Stephane Nicoll
*/
public class InitializrMetadataV21JsonMapper extends InitializrMetadataV2JsonMapper {
private final TemplateVariables dependenciesVariables;
public InitializrMetadataV21JsonMapper() {
this.dependenciesVariables = new TemplateVariables(new TemplateVariable(
"bootVersion", TemplateVariable.VariableType.REQUEST_PARAM));
}
@Override
protected ObjectNode links(ObjectNode parent, List<Type> types, String appUrl) {
ObjectNode links = super.links(parent, types, appUrl);
links.set("dependencies", dependenciesLink(appUrl));
parent.set("_links", links);
return links;
}
@Override
protected ObjectNode mapDependency(Dependency dependency) {
ObjectNode content = mapValue(dependency);
if (dependency.getVersionRange() != null) {
content.put("versionRange", dependency.getVersionRange());
}
if (dependency.getLinks() != null && !dependency.getLinks().isEmpty()) {
content.set("_links", LinkMapper.mapLinks(dependency.getLinks()));
}
return content;
}
private ObjectNode dependenciesLink(String appUrl) {
String uri = (appUrl != null ? appUrl + "/dependencies" : "/dependencies");
UriTemplate uriTemplate = new UriTemplate(uri, this.dependenciesVariables);
ObjectNode result = nodeFactory().objectNode();
result.put("href", uriTemplate.toString());
result.put("templated", true);
return result;
}
}