Skip to content

Commit c2980bc

Browse files
Merge pull request #24 from contentstack/next
feat:CS:36088 Reference JSON RTE, Asset as embedded object
2 parents 896f68b + 2c4fefa commit c2980bc

File tree

7 files changed

+1079
-8
lines changed

7 files changed

+1079
-8
lines changed

.talismanrc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@ threshold: medium
22

33
fileignoreconfig:
44

5-
- filename: .dccache
6-
checksum: 140eb49c2bad3edadf62c926625f3bb304e904c38f2a9a5a57e9f6dc7163f61e
5+
- filename: src/test/resources/issue/jsonfile.json
6+
checksum: d67cd6db0795f8c5a5f5edf34a457720191e8894889e9f9bb4b8106c23b40799
7+
8+

pom.xml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.contentstack.sdk</groupId>
77
<artifactId>utils</artifactId>
8-
<version>1.2.1</version>
8+
<version>1.2.2</version>
99
<packaging>jar</packaging>
1010
<name>Contentstack-utils</name>
1111
<description>Java Utils SDK for Contentstack Content Delivery API, Contentstack is a headless CMS
@@ -22,15 +22,16 @@
2222
<maven-source-plugin.version>2.2.1</maven-source-plugin.version>
2323
<maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
2424
<junit.version>4.13.2</junit.version>
25-
<jsoup.version>1.15.4</jsoup.version>
25+
<jsoup.version>1.16.1</jsoup.version>
2626
<json.simple.version>1.1.1</json.simple.version>
2727
<maven-site-plugin.version>3.3</maven-site-plugin.version>
2828
<maven-gpg-plugin.version>1.5</maven-gpg-plugin.version>
2929
<nexus-staging-maven-plugin.version>1.6.7</nexus-staging-maven-plugin.version>
3030
<maven-release-plugin.version>2.5.3</maven-release-plugin.version>
3131
<validation-version>2.0.1.Final</validation-version>
3232
<json-version>20230227</json-version>
33-
<spring-web-version>6.0.4</spring-web-version>
33+
<spring-web-version>6.0.7</spring-web-version>
34+
<org.apache.commons-text>1.10.0</org.apache.commons-text>
3435
</properties>
3536

3637
<developers>
@@ -78,6 +79,13 @@
7879
</organization>
7980

8081
<dependencies>
82+
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
83+
<dependency>
84+
<groupId>org.apache.commons</groupId>
85+
<artifactId>commons-text</artifactId>
86+
<version>${org.apache.commons-text}</version>
87+
</dependency>
88+
8189
<dependency>
8290
<groupId>junit</groupId>
8391
<artifactId>junit</artifactId>

src/main/java/com/contentstack/utils/AutomateCommon.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
public class AutomateCommon {
2323

24+
2425
private static final String ASSET = "asset";
2526

2627
private AutomateCommon() {
@@ -175,6 +176,10 @@ private static String extractKeys(@NotNull JSONObject jsonNode, Option renderObj
175176
if (filteredContent.isPresent()) {
176177
JSONObject contentToPass = filteredContent.get();
177178
return getStringOption(renderObject, metadata, contentToPass);
179+
} else {
180+
if (attrType.equalsIgnoreCase(ASSET)) {
181+
return renderObject.renderNode("img", jsonNode, nodeJsonArray -> doRawProcessing(nodeJsonArray, renderObject, embedItem));
182+
}
178183
}
179184

180185
} else {

src/main/java/com/contentstack/utils/render/DefaultOption.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.contentstack.utils.interfaces.NodeCallback;
55
import com.contentstack.utils.interfaces.Option;
66
import com.contentstack.utils.node.MarkType;
7+
import org.apache.commons.text.StringEscapeUtils;
78
import org.json.JSONObject;
89

910

@@ -58,18 +59,27 @@ public String renderMark(MarkType markType, String text) {
5859
}
5960
}
6061

62+
private String escapeInjectHtml(JSONObject nodeObj, String nodeType) {
63+
String injectedHtml = getNodeStr(nodeObj, nodeType);
64+
return StringEscapeUtils.escapeHtml4(injectedHtml);
65+
}
66+
6167
@Override
6268
public String renderNode(String nodeType, JSONObject nodeObject, NodeCallback callback) {
6369
String children = callback.renderChildren(nodeObject.optJSONArray("children"));
6470
switch (nodeType) {
6571
case "p":
6672
return "<p>" + children + "</p>";
6773
case "a":
68-
return "<a href=\"" + getNodeStr(nodeObject, "href") + "\">" + children + "</a>";
74+
return "<a href=\"" + escapeInjectHtml(nodeObject, "href") + "\">" + children + "</a>";
6975
case "img":
70-
return "<img src=\"" + getNodeStr(nodeObject, "src") + "\" />" + children;
76+
String assetLink = getNodeStr(nodeObject, "asset-link");
77+
if (!assetLink.isEmpty()) {
78+
return "<img src=\"" + escapeInjectHtml(nodeObject, "asset-link") + "\" />" + children;
79+
}
80+
return "<img src=\"" + escapeInjectHtml(nodeObject, "src") + "\" />" + children;
7181
case "embed":
72-
return "<iframe src=\"" + getNodeStr(nodeObject, "src") + "\"" + children + "</iframe>";
82+
return "<iframe src=\"" + escapeInjectHtml(nodeObject, "src") + "\"" + children + "</iframe>";
7383
case "h1":
7484
return "<h1>" + children + "</h1>";
7585
case "h2":
@@ -124,6 +134,7 @@ private String getNodeStr(JSONObject nodeObject, String key) {
124134
return herf;
125135
}
126136

137+
127138
/**
128139
* Returns Title From The Embedded Object of type entry
129140
*
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.contentstack.utils;
2+
3+
import com.contentstack.utils.render.DefaultOption;
4+
import org.json.JSONObject;
5+
import org.junit.Assert;
6+
import org.junit.BeforeClass;
7+
import org.junit.Test;
8+
9+
import java.io.IOException;
10+
11+
public class AssetLinkTest {
12+
13+
14+
private static JSONObject assetLink = null;
15+
16+
17+
@BeforeClass
18+
public static void startUtilTests() throws IOException {
19+
final String ASSERT_LINK = "src/test/resources/issue/jsonfile.json";
20+
assetLink = new ReadResource().readJson(ASSERT_LINK);
21+
}
22+
23+
@Test
24+
public void testRenderFunction() {
25+
String[] keys = new String[1];
26+
keys[0] = "assetlink";
27+
Utils.jsonToHTML(assetLink, keys, new DefaultOption());
28+
System.out.println(assetLink);
29+
Assert.assertEquals("<img src=\"https://image.url/11.jpg\" />", assetLink.opt("assetlink").toString());
30+
}
31+
}

0 commit comments

Comments
 (0)