|
23 | 23 | import java.util.stream.Collectors; |
24 | 24 | import java.util.stream.Stream; |
25 | 25 |
|
| 26 | +import static jakarta.json.Json.createArrayBuilder; |
| 27 | +import static jakarta.json.Json.createObjectBuilder; |
26 | 28 | import static java.lang.System.Logger.Level.DEBUG; |
27 | 29 |
|
28 | 30 | public class MetadataWriter implements Runnable { |
@@ -53,18 +55,49 @@ public void run() { |
53 | 55 | var rulesMap = new TreeMap<String, JsonObjectBuilder>(); |
54 | 56 |
|
55 | 57 | getResourcesToCopy().forEach(rule -> { |
56 | | - var rulesByLanguage = rulesMap.computeIfAbsent(rule.ruleKey(), k -> Json.createObjectBuilder()); |
| 58 | + var rulesByLanguage = rulesMap.computeIfAbsent(rule.ruleKey(), k -> createObjectBuilder()); |
57 | 59 | var resultMetadata = mergeOrCopyJsonMetadata(rule.metadata(), rule.specificMetadata(), rule.getMetadataTargetPath(targetDir)); |
58 | 60 |
|
59 | 61 | var htmlDescriptionRelativePath = this.indexFilepath.getParent() |
60 | 62 | .relativize(rule.getHtmlDescriptionTargetPath(targetDir)) |
61 | 63 | .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(); |
63 | 84 | resultMetadataBuilder.add("key", rule.ruleKey()); |
64 | 85 | 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))); |
68 | 101 |
|
69 | 102 | rulesByLanguage.add(rule.language(), resultMetadataBuilder); |
70 | 103 | copyFile(rule.htmlDescription(), rule.getHtmlDescriptionTargetPath(targetDir)); |
@@ -102,11 +135,11 @@ private void writeIndexFile(TreeMap<String, JsonObjectBuilder> rulesMap) { |
102 | 135 | if (indexFilepath == null) { |
103 | 136 | return; |
104 | 137 | } |
105 | | - var rules = Json.createObjectBuilder(); |
| 138 | + var rules = createObjectBuilder(); |
106 | 139 | rulesMap.forEach(rules::add); |
107 | | - var result = Json.createObjectBuilder(); |
| 140 | + var result = createObjectBuilder(); |
108 | 141 |
|
109 | | - var specification = Json.createObjectBuilder(); |
| 142 | + var specification = createObjectBuilder(); |
110 | 143 | this.specificationInfo.forEach(specification::add); |
111 | 144 | result.add("specification", specification); |
112 | 145 |
|
|
0 commit comments