Skip to content

Commit 065959d

Browse files
committed
feat: Enhance metadata generation with HATEOAS links and simplify structure
1 parent 4ef227f commit 065959d

File tree

1 file changed

+41
-8
lines changed

1 file changed

+41
-8
lines changed

build/main/java/org/greencodeinitiative/tools/exporter/infra/MetadataWriter.java

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.stream.Collectors;
2424
import java.util.stream.Stream;
2525

26+
import static jakarta.json.Json.createArrayBuilder;
27+
import static jakarta.json.Json.createObjectBuilder;
2628
import static java.lang.System.Logger.Level.DEBUG;
2729

2830
public class MetadataWriter implements Runnable {
@@ -53,18 +55,49 @@ public void run() {
5355
var rulesMap = new TreeMap<String, JsonObjectBuilder>();
5456

5557
getResourcesToCopy().forEach(rule -> {
56-
var rulesByLanguage = rulesMap.computeIfAbsent(rule.ruleKey(), k -> Json.createObjectBuilder());
58+
var rulesByLanguage = rulesMap.computeIfAbsent(rule.ruleKey(), k -> createObjectBuilder());
5759
var resultMetadata = mergeOrCopyJsonMetadata(rule.metadata(), rule.specificMetadata(), rule.getMetadataTargetPath(targetDir));
5860

5961
var htmlDescriptionRelativePath = this.indexFilepath.getParent()
6062
.relativize(rule.getHtmlDescriptionTargetPath(targetDir))
6163
.toString();
62-
var resultMetadataBuilder = Json.createObjectBuilder(resultMetadata);
64+
65+
var metadataRelativePath = this.indexFilepath.getParent()
66+
.relativize(rule.getMetadataTargetPath(targetDir))
67+
.toString();
68+
69+
var descriptionLinkJsonObject = createObjectBuilder();
70+
descriptionLinkJsonObject.add("rel", "description");
71+
descriptionLinkJsonObject.add("title", resultMetadata.get("title"));
72+
descriptionLinkJsonObject.add("href", htmlDescriptionRelativePath);
73+
descriptionLinkJsonObject.add("hreflang", "en");
74+
75+
var metadataLinkJsonObject = createObjectBuilder();
76+
metadataLinkJsonObject.add("rel", "metadata");
77+
metadataLinkJsonObject.add("href", metadataRelativePath);
78+
79+
var linksJsonArray = createArrayBuilder();
80+
linksJsonArray.add(descriptionLinkJsonObject);
81+
linksJsonArray.add(metadataLinkJsonObject);
82+
83+
var resultMetadataBuilder = createObjectBuilder();
6384
resultMetadataBuilder.add("key", rule.ruleKey());
6485
resultMetadataBuilder.add("language", rule.language());
65-
resultMetadataBuilder.add("severity", resultMetadata.getString("defaultSeverity").toUpperCase(Locale.ENGLISH));
66-
resultMetadataBuilder.add("htmlDescription", htmlDescriptionRelativePath);
67-
resultMetadataBuilder.add("terms", extractTermsFromHtmlFile(rule.htmlDescription()));
86+
resultMetadataBuilder.add("links", linksJsonArray);
87+
resultMetadataBuilder.add(
88+
"terms",
89+
createObjectBuilder()
90+
.add("en", extractTermsFromHtmlFile(rule.htmlDescription()))
91+
);
92+
93+
List
94+
.of(
95+
"type",
96+
"status",
97+
"tags",
98+
"defaultSeverity"
99+
)
100+
.forEach(key -> resultMetadataBuilder.add(key, resultMetadata.get(key)));
68101

69102
rulesByLanguage.add(rule.language(), resultMetadataBuilder);
70103
copyFile(rule.htmlDescription(), rule.getHtmlDescriptionTargetPath(targetDir));
@@ -102,11 +135,11 @@ private void writeIndexFile(TreeMap<String, JsonObjectBuilder> rulesMap) {
102135
if (indexFilepath == null) {
103136
return;
104137
}
105-
var rules = Json.createObjectBuilder();
138+
var rules = createObjectBuilder();
106139
rulesMap.forEach(rules::add);
107-
var result = Json.createObjectBuilder();
140+
var result = createObjectBuilder();
108141

109-
var specification = Json.createObjectBuilder();
142+
var specification = createObjectBuilder();
110143
this.specificationInfo.forEach(specification::add);
111144
result.add("specification", specification);
112145

0 commit comments

Comments
 (0)