Skip to content

Commit 18c0cd4

Browse files
authored
Merge pull request #119 from contentstack/next
DX-566| Enhancement: Update asset url
2 parents 0f0807f + 11ecb8c commit 18c0cd4

File tree

4 files changed

+76
-1
lines changed

4 files changed

+76
-1
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# CHANGELOG
22

3+
## v1.14.1
4+
5+
### Date: 17-May-2024
6+
7+
-Enhancement: Update Asset url method added
8+
39
## v1.14.0
410

511
### Date: 13-May-2024

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<modelVersion>4.0.0</modelVersion>
66
<groupId>com.contentstack.sdk</groupId>
77
<artifactId>java</artifactId>
8-
<version>1.14.0</version>
8+
<version>1.14.1</version>
99
<packaging>jar</packaging>
1010
<name>contentstack-java</name>
1111
<description>Java SDK for Contentstack Content Delivery API</description>

src/main/java/com/contentstack/sdk/Stack.java

+53
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import okhttp3.OkHttpClient;
55
import okhttp3.ResponseBody;
66
import org.jetbrains.annotations.NotNull;
7+
import org.json.JSONArray;
78
import org.json.JSONObject;
89
import retrofit2.Response;
910
import retrofit2.Retrofit;
@@ -552,5 +553,57 @@ public enum PublishType {
552553
ENTRY_PUBLISHED,
553554
ENTRY_UNPUBLISHED
554555
}
556+
public void updateAssetUrl(Entry entry) {
557+
JSONObject entryJson = entry.toJSON();
558+
// Check if entry consists of _embedded_items object
559+
if (!entryJson.has("_embedded_items")) {
560+
throw new IllegalArgumentException("_embedded_items not present in entry. Call includeEmbeddedItems() before fetching entry.");
561+
}
562+
// Get _embedded_items as a JSONObject
563+
JSONObject embeddedItems = entryJson.getJSONObject("_embedded_items");
564+
Iterator<String> keys = embeddedItems.keys();
565+
Map<String, String> assetUrls = new HashMap<>();
566+
while (keys.hasNext()) {
567+
String key = keys.next();
568+
Object embeddedItem = embeddedItems.get(key);
569+
if (embeddedItem instanceof JSONArray) {
570+
JSONArray itemList = (JSONArray) embeddedItem;
571+
for (int i = 0; i < itemList.length(); i++) {
572+
JSONObject item = itemList.getJSONObject(i);
573+
if ("sys_assets".equals(item.getString("_content_type_uid")) && item.has("filename")) {
574+
String url = item.getString("url");
575+
String uid = item.getString("uid");
576+
assetUrls.put(uid,url);
577+
}
578+
}
579+
}
580+
}
581+
updateChildObjects(entryJson, assetUrls);
582+
}
583+
private void updateChildObjects(JSONObject entryJson, Map<String, String> assetUrls) {
584+
Iterator<String> mainKeys = entryJson.keys();
585+
while (mainKeys.hasNext()) {
586+
String key = mainKeys.next();
587+
Object childObj = entryJson.get(key);
588+
if(childObj instanceof JSONObject)
589+
{ JSONObject mainKey = (JSONObject) childObj;
590+
if (mainKey.has("children")) {
591+
JSONArray mainList = mainKey.getJSONArray("children");
592+
for (int i = 0; i < mainList.length(); i++) {
593+
JSONObject list = mainList.getJSONObject(i);
594+
if (list.has("attrs") ) {
595+
JSONObject childList = list.getJSONObject("attrs");
596+
if(childList.has("asset-uid") && childList.has("asset-link")){
597+
String assetUid = childList.getString("asset-uid");
598+
if (assetUrls.containsKey(assetUid)) {
599+
childList.put("asset-link", assetUrls.get(assetUid));
600+
}
601+
}
602+
}
603+
}
604+
}
605+
}
606+
}
607+
}
555608

556609
}

src/test/java/com/contentstack/sdk/TestStack.java

+16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class TestStack {
1818
Stack stack = Credentials.getStack();
1919
protected String paginationToken;
2020
private final Logger logger = Logger.getLogger(TestStack.class.getName());
21+
private String entryUid = Credentials.ENTRY_UID;
22+
private String CONTENT_TYPE = Credentials.CONTENT_TYPE;
2123

2224

2325
@Test
@@ -384,5 +386,19 @@ public void onCompletion(SyncStack response, Error error) {
384386
}
385387
});
386388
}
389+
@Test
390+
@Disabled
391+
@Order(43)
392+
void testAsseturlupdate() throws IllegalAccessException {
393+
Entry entry = stack.contentType(CONTENT_TYPE).entry(entryUid).includeEmbeddedItems();
394+
entry.fetch(new EntryResultCallBack() {
395+
@Override
396+
public void onCompletion(ResponseType responseType, Error error) {
397+
stack.updateAssetUrl(entry);
398+
Assertions.assertEquals(entryUid, entry.getUid());
399+
Assertions.assertTrue(entry.params.has("include_embedded_items[]"));
400+
}
401+
});
402+
}
387403

388404
}

0 commit comments

Comments
 (0)