diff --git a/src/main/java/com/contentstack/sdk/Config.java b/src/main/java/com/contentstack/sdk/Config.java index 54011b9..d9fee7e 100644 --- a/src/main/java/com/contentstack/sdk/Config.java +++ b/src/main/java/com/contentstack/sdk/Config.java @@ -31,6 +31,9 @@ public class Config { protected Proxy proxy = null; protected String[] earlyAccess = null; protected ConnectionPool connectionPool = new ConnectionPool(); + public String releaseId; + public String previewTimestamp; + protected List plugins = null; diff --git a/src/main/java/com/contentstack/sdk/Stack.java b/src/main/java/com/contentstack/sdk/Stack.java index 20bca28..62a933a 100644 --- a/src/main/java/com/contentstack/sdk/Stack.java +++ b/src/main/java/com/contentstack/sdk/Stack.java @@ -142,6 +142,17 @@ public Stack livePreviewQuery(Map query) throws IOException { config.livePreviewEntryUid = query.get(ENTRY_UID); config.livePreviewContentType = query.get(CONTENT_TYPE_UID); + if(query.get("release_id") != null){ + config.releaseId = query.get("release_id"); + }else{ + config.releaseId = null; + } + if(query.get("preview_timestamp") != null){ + config.previewTimestamp = query.get("preview_timestamp"); + }else{ + config.previewTimestamp = null; + } + String livePreviewUrl = this.livePreviewEndpoint.concat(config.livePreviewContentType).concat("/entries/" + config.livePreviewEntryUid); if (livePreviewUrl.contains("/null/")) { throw new IllegalStateException("Malformed Query Url"); diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java index b5bec65..e81381c 100644 --- a/src/test/java/com/contentstack/sdk/TestLivePreview.java +++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -223,4 +224,45 @@ void testLivePreviewDisabled() throws IllegalAccessException, IOException { "Expected exception message does not match"); } + @Test + void testTimelinePreview() throws IllegalAccessException, IOException { + Config config = new Config() + .enableLivePreview(true) + .setLivePreviewHost("rest-preview.contentstack.com") + .setPreviewToken("preview_token"); + + Stack stack = Contentstack.stack("stackApiKey", "deliveryToken", "env1", config); + + HashMap hashMap = new HashMap<>(); + hashMap.put("live_preview", "hash167673"); + hashMap.put("content_type_uid", "page"); + hashMap.put("entry_uid", "entryUid"); + hashMap.put("release_id", "12345"); + hashMap.put("preview_timestamp", "2025-09-25 17:45:30.005"); + + + stack.livePreviewQuery(hashMap); + Entry entry = stack.contentType("page").entry("entry_uid"); + entry.fetch(null); + Assertions.assertNotNull(entry); + } + + @Test + void testLivePreviewQueryWithoutReleaseId() throws Exception { + Config config = new Config().enableLivePreview(true) + .setLivePreviewHost("rest-preview.contentstack.com") + .setPreviewToken("previewToken"); + Stack stack = Contentstack.stack("api_key", "access_token", "env", config); + + Map queryParams = new HashMap<>(); + queryParams.put("content_type_uid", "blog"); + queryParams.put("entry_uid", "entry_123"); + queryParams.put("preview_timestamp", "1710800000"); + + stack.livePreviewQuery(queryParams); + + Assertions.assertNull(config.releaseId); + Assertions.assertEquals("1710800000", config.previewTimestamp); + } + }