From 564ad8f70d0292f6664f5c27dbe0983f026e946f Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 3 Sep 2024 14:46:08 +0530 Subject: [PATCH 01/25] feat : Live preview 2.0 implementation --- .../java/com/contentstack/sdk/Config.java | 12 ++++++++ src/main/java/com/contentstack/sdk/Stack.java | 28 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/contentstack/sdk/Config.java b/src/main/java/com/contentstack/sdk/Config.java index e4567afc..54011b92 100644 --- a/src/main/java/com/contentstack/sdk/Config.java +++ b/src/main/java/com/contentstack/sdk/Config.java @@ -26,6 +26,7 @@ public class Config { protected JSONObject livePreviewEntry = null; protected ContentstackRegion region = ContentstackRegion.US; protected String managementToken; + protected String previewToken; protected String branch; protected Proxy proxy = null; protected String[] earlyAccess = null; @@ -181,6 +182,17 @@ protected Config setLivePreviewEntry(@NotNull JSONObject livePreviewEntry) { return this; } + /** + * Sets preview token. + * + * @param previewToken the preview token + * @return the preview token + */ + public Config setPreviewToken(@NotNull String previewToken){ + this.previewToken = previewToken; + return this; + } + /** * Sets management token. * diff --git a/src/main/java/com/contentstack/sdk/Stack.java b/src/main/java/com/contentstack/sdk/Stack.java index 2f27565d..20bca289 100644 --- a/src/main/java/com/contentstack/sdk/Stack.java +++ b/src/main/java/com/contentstack/sdk/Stack.java @@ -6,6 +6,9 @@ import org.jetbrains.annotations.NotNull; import org.json.JSONArray; import org.json.JSONObject; + +import com.contentstack.sdk.Constants.REQUEST_CONTROLLER; + import retrofit2.Response; import retrofit2.Retrofit; @@ -98,6 +101,15 @@ private void client(String endpoint) { private void includeLivePreview() { if (config.enableLivePreview) { + String urlLivePreview = config.livePreviewHost; + if(config.region != null && !config.region.name().isEmpty()){ + if(config.region.name() == "US" ){ + config.livePreviewHost = urlLivePreview; + }else{ + String regionPrefix = config.region.name().toLowerCase(); + config.livePreviewHost = regionPrefix + "-" + urlLivePreview; + } + } this.livePreviewEndpoint = "https://".concat(config.livePreviewHost).concat("/v3/content_types/"); } } @@ -125,6 +137,7 @@ private void includeLivePreview() { * @throws IOException IO Exception */ public Stack livePreviewQuery(Map query) throws IOException { + if(config.enableLivePreview){ config.livePreviewHash = query.get(LIVE_PREVIEW); config.livePreviewEntryUid = query.get(ENTRY_UID); config.livePreviewContentType = query.get(CONTENT_TYPE_UID); @@ -137,7 +150,17 @@ public Stack livePreviewQuery(Map query) throws IOException { try { LinkedHashMap liveHeader = new LinkedHashMap<>(); liveHeader.put("api_key", this.headers.get("api_key")); - liveHeader.put("authorization", config.managementToken); + + if(config.livePreviewHost.equals("rest-preview.contentstack.com")) + { + if(config.previewToken != null) { + liveHeader.put("preview_token", config.previewToken); + } else{ + throw new IllegalAccessError("Provide the Preview Token for the host rest-preview.contentstack.com"); + } + } else { + liveHeader.put("authorization", config.managementToken); + } response = this.service.getRequest(livePreviewUrl, liveHeader).execute(); } catch (IOException e) { throw new IllegalStateException("IO Exception while executing the Live Preview url"); @@ -150,6 +173,9 @@ public Stack livePreviewQuery(Map query) throws IOException { config.setLivePreviewEntry(liveResponse.getJSONObject("entry")); } } + } else { + throw new IllegalStateException("Live Preview is not enabled in Config"); + } return this; } From eaeb2378783f6356baa317c468d61e2ae9cca025 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 3 Sep 2024 14:51:49 +0530 Subject: [PATCH 02/25] test: testcases for live preview --- .../com/contentstack/sdk/TestLivePreview.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java index 596d8d59..6c6d75c0 100644 --- a/src/test/java/com/contentstack/sdk/TestLivePreview.java +++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java @@ -5,6 +5,10 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import java.io.IOException; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -26,6 +30,7 @@ public static void setUp() { config = new Config(); } + /** * Test config test. */ @@ -110,8 +115,10 @@ void testExceptionWhenAllRequiredParamsNotProvided() { .setLivePreviewHost("live-preview.contentstack.io"); try { Contentstack.stack("liveAPIKey", "liveAccessToken", "liveEnv", livePreviewEnablerConfig); + System.out.println("no it works"); } catch (Exception e) { Assertions.assertEquals("managementToken is required", e.getLocalizedMessage()); + System.out.println(e.getLocalizedMessage()); logger.severe(e.getLocalizedMessage()); } } @@ -158,5 +165,64 @@ void testCompleteLivePreviewInQuery() throws Exception { Assertions.assertNotNull(entry); } + @Test + void testCompleteLivePreviewWithPreviewToken() throws IOException, IllegalAccessException { + Config livePreviewConfig = new Config() + .enableLivePreview(true) + .setLivePreviewHost("rest-preview.contentstack.com") + .setPreviewToken("preview_token"); + + Stack stack = Contentstack.stack("stackApiKey", "deliveryToken", "env1", livePreviewConfig); + + HashMap hashMap = new HashMap<>(); + hashMap.put("live_preview", "hash167673"); + hashMap.put("content_type_uid", "page"); + + stack.livePreviewQuery(hashMap); + Entry entry = stack.contentType("page").entry("entry_uid"); + entry.fetch(null); + Assertions.assertNotNull(entry); + + } + + @Test() + void testLivePreviewWithoutPreviewToken() throws Exception { + Config livePreviewEnablerConfig = new Config().enableLivePreview(true).setLivePreviewHost("rest-preview.contentstack.com") + .setManagementToken("fake@token"); + Stack stack = Contentstack.stack("stackApiKey", "deliveryToken", "env1", livePreviewEnablerConfig); + HashMap hashMap = new HashMap<>(); + hashMap.put("live_preview", "hash167673"); + hashMap.put("content_type_uid", "page"); + + IllegalAccessError thrown = Assertions.assertThrows(IllegalAccessError.class, () -> { + stack.livePreviewQuery(hashMap); + }, "Expected livePreviewQuery to throw IllegalAccessError"); + + Assertions.assertTrue(thrown.getMessage().contains("Provide the Preview Token for the host rest-preview.contentstack.com"), + "Exception message should mention that Preview Token is required"); + + logger.severe(thrown.getMessage()); + } + + @Test + void testLivePreviewDisabled() throws IllegalAccessException, IOException { + Config config = new Config() + .enableLivePreview(false) + .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"); + + Exception exception = assertThrows(IllegalStateException.class, () -> { + stack.livePreviewQuery(hashMap); + }); + + // Optionally, you can check the message of the exception + assertEquals("Live Preview is not enabled in Config", exception.getMessage(), + "Expected exception message does not match"); + } } From cbe7a175c22e13db50b2f7bb145aec2f3bea99b8 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 3 Sep 2024 14:52:13 +0530 Subject: [PATCH 03/25] chore: updated testcases assertions --- .../java/com/contentstack/sdk/TestAsset.java | 16 ++++++++-------- .../com/contentstack/sdk/TestAssetLibrary.java | 8 ++++---- .../java/com/contentstack/sdk/TestEntry.java | 2 +- .../java/com/contentstack/sdk/TestStack.java | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/test/java/com/contentstack/sdk/TestAsset.java b/src/test/java/com/contentstack/sdk/TestAsset.java index 259efe83..d344d9f7 100644 --- a/src/test/java/com/contentstack/sdk/TestAsset.java +++ b/src/test/java/com/contentstack/sdk/TestAsset.java @@ -38,10 +38,10 @@ public void onCompletion(ResponseType responseType, List assets, Error er Asset model = assets.get(0); assetUid = model.getAssetUid(); Assertions.assertTrue(model.getAssetUid().startsWith("blt")); - Assertions.assertEquals("image/jpeg", model.getFileType()); - Assertions.assertEquals("1775299", model.getFileSize()); - Assertions.assertEquals("phoenix2.jpg", model.getFileName()); - Assertions.assertTrue(model.getUrl().endsWith("phoenix2.jpg")); + Assertions.assertEquals("image/png", model.getFileType()); + Assertions.assertEquals("13006", model.getFileSize()); + Assertions.assertEquals("iot-icon.png", model.getFileName()); + Assertions.assertTrue(model.getUrl().endsWith("iot-icon.png")); Assertions.assertTrue(model.toJSON().has("created_at")); Assertions.assertTrue(model.getCreatedBy().startsWith("blt")); Assertions.assertEquals("gregory", model.getUpdateAt().getCalendarType()); @@ -60,10 +60,10 @@ void testNewAssetZOnlyForOrderByUid() { @Override public void onCompletion(ResponseType responseType, Error error) { Assertions.assertTrue(asset.getAssetUid().startsWith("blt")); - Assertions.assertEquals("image/jpeg", asset.getFileType()); - Assertions.assertEquals("1775299", asset.getFileSize()); - Assertions.assertEquals("phoenix2.jpg", asset.getFileName()); - Assertions.assertTrue(asset.getUrl().endsWith("phoenix2.jpg")); + Assertions.assertEquals("image/png", asset.getFileType()); + Assertions.assertEquals("13006", asset.getFileSize()); + Assertions.assertEquals("iot-icon.png", asset.getFileName()); + Assertions.assertTrue(asset.getUrl().endsWith("iot-icon.png")); Assertions.assertTrue(asset.toJSON().has("created_at")); Assertions.assertTrue(asset.getCreatedBy().startsWith("blt")); Assertions.assertEquals("gregory", asset.getUpdateAt().getCalendarType()); diff --git a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java index 48607e83..1238e981 100644 --- a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java +++ b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java @@ -24,10 +24,10 @@ void testNewAssetLibrary() { public void onCompletion(ResponseType responseType, List assets, Error error) { Asset model = assets.get(0); Assertions.assertTrue(model.getAssetUid().startsWith("blt")); - assertEquals("image/jpeg", model.getFileType()); - assertEquals("1775299", model.getFileSize()); - assertEquals("phoenix2.jpg", model.getFileName()); - Assertions.assertTrue(model.getUrl().endsWith("phoenix2.jpg")); + assertEquals("image/png", model.getFileType()); + assertEquals("13006", model.getFileSize()); + assertEquals("iot-icon.png", model.getFileName()); + Assertions.assertTrue(model.getUrl().endsWith("iot-icon.png")); Assertions.assertTrue(model.toJSON().has("created_at")); Assertions.assertTrue(model.getCreatedBy().startsWith("blt")); assertEquals("gregory", model.getUpdateAt().getCalendarType()); diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java index d0fb1089..4595b3ad 100644 --- a/src/test/java/com/contentstack/sdk/TestEntry.java +++ b/src/test/java/com/contentstack/sdk/TestEntry.java @@ -66,7 +66,7 @@ public void onCompletion(ResponseType responseType, Error error) { @Test @Order(4) void entryCalling() { - Assertions.assertEquals(6, entry.headers.size()); + Assertions.assertEquals(7, entry.headers.size()); logger.info("passed..."); } diff --git a/src/test/java/com/contentstack/sdk/TestStack.java b/src/test/java/com/contentstack/sdk/TestStack.java index ccf89b55..edde1475 100644 --- a/src/test/java/com/contentstack/sdk/TestStack.java +++ b/src/test/java/com/contentstack/sdk/TestStack.java @@ -304,7 +304,7 @@ void testGetAllContentTypes() { @Override public void onCompletion(ContentTypesModel contentTypesModel, Error error) { assertTrue(contentTypesModel.getResponse() instanceof JSONArray); - assertEquals(5, ((JSONArray) contentTypesModel.getResponse()).length()); + assertEquals(8, ((JSONArray) contentTypesModel.getResponse()).length()); } }); } From 2f8ed21ee70f515f244c34fd906c94929cdd04cb Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 3 Sep 2024 15:07:06 +0530 Subject: [PATCH 04/25] chore: version bump --- CHANGELOG.md | 6 ++++++ pom.xml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index deb90119..091dce2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## v1.15.0 + +### Date: 04-Sep-2024 + +- Live Preview 2.0 support added + ## v1.14.2 ### Date: 15-July-2024 diff --git a/pom.xml b/pom.xml index b3cb719c..62b53ce2 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.contentstack.sdk java - 1.14.2 + 1.15.0 jar contentstack-java Java SDK for Contentstack Content Delivery API From 22bdaad68269f22e7b2da0d2f3b2f19a8429bc7c Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Wed, 4 Sep 2024 11:06:02 +0530 Subject: [PATCH 05/25] chore: removed print statements --- src/test/java/com/contentstack/sdk/TestLivePreview.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java index 6c6d75c0..778547ba 100644 --- a/src/test/java/com/contentstack/sdk/TestLivePreview.java +++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java @@ -115,7 +115,6 @@ void testExceptionWhenAllRequiredParamsNotProvided() { .setLivePreviewHost("live-preview.contentstack.io"); try { Contentstack.stack("liveAPIKey", "liveAccessToken", "liveEnv", livePreviewEnablerConfig); - System.out.println("no it works"); } catch (Exception e) { Assertions.assertEquals("managementToken is required", e.getLocalizedMessage()); System.out.println(e.getLocalizedMessage()); From e6ba3595334a1920f914be589a8ad958b3207d03 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Wed, 4 Sep 2024 11:10:13 +0530 Subject: [PATCH 06/25] chore: removed print statements --- src/test/java/com/contentstack/sdk/TestLivePreview.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java index 778547ba..b5bec654 100644 --- a/src/test/java/com/contentstack/sdk/TestLivePreview.java +++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java @@ -117,7 +117,6 @@ void testExceptionWhenAllRequiredParamsNotProvided() { Contentstack.stack("liveAPIKey", "liveAccessToken", "liveEnv", livePreviewEnablerConfig); } catch (Exception e) { Assertions.assertEquals("managementToken is required", e.getLocalizedMessage()); - System.out.println(e.getLocalizedMessage()); logger.severe(e.getLocalizedMessage()); } } From e5543004978e0422395c9ddba3e1541b636fa243 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 25 Jun 2024 12:57:43 +0530 Subject: [PATCH 07/25] feat : variants implementation --- src/main/java/com/contentstack/sdk/Entry.java | 35 ++++++++++++++ .../java/com/contentstack/sdk/TestEntry.java | 46 +++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/src/main/java/com/contentstack/sdk/Entry.java b/src/main/java/com/contentstack/sdk/Entry.java index bb5faf3b..6a5b1562 100644 --- a/src/main/java/com/contentstack/sdk/Entry.java +++ b/src/main/java/com/contentstack/sdk/Entry.java @@ -1099,4 +1099,39 @@ public Entry includeMetadata() { params.put("include_metadata", true); return this; } + + /** + * @method variants + * @memberof Entry + * @description The variant header will be added to client + * @returns {Entry} + * @example + * import contentstack from '@contentstack/delivery-sdk' + * + * Stack stack = contentstack.Stack("apiKey", "deliveryToken", "environment"); + * Entry entry = stack.contentType("user").entry("entry_uid").variant("variant_uid").fetch(); + */ + public Entry variants(@NotNull String variants){ + if (variants != null && variants.length() > 0) { + this.headers.put("x-cs-variant-uid", variants.trim()); + } + return this; + + } + public Entry variants(@NotNull String[] variants){ + if (variants != null && variants.length > 0) { + List variantList = new ArrayList<>(); + for (String variant : variants) { + if(variant != null && !variant.trim().isEmpty()) + variantList.add(variant.trim()); + } + if(!variantList.isEmpty()){ + this.headers.put("x-cs-variant-uid", String.join(", ", variantList)); + } + } + return this; + } + public LinkedHashMap getHeaders() { + return headers; +} } diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java index 4595b3ad..a4a9c455 100644 --- a/src/test/java/com/contentstack/sdk/TestEntry.java +++ b/src/test/java/com/contentstack/sdk/TestEntry.java @@ -7,6 +7,8 @@ import java.util.GregorianCalendar; import java.util.logging.Logger; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -62,6 +64,50 @@ public void onCompletion(ResponseType responseType, Error error) { }); logger.info("passed.."); } + @Test + void VariantsTestSingleUid(){ + entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(" cs672c33271558d8b0 "); + entry.fetch(new EntryResultCallBack() { + @Override + public void onCompletion(ResponseType responseType, Error error) { + assertEquals("cs672c33271558d8b0", entry.getHeaders().get("x-cs-variant-uid")); + System.out.println(entry.toJSON()); + } + }); + } + @Test + void VariantsTestArray(){ + entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{" cs672c33271558d8b0"," cs321fbc07ec71861b"," cs321fbc07ec71861b "}); + entry.fetch(new EntryResultCallBack() { + @Override + public void onCompletion(ResponseType responseType, Error error) { + System.out.println(entry.toJSON()); + } + }); + } + + @Test + void VariantsTestArrayWithMixedElements() { + entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{"", " cs672c33271558d8b0 ", null, " "}); + entry.fetch(new EntryResultCallBack() { + @Override + public void onCompletion(ResponseType responseType, Error error) { + System.out.println(entry.toJSON()); + } + }); + } + + @Test + void VariantsTestNullString() { + entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants((String) null); + entry.fetch(new EntryResultCallBack() { + @Override + public void onCompletion(ResponseType responseType, Error error) { + assertNull(entry.getHeaders().get("x-cs-variant-uid")); + System.out.println(entry.toJSON()); + } + }); + } @Test @Order(4) From 926a8afaad360fe10f60e6c0cdc7e4571575d18c Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Thu, 27 Jun 2024 12:51:00 +0530 Subject: [PATCH 08/25] Chore : indentation and dummy ids added --- src/main/java/com/contentstack/sdk/Entry.java | 12 ++++++----- .../com/contentstack/sdk/Credentials.java | 12 +++++++++++ .../java/com/contentstack/sdk/TestEntry.java | 21 ++++++------------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/contentstack/sdk/Entry.java b/src/main/java/com/contentstack/sdk/Entry.java index 6a5b1562..ee776d1b 100644 --- a/src/main/java/com/contentstack/sdk/Entry.java +++ b/src/main/java/com/contentstack/sdk/Entry.java @@ -1111,14 +1111,15 @@ public Entry includeMetadata() { * Stack stack = contentstack.Stack("apiKey", "deliveryToken", "environment"); * Entry entry = stack.contentType("user").entry("entry_uid").variant("variant_uid").fetch(); */ - public Entry variants(@NotNull String variants){ - if (variants != null && variants.length() > 0) { - this.headers.put("x-cs-variant-uid", variants.trim()); + public Entry variants(@NotNull String variants) { + if (variants != null && variants.length() > 0) { + this.headers.put("x-cs-variant-uid", variants.trim()); } return this; } - public Entry variants(@NotNull String[] variants){ + + public Entry variants(@NotNull String[] variants) { if (variants != null && variants.length > 0) { List variantList = new ArrayList<>(); for (String variant : variants) { @@ -1131,7 +1132,8 @@ public Entry variants(@NotNull String[] variants){ } return this; } + public LinkedHashMap getHeaders() { return headers; -} + } } diff --git a/src/test/java/com/contentstack/sdk/Credentials.java b/src/test/java/com/contentstack/sdk/Credentials.java index e2a93451..4da2fa5a 100644 --- a/src/test/java/com/contentstack/sdk/Credentials.java +++ b/src/test/java/com/contentstack/sdk/Credentials.java @@ -2,6 +2,7 @@ import io.github.cdimascio.dotenv.Dotenv; import java.rmi.AccessException; +import java.util.Arrays; public class Credentials { static Dotenv env = getEnv(); @@ -32,7 +33,18 @@ public static Dotenv getEnv() { public final static String ENVIRONMENT = (env.get("ENVIRONMENT") != null) ? env.get("ENVIRONMENT") : "env1"; public final static String CONTENT_TYPE = (env.get("contentType") != null) ? env.get("contentType") : "product"; public final static String ENTRY_UID = (env.get("assetUid") != null) ? env.get("assetUid") : ""; + public final static String VARIANT_UID = (env.get("variantUid") != null) ? env.get("variantUid") : ""; + public final static String[] VARIANTS_UID ; + static { String variantsUidString = env.get("variantsUid"); + if (variantsUidString != null && !variantsUidString.trim().isEmpty()) { + VARIANTS_UID = Arrays.stream(variantsUidString.split(",")) + .map(String::trim) + .toArray(String[]::new); + } else { + VARIANTS_UID = new String[]{}; + } + } private static volatile Stack stack; diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java index a4a9c455..bcf91484 100644 --- a/src/test/java/com/contentstack/sdk/TestEntry.java +++ b/src/test/java/com/contentstack/sdk/TestEntry.java @@ -20,7 +20,9 @@ class TestEntry { private final Stack stack = Credentials.getStack(); private Entry entry; private final String CONTENT_TYPE = Credentials.CONTENT_TYPE; - + private final String VARIANT_UID = Credentials.VARIANT_UID; + private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID ; + @Test @Order(1) void entryCallingPrivateModifier() { @@ -66,18 +68,18 @@ public void onCompletion(ResponseType responseType, Error error) { } @Test void VariantsTestSingleUid(){ - entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(" cs672c33271558d8b0 "); + entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UID); entry.fetch(new EntryResultCallBack() { @Override public void onCompletion(ResponseType responseType, Error error) { - assertEquals("cs672c33271558d8b0", entry.getHeaders().get("x-cs-variant-uid")); + assertEquals(VARIANT_UID.trim(), entry.getHeaders().get("x-cs-variant-uid")); System.out.println(entry.toJSON()); } }); } @Test void VariantsTestArray(){ - entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{" cs672c33271558d8b0"," cs321fbc07ec71861b"," cs321fbc07ec71861b "}); + entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UIDS); entry.fetch(new EntryResultCallBack() { @Override public void onCompletion(ResponseType responseType, Error error) { @@ -86,17 +88,6 @@ public void onCompletion(ResponseType responseType, Error error) { }); } - @Test - void VariantsTestArrayWithMixedElements() { - entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{"", " cs672c33271558d8b0 ", null, " "}); - entry.fetch(new EntryResultCallBack() { - @Override - public void onCompletion(ResponseType responseType, Error error) { - System.out.println(entry.toJSON()); - } - }); - } - @Test void VariantsTestNullString() { entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants((String) null); From e3d8c1e78ca87919c95d67cad99fa79cc5ec8cd9 Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Thu, 27 Jun 2024 13:06:45 +0530 Subject: [PATCH 09/25] Chore : Indentation done --- src/main/java/com/contentstack/sdk/Entry.java | 483 +++++++++--------- .../com/contentstack/sdk/Credentials.java | 14 +- .../java/com/contentstack/sdk/TestEntry.java | 32 +- 3 files changed, 278 insertions(+), 251 deletions(-) diff --git a/src/main/java/com/contentstack/sdk/Entry.java b/src/main/java/com/contentstack/sdk/Entry.java index ee776d1b..caae10b9 100644 --- a/src/main/java/com/contentstack/sdk/Entry.java +++ b/src/main/java/com/contentstack/sdk/Entry.java @@ -13,7 +13,9 @@ /** * The Get a single - * Entry request + * Entry + * request * fetches a particular entry of a content type. * * @author Shailesh Mishra @@ -73,14 +75,14 @@ public Entry configure(JSONObject jsonObject) { * Set headers. * * @param key - * custom_header_key + * custom_header_key * @param value - * custom_header_value
- *
- * Example :
+ * custom_header_value
+ *
+ * Example :
* - *
-     *                                                                                         
+ *
+     *              
*/ public void setHeader(String key, String value) { @@ -93,15 +95,15 @@ public void setHeader(String key, String value) { * Remove header key. * * @param key - * custom_header_key
- *
- * Example :
- * - *
-     *                                                                         Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
-     *                                                                         Entry entry = stack.contentType("form_name").entry("entry_uid");
-     *                                                                         entry.removeHeader("custom_header_key");
-     *                                                                         
+ * custom_header_key
+ *
+ * Example :
+ * + *
+     *            Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
+     *            Entry entry = stack.contentType("form_name").entry("entry_uid");
+     *            entry.removeHeader("custom_header_key");
+     *            
*/ public void removeHeader(String key) { @@ -114,10 +116,10 @@ public void removeHeader(String key) { * Get title string * * @return String @title
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String title = entry.getTitle();
      *         
*/ @@ -130,10 +132,10 @@ public String getTitle() { * Get url string * * @return String @url
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String url = entry.getURL();
      *         
*/ @@ -146,10 +148,10 @@ public String getURL() { * Get tags. * * @return String @tags
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String[] tags = entry.getURL();
      *         
*/ @@ -166,10 +168,10 @@ protected void setTags(String[] tags) { * Get contentType name. * * @return String @contentTypeName
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String contentType = entry.getFileType();
      *         
*/ @@ -182,10 +184,10 @@ public String getContentType() { * Get uid. * * @return String @uid
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String uid = entry.getUid();
      *         
*/ @@ -204,12 +206,12 @@ public String getLocale() { /** * @param locale - * {@link String} + * {@link String} * @return Entry
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         Entry entry = entry.setLanguage();
      *         
*/ @@ -223,10 +225,10 @@ public Entry setLocale(@NotNull String locale) { * Get entry representation in json * * @return resultJson
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         JSONObject json = entry.toJSON();
      *         
*/ @@ -239,13 +241,14 @@ public JSONObject toJSON() { * Get object value for key. * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    Object obj = entry.get("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            Object obj = entry.get("key");
+     *            
+ * * @return Object @resultJson */ public Object get(@NotNull String key) { @@ -256,13 +259,14 @@ public Object get(@NotNull String key) { * Get string value for key. * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    String value = entry.getString("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            String value = entry.getString("key");
+     *            
+ * * @return String @getString */ @@ -278,13 +282,14 @@ public String getString(@NotNull String key) { * Get boolean value for key. * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    Boolean value = entry.getBoolean("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            Boolean value = entry.getBoolean("key");
+     *            
+ * * @return boolean @getBoolean */ @@ -300,13 +305,14 @@ public Boolean getBoolean(@NotNull String key) { * Get {@link JSONArray} value for key * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    JSONArray value = entry.getJSONArray("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            JSONArray value = entry.getJSONArray("key");
+     *            
+ * * @return JSONArray @getJSONArray */ @@ -322,13 +328,14 @@ public JSONArray getJSONArray(@NotNull String key) { * Get {@link JSONObject} value for key * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    JSONObject value = entry.getJSONObject("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            JSONObject value = entry.getJSONObject("key");
+     *            
+ * * @return JSONObject @getJSONObject */ public JSONObject getJSONObject(@NotNull String key) { @@ -343,13 +350,14 @@ public JSONObject getJSONObject(@NotNull String key) { * Get {@link JSONObject} value for key * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    JSONObject value = entry.getJSONObject("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            JSONObject value = entry.getJSONObject("key");
+     *            
+ * * @return Number @getNumber */ @@ -365,13 +373,14 @@ public Number getNumber(@NotNull String key) { * Get integer value for key * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    int value = entry.getInt("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            int value = entry.getInt("key");
+     *            
+ * * @return int @getInt */ @@ -387,12 +396,12 @@ public int getInt(@NotNull String key) { * Get integer value for key * * @param key - * field_uid as key. + * field_uid as key. * @return float @getFloat
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         float value = entry.getFloat("key");
      *         
*/ @@ -409,12 +418,12 @@ public float getFloat(@NotNull String key) { * Get double value for key * * @param key - * field_uid as key. + * field_uid as key. * @return double @getDouble
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         double value = entry.getDouble("key");
      *         
*/ @@ -431,13 +440,14 @@ public double getDouble(@NotNull String key) { * Get long value for key * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                 long value = entry.getLong("key");
-     *                                                                                 
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            long value = entry.getLong("key");
+     *            
+ * * @return long @getLong */ @@ -453,15 +463,16 @@ public long getLong(@NotNull String key) { * Get short value for key * * @param key - * field_uid as key. + * field_uid as key. * - *
- *
- * Example :
+ *
+ *
+ * Example :
* - *
-     *                                                                                                                                                                                                                                                                    short value = entry.getShort("key");
-     *                                                                                                                                                                                                                                                                    
+ *
+     *            short value = entry.getShort("key");
+     *            
+ * * @return short @getShort */ public short getShort(@NotNull String key) { @@ -476,13 +487,14 @@ public short getShort(@NotNull String key) { * Get {@link Calendar} value for key * * @param key - * field_uid as key.
- *
- * Example :
- * - *
-     *                                                                                                                                                                                                                                                                    Calendar value = entry.getDate("key");
-     *                                                                                                                                                                                                                                                                    
+ * field_uid as key.
+ *
+ * Example :
+ * + *
+     *            Calendar value = entry.getDate("key");
+     *            
+ * * @return Calendar @getDate */ @@ -500,10 +512,10 @@ public Calendar getDate(@NotNull String key) { * Get {@link Calendar} value of creation time of entry. * * @return Calendar @getCreateAt
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         Calendar createdAt = entry.getCreateAt("key");
      *         
*/ @@ -522,10 +534,10 @@ public Calendar getCreateAt() { * Get uid who created this entry. * * @return String @getCreatedBy
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String createdBy_uid = entry.getCreatedBy();
      *         
*/ @@ -537,10 +549,10 @@ public String getCreatedBy() { * Get {@link Calendar} value of updating time of entry. * * @return Calendar @getUpdateAt
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         Calendar updatedAt = entry.getUpdateAt("key");
      *         
*/ @@ -559,10 +571,10 @@ public Calendar getUpdateAt() { * Get uid who updated this entry. * * @return String @getString
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String updatedBy_uid = entry.getUpdatedBy();
      *         
*/ @@ -575,11 +587,11 @@ public String getUpdatedBy() { * * @return Calendar * - *
- *
- * Example :
+ *
+ *
+ * Example :
* - *
+     *         
      *         Calendar updatedAt = entry.getUpdateAt("key");
      *         
*/ @@ -598,10 +610,10 @@ public Calendar getDeleteAt() { * Get uid who deleted this entry. * * @return String
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         String deletedBy_uid = entry.getDeletedBy();
      *         
*/ @@ -613,12 +625,12 @@ public String getDeletedBy() { * Get an asset from the entry * * @param key - * field_uid as key. + * field_uid as key. * @return Asset
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         Asset asset = entry.getAsset("key");
      *         
*/ @@ -640,7 +652,7 @@ public Asset getAsset(String key) { *
* * @param key - * This is the String key + * This is the String key * @return ArrayList This returns list of Assets. */ @@ -659,14 +671,15 @@ public List getAssets(String key) { /** * @param key - * field_uid as key.
- *
- * Example :
+ * field_uid as key.
+ *
+ * Example :
* - *
+     *            
      *                                                                                                                                                                                                                                                                     Group innerGroup = entry.getGroup("key");
      *                                                                                                                                                                                                                                                                     return null
-     *                                                                                                                                                                                                                                                                    
+ *
+ * * @return {@link Group} */ public Group getGroup(String key) { @@ -682,12 +695,12 @@ public Group getGroup(String key) { * Note :- This will work when group is multiple true. * * @param key - * field_uid as key. + * field_uid as key. * @return list of group from entry
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         Group innerGroup = entry.getGroups("key");
      *         
*/ @@ -708,15 +721,16 @@ public List getGroups(String key) { * Get value for the given reference key. * * @param refKey - * key of a reference field. + * key of a reference field. * @param refContentType - * class uid. - * @return {@link ArrayList} of {@link Entry} instances. Also specified contentType value will be set as class uid - * for all {@link Entry} instance.
- *
- * Example :
+ * class uid. + * @return {@link ArrayList} of {@link Entry} instances. Also specified + * contentType value will be set as class uid + * for all {@link Entry} instance.
+ *
+ * Example :
* - *
+     *         
      *          {@code
      *          Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *          Query csQuery = stack.contentType("contentType_name").query();
@@ -763,10 +777,11 @@ public List getAllEntries(String refKey, String refContentType) {
     }
 
     /**
-     * Specifies list of field ids that would be 'excluded' from the response.
+     * Specifies list of field ids that would be 'excluded' from the
+     * response.
      *
      * @param fieldUid
-     *         field uid which get 'excluded' from the response.
+     *                 field uid which get 'excluded' from the response.
      */
 
     public Entry except(@NotNull String[] fieldUid) {
@@ -785,7 +800,7 @@ public Entry except(@NotNull String[] fieldUid) {
      * Add a constraint that requires a particular reference key details.
      *
      * @param referenceField
-     *         key that to be constrained.
+     *                       key that to be constrained.
      */
     public Entry includeReference(@NotNull String referenceField) {
         if (!referenceField.isEmpty()) {
@@ -802,7 +817,7 @@ public Entry includeReference(@NotNull String referenceField) {
      * Add a constraint that requires a particular reference key details.
      *
      * @param referenceFields
-     *         array key that to be constrained.
+     *                        array key that to be constrained.
      */
     public Entry includeReference(@NotNull String[] referenceFields) {
         if (referenceFields.length > 0) {
@@ -818,15 +833,17 @@ public Entry includeReference(@NotNull String[] referenceFields) {
     }
 
     /**
-     * Specifies an array of 'only' keys in BASE object that would be 'included' in the response.
+     * Specifies an array of 'only' keys in BASE object that would be
+     * 'included' in the response.
      *
      * @param fieldUid
-     *         Array of the 'only' reference keys to be included in response.
+     *                 Array of the 'only' reference keys to be included in
+     *                 response.
      * @return {@link Entry} object, so you can chain this call. 
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *          Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *          Entry entry = stack.contentType("form_name").entry("entry_uid");
* entry.only(new String[]{"name", "description"}); @@ -845,12 +862,14 @@ public Entry only(String[] fieldUid) { } /** - * Specifies an array of 'only' keys that would be 'included' in the response. + * Specifies an array of 'only' keys that would be 'included' in + * the response. * * @param fieldUid - * Array of the 'only' reference keys to be included in response. + * Array of the 'only' reference keys to be + * included in response. * @param referenceFieldUid - * Key who has reference to some other class object. + * Key who has reference to some other class object. */ public Entry onlyWithReferenceUid(@NotNull List fieldUid, @NotNull String referenceFieldUid) { @@ -865,12 +884,14 @@ public Entry onlyWithReferenceUid(@NotNull List fieldUid, @NotNull Strin } /** - * Specifies an array of 'except' keys that would be 'excluded' in the response. + * Specifies an array of 'except' keys that would be 'excluded' + * in the response. * * @param fieldUid - * Array of the 'except' reference keys to be excluded in response. + * Array of the 'except' reference keys to be + * excluded in response. * @param referenceFieldUid - * Key who has reference to some other class object. + * Key who has reference to some other class object. */ public Entry exceptWithReferenceUid(@NotNull List fieldUid, @NotNull String referenceFieldUid) { if (exceptJsonObject == null) { @@ -887,11 +908,12 @@ public Entry exceptWithReferenceUid(@NotNull List fieldUid, @NotNull Str * Fetches the latest version of the entries from Contentstack.com content stack * * @param callback - * {@link EntryResultCallBack} object to notify the application when the request has completed.
- *
- * Example :
+ * {@link EntryResultCallBack} object to notify the application + * when the request has completed.
+ *
+ * Example :
* - *
+     *                 
      *                        {@code
      *                       Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *                       Entry entry = stack.contentType("form_name").entry("entry_uid");
@@ -917,7 +939,6 @@ public void fetch(EntryResultCallBack callback) { fetchFromNetwork(urlString, urlQueries, callback); } - private void fetchFromNetwork(String urlString, JSONObject urlQueries, EntryResultCallBack callBack) { JSONObject mainJson = new JSONObject(); @@ -929,7 +950,6 @@ private void fetchFromNetwork(String urlString, JSONObject urlQueries, EntryResu } - private LinkedHashMap getUrlParams(JSONObject jsonMain) { JSONObject queryJSON = jsonMain.optJSONObject("query"); LinkedHashMap hashMap = new LinkedHashMap<>(); @@ -987,16 +1007,16 @@ private void throwException(@Nullable String errorMsg, Exception e, EntryResultC * This method adds key and value to an Entry. * * @param key - * The key as string which needs to be added to an Entry + * The key as string which needs to be added to an Entry * @param value - * The value as string which needs to be added to an Entry + * The value as string which needs to be added to an Entry * @return {@link Entry} * - *
- *
- * Example :
+ *
+ *
+ * Example :
* - *
+     *         
      *         {@code
      *         Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *         final Entry entry = stack.contentType("user").entry("entryUid"); 
@@ -1016,7 +1036,8 @@ public Entry addParam(@NotNull String key, @NotNull String value) { } /** - * This method also includes the content type UIDs of the referenced entries returned in the response + * This method also includes the content type UIDs of the referenced entries + * returned in the response */ public Entry includeReferenceContentTypeUID() { params.put("include_reference_content_type_uid", "true"); @@ -1034,13 +1055,14 @@ public Entry includeContentType() { } /** - * Retrieve the published content of the fallback locale if an entry is not localized in specified locale + * Retrieve the published content of the fallback locale if an entry is not + * localized in specified locale * * @return {@link Entry} object, so you can chain this call.
- *
- * Example :
+ *
+ * Example :
* - *
+     *         
      *         Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *         final Entry entry = stack.contentType("user").entry("entryUid");
      *         entry.includeFallback();
@@ -1052,7 +1074,8 @@ public Entry includeFallback() {
     }
 
     /**
-     * includeEmbeddedItems instance of Entry Include Embedded Objects (Entries and Assets) along with entry/entries
+     * includeEmbeddedItems instance of Entry Include Embedded Objects (Entries and
+     * Assets) along with entry/entries
      * details.
*/ public Entry includeEmbeddedItems() { @@ -1065,11 +1088,11 @@ public Entry includeEmbeddedItems() { * * @return {@link Entry} object, so you can chain this call. * - *
- *
- * Example :
+ *
+ *
+ * Example :
* - *
+     *         
      *         Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *         final Entry entry = stack.contentType("user").entry("entryUid");
      *         entry.includeBranch();
@@ -1085,11 +1108,11 @@ public Entry includeBranch() {
      *
      * @return {@link Entry} object, so you can chain this call.
      *
-     * 
- *
- * Example :
+ *
+ *
+ * Example :
* - *
+     *         
      *         Stack stack = Contentstack.stack("apiKey", "deliveryToken", "environment");
      *         final Entry entry = stack.contentType("user").entry("entryUid");
      *         entry.includeMetadata();
@@ -1101,39 +1124,41 @@ public Entry includeMetadata() {
     }
 
     /**
-    * @method variants
-    * @memberof Entry
-    * @description The variant header will be added to client
-    * @returns {Entry}
-    * @example
-    * import contentstack from '@contentstack/delivery-sdk'
-    *
-    * Stack stack = contentstack.Stack("apiKey", "deliveryToken", "environment");
-    * Entry entry = stack.contentType("user").entry("entry_uid").variant("variant_uid").fetch();
-    */
-   public Entry variants(@NotNull String variants) {
-    if (variants != null && variants.length() > 0) {
-        this.headers.put("x-cs-variant-uid", variants.trim());
-    }
-    return this;
-  
-  }
-
-  public Entry variants(@NotNull String[] variants) {
-    if (variants != null && variants.length > 0) {
-        List variantList = new ArrayList<>();
-        for (String variant : variants) {
-            if(variant != null && !variant.trim().isEmpty())
-            variantList.add(variant.trim());
+     * @method variants
+     * @memberof Entry
+     * @description The variant header will be added to client
+     * @returns {Entry}
+     * @example
+     *          import contentstack from '@contentstack/delivery-sdk'
+     *
+     *          Stack stack = contentstack.Stack("apiKey", "deliveryToken",
+     *          "environment");
+     *          Entry entry =
+     *          stack.contentType("user").entry("entry_uid").variant("variant_uid").fetch();
+     */
+    public Entry variants(@NotNull String variants) {
+        if (variants != null && variants.length() > 0) {
+            this.headers.put("x-cs-variant-uid", variants.trim());
         }
-        if(!variantList.isEmpty()){
-            this.headers.put("x-cs-variant-uid", String.join(", ", variantList));
+        return this;
+
+    }
+
+    public Entry variants(@NotNull String[] variants) {
+        if (variants != null && variants.length > 0) {
+            List variantList = new ArrayList<>();
+            for (String variant : variants) {
+                if (variant != null && !variant.trim().isEmpty())
+                    variantList.add(variant.trim());
+            }
+            if (!variantList.isEmpty()) {
+                this.headers.put("x-cs-variant-uid", String.join(", ", variantList));
+            }
         }
+        return this;
+    }
+
+    public LinkedHashMap getHeaders() {
+        return headers;
     }
-    return this;
-  }
-  
-  public LinkedHashMap getHeaders() {
-    return headers;
-  }   
 }
diff --git a/src/test/java/com/contentstack/sdk/Credentials.java b/src/test/java/com/contentstack/sdk/Credentials.java
index 4da2fa5a..e513b837 100644
--- a/src/test/java/com/contentstack/sdk/Credentials.java
+++ b/src/test/java/com/contentstack/sdk/Credentials.java
@@ -1,4 +1,5 @@
 package com.contentstack.sdk;
+
 import io.github.cdimascio.dotenv.Dotenv;
 
 import java.rmi.AccessException;
@@ -7,7 +8,6 @@
 public class Credentials {
     static Dotenv env = getEnv();
 
-
     private static String envChecker() {
         String githubActions = System.getenv("GITHUB_ACTIONS");
         if (githubActions != null && githubActions.equals("true")) {
@@ -26,7 +26,6 @@ public static Dotenv getEnv() {
         return Dotenv.load();
     }
 
-
     public final static String HOST = (env.get("HOST") != null) ? env.get("HOST") : "cdn.contentstack.io";
     public final static String API_KEY = (env.get("API_KEY") != null) ? env.get("API_KEY") : "";
     public final static String DELIVERY_TOKEN = (env.get("DELIVERY_TOKEN") != null) ? env.get("DELIVERY_TOKEN") : "";
@@ -34,15 +33,16 @@ public static Dotenv getEnv() {
     public final static String CONTENT_TYPE = (env.get("contentType") != null) ? env.get("contentType") : "product";
     public final static String ENTRY_UID = (env.get("assetUid") != null) ? env.get("assetUid") : "";
     public final static String VARIANT_UID = (env.get("variantUid") != null) ? env.get("variantUid") : "";
-    public final static String[] VARIANTS_UID ;
-   static {  String variantsUidString = env.get("variantsUid");
+    public final static String[] VARIANTS_UID;
+    static {
+        String variantsUidString = env.get("variantsUid");
 
         if (variantsUidString != null && !variantsUidString.trim().isEmpty()) {
             VARIANTS_UID = Arrays.stream(variantsUidString.split(","))
-                                 .map(String::trim)
-                                 .toArray(String[]::new);
+                    .map(String::trim)
+                    .toArray(String[]::new);
         } else {
-            VARIANTS_UID = new String[]{};
+            VARIANTS_UID = new String[] {};
         }
     }
 
diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java
index bcf91484..657be712 100644
--- a/src/test/java/com/contentstack/sdk/TestEntry.java
+++ b/src/test/java/com/contentstack/sdk/TestEntry.java
@@ -21,8 +21,8 @@ class TestEntry {
     private Entry entry;
     private final String CONTENT_TYPE = Credentials.CONTENT_TYPE;
     private final String VARIANT_UID = Credentials.VARIANT_UID;
-    private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID ;
-    
+    private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID;
+
     @Test
     @Order(1)
     void entryCallingPrivateModifier() {
@@ -66,38 +66,40 @@ public void onCompletion(ResponseType responseType, Error error) {
         });
         logger.info("passed..");
     }
+
     @Test
-    void VariantsTestSingleUid(){
+    void VariantsTestSingleUid() {
         entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UID);
         entry.fetch(new EntryResultCallBack() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
                 assertEquals(VARIANT_UID.trim(), entry.getHeaders().get("x-cs-variant-uid"));
-               System.out.println(entry.toJSON());
+                System.out.println(entry.toJSON());
             }
         });
     }
+
     @Test
-    void VariantsTestArray(){
+    void VariantsTestArray() {
         entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UIDS);
         entry.fetch(new EntryResultCallBack() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
-               System.out.println(entry.toJSON());
+                System.out.println(entry.toJSON());
             }
         });
     }
-    
+
     @Test
     void VariantsTestNullString() {
-    entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants((String) null);
-    entry.fetch(new EntryResultCallBack() {
-        @Override
-        public void onCompletion(ResponseType responseType, Error error) {
-            assertNull(entry.getHeaders().get("x-cs-variant-uid"));
-            System.out.println(entry.toJSON());
-        }
-    });
+        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants((String) null);
+        entry.fetch(new EntryResultCallBack() {
+            @Override
+            public void onCompletion(ResponseType responseType, Error error) {
+                assertNull(entry.getHeaders().get("x-cs-variant-uid"));
+                System.out.println(entry.toJSON());
+            }
+        });
     }
 
     @Test

From b21535628243e86ab1c111f04e8a484cc1d88227 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Wed, 17 Jul 2024 15:16:17 +0530
Subject: [PATCH 10/25] feat: added where method in AssetLibrary class

---
 src/test/java/com/contentstack/sdk/TestAssetLibrary.java | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
index 1238e981..f944d909 100644
--- a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
+++ b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
@@ -2,6 +2,8 @@
 
 import org.junit.jupiter.api.*;
 
+import com.google.gson.JsonObject;
+import org.json.*;
 
 import java.util.List;
 import java.util.logging.Logger;

From 05d17c61caac8491fd698909989d265b243c5938 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Wed, 17 Jul 2024 15:33:17 +0530
Subject: [PATCH 11/25] change: removed unused libraries

---
 src/test/java/com/contentstack/sdk/TestAssetLibrary.java | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
index f944d909..1238e981 100644
--- a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
+++ b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
@@ -2,8 +2,6 @@
 
 import org.junit.jupiter.api.*;
 
-import com.google.gson.JsonObject;
-import org.json.*;
 
 import java.util.List;
 import java.util.logging.Logger;

From cdf225e8e8c7c9222813b8a85a319aecaae66f47 Mon Sep 17 00:00:00 2001
From: Aravind Kumar 
Date: Fri, 17 May 2024 20:48:27 +0530
Subject: [PATCH 12/25] codeql-analysis.yml


From 71204d07caa776bf222dd53ca1302aafeb9fab2b Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Tue, 20 Aug 2024 14:59:52 +0530
Subject: [PATCH 13/25] chore: Version bump

---
 CHANGELOG.md | 6 ++++++
 pom.xml      | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 091dce2d..01f7715d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # CHANGELOG
 
+## v2.0.0
+
+### Date: 27-August-2024
+
+-Feature: Variants method introduced
+
 ## v1.15.0
 
 ### Date: 04-Sep-2024
diff --git a/pom.xml b/pom.xml
index 62b53ce2..8fa801f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
     4.0.0
     com.contentstack.sdk
     java
-    1.15.0
+    2.0.0
     jar
     contentstack-java
     Java SDK for Contentstack Content Delivery API

From 5989d7c62bfe559926cf83ae4009f24edf0f410f Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Tue, 3 Sep 2024 14:46:08 +0530
Subject: [PATCH 14/25] feat : Live preview 2.0 implementation

---
 .../java/com/contentstack/sdk/Config.java     | 12 ++++++++
 src/main/java/com/contentstack/sdk/Stack.java | 28 ++++++++++++++++++-
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/src/main/java/com/contentstack/sdk/Config.java b/src/main/java/com/contentstack/sdk/Config.java
index e4567afc..54011b92 100644
--- a/src/main/java/com/contentstack/sdk/Config.java
+++ b/src/main/java/com/contentstack/sdk/Config.java
@@ -26,6 +26,7 @@ public class Config {
     protected JSONObject livePreviewEntry = null;
     protected ContentstackRegion region = ContentstackRegion.US;
     protected String managementToken;
+    protected String previewToken;
     protected String branch;
     protected Proxy proxy = null;
     protected String[] earlyAccess = null;
@@ -181,6 +182,17 @@ protected Config setLivePreviewEntry(@NotNull JSONObject livePreviewEntry) {
         return this;
     }
 
+     /**
+     * Sets preview token.
+     *
+     * @param previewToken the preview token
+     * @return the preview token
+     */
+    public Config setPreviewToken(@NotNull String previewToken){
+        this.previewToken = previewToken;
+        return this;
+    }
+
     /**
      * Sets management token.
      *
diff --git a/src/main/java/com/contentstack/sdk/Stack.java b/src/main/java/com/contentstack/sdk/Stack.java
index 2f27565d..20bca289 100644
--- a/src/main/java/com/contentstack/sdk/Stack.java
+++ b/src/main/java/com/contentstack/sdk/Stack.java
@@ -6,6 +6,9 @@
 import org.jetbrains.annotations.NotNull;
 import org.json.JSONArray;
 import org.json.JSONObject;
+
+import com.contentstack.sdk.Constants.REQUEST_CONTROLLER;
+
 import retrofit2.Response;
 import retrofit2.Retrofit;
 
@@ -98,6 +101,15 @@ private void client(String endpoint) {
 
     private void includeLivePreview() {
         if (config.enableLivePreview) {
+            String urlLivePreview = config.livePreviewHost;
+            if(config.region != null && !config.region.name().isEmpty()){
+                if(config.region.name() == "US" ){
+                    config.livePreviewHost = urlLivePreview;
+                }else{
+                    String regionPrefix = config.region.name().toLowerCase();
+                    config.livePreviewHost = regionPrefix + "-" + urlLivePreview;
+                }
+            }
             this.livePreviewEndpoint = "https://".concat(config.livePreviewHost).concat("/v3/content_types/");
         }
     }
@@ -125,6 +137,7 @@ private void includeLivePreview() {
      * @throws IOException IO Exception
      */
     public Stack livePreviewQuery(Map query) throws IOException {
+        if(config.enableLivePreview){
         config.livePreviewHash = query.get(LIVE_PREVIEW);
         config.livePreviewEntryUid = query.get(ENTRY_UID);
         config.livePreviewContentType = query.get(CONTENT_TYPE_UID);
@@ -137,7 +150,17 @@ public Stack livePreviewQuery(Map query) throws IOException {
         try {
             LinkedHashMap liveHeader = new LinkedHashMap<>();
             liveHeader.put("api_key", this.headers.get("api_key"));
-            liveHeader.put("authorization", config.managementToken);
+
+            if(config.livePreviewHost.equals("rest-preview.contentstack.com"))
+            {   
+                if(config.previewToken != null) { 
+                    liveHeader.put("preview_token", config.previewToken);
+                } else{
+                    throw new IllegalAccessError("Provide the Preview Token for the host rest-preview.contentstack.com");
+                }
+            } else { 
+                liveHeader.put("authorization", config.managementToken);
+            }
             response = this.service.getRequest(livePreviewUrl, liveHeader).execute();
         } catch (IOException e) {
             throw new IllegalStateException("IO Exception while executing the Live Preview url");
@@ -150,6 +173,9 @@ public Stack livePreviewQuery(Map query) throws IOException {
                 config.setLivePreviewEntry(liveResponse.getJSONObject("entry"));
             }
         }
+    } else { 
+        throw new IllegalStateException("Live Preview is not enabled in Config");
+    }
         return this;
     }
 

From 6ad07254d0320f42b60d04895033809f2767faa1 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Tue, 3 Sep 2024 14:51:49 +0530
Subject: [PATCH 15/25] test: testcases for live preview

---
 .../com/contentstack/sdk/TestLivePreview.java | 66 +++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java
index 596d8d59..6c6d75c0 100644
--- a/src/test/java/com/contentstack/sdk/TestLivePreview.java
+++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java
@@ -5,6 +5,10 @@
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -26,6 +30,7 @@ public static void setUp() {
         config = new Config();
     }
 
+
     /**
      * Test config test.
      */
@@ -110,8 +115,10 @@ void testExceptionWhenAllRequiredParamsNotProvided() {
                 .setLivePreviewHost("live-preview.contentstack.io");
         try {
             Contentstack.stack("liveAPIKey", "liveAccessToken", "liveEnv", livePreviewEnablerConfig);
+            System.out.println("no it works");
         } catch (Exception e) {
             Assertions.assertEquals("managementToken is required", e.getLocalizedMessage());
+            System.out.println(e.getLocalizedMessage());
             logger.severe(e.getLocalizedMessage());
         }
     }
@@ -158,5 +165,64 @@ void testCompleteLivePreviewInQuery() throws Exception {
         Assertions.assertNotNull(entry);
     }
 
+    @Test
+    void testCompleteLivePreviewWithPreviewToken() throws IOException, IllegalAccessException {
+        Config livePreviewConfig = new Config()
+                .enableLivePreview(true)
+                .setLivePreviewHost("rest-preview.contentstack.com")
+                .setPreviewToken("preview_token");
+
+        Stack stack = Contentstack.stack("stackApiKey", "deliveryToken", "env1", livePreviewConfig);
+
+        HashMap hashMap = new HashMap<>();
+        hashMap.put("live_preview", "hash167673");
+        hashMap.put("content_type_uid", "page");
+
+        stack.livePreviewQuery(hashMap);
+        Entry entry = stack.contentType("page").entry("entry_uid");
+        entry.fetch(null);
+        Assertions.assertNotNull(entry);
+
+    }
+
+    @Test()
+    void testLivePreviewWithoutPreviewToken() throws Exception {
+        Config livePreviewEnablerConfig = new Config().enableLivePreview(true).setLivePreviewHost("rest-preview.contentstack.com")
+                .setManagementToken("fake@token");
+        Stack stack = Contentstack.stack("stackApiKey", "deliveryToken", "env1", livePreviewEnablerConfig);
+        HashMap hashMap = new HashMap<>();
+        hashMap.put("live_preview", "hash167673");
+        hashMap.put("content_type_uid", "page");
+        
+        IllegalAccessError thrown = Assertions.assertThrows(IllegalAccessError.class, () -> {
+            stack.livePreviewQuery(hashMap);
+        }, "Expected livePreviewQuery to throw IllegalAccessError");
+
+        Assertions.assertTrue(thrown.getMessage().contains("Provide the Preview Token for the host rest-preview.contentstack.com"), 
+            "Exception message should mention that Preview Token is required");
+
+        logger.severe(thrown.getMessage());  
+    }
+
+    @Test
+    void testLivePreviewDisabled() throws IllegalAccessException, IOException {
+    Config config = new Config()
+            .enableLivePreview(false)
+            .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");
+
+    Exception exception = assertThrows(IllegalStateException.class, () -> {
+        stack.livePreviewQuery(hashMap);
+    });
+
+    // Optionally, you can check the message of the exception
+    assertEquals("Live Preview is not enabled in Config", exception.getMessage(), 
+                 "Expected exception message does not match");
+    }
 
 }

From b66df0d4bb2319f0645f81d09852e5b34647b0be Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Tue, 3 Sep 2024 14:52:13 +0530
Subject: [PATCH 16/25] chore: updated testcases assertions

---
 .../java/com/contentstack/sdk/TestAsset.java     | 16 ++++++++--------
 .../com/contentstack/sdk/TestAssetLibrary.java   |  8 ++++----
 .../java/com/contentstack/sdk/TestEntry.java     |  2 +-
 .../java/com/contentstack/sdk/TestStack.java     |  2 +-
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/test/java/com/contentstack/sdk/TestAsset.java b/src/test/java/com/contentstack/sdk/TestAsset.java
index 259efe83..d344d9f7 100644
--- a/src/test/java/com/contentstack/sdk/TestAsset.java
+++ b/src/test/java/com/contentstack/sdk/TestAsset.java
@@ -38,10 +38,10 @@ public void onCompletion(ResponseType responseType, List assets, Error er
                 Asset model = assets.get(0);
                 assetUid = model.getAssetUid();
                 Assertions.assertTrue(model.getAssetUid().startsWith("blt"));
-                Assertions.assertEquals("image/jpeg", model.getFileType());
-                Assertions.assertEquals("1775299", model.getFileSize());
-                Assertions.assertEquals("phoenix2.jpg", model.getFileName());
-                Assertions.assertTrue(model.getUrl().endsWith("phoenix2.jpg"));
+                Assertions.assertEquals("image/png", model.getFileType());
+                Assertions.assertEquals("13006", model.getFileSize());
+                Assertions.assertEquals("iot-icon.png", model.getFileName());
+                Assertions.assertTrue(model.getUrl().endsWith("iot-icon.png"));
                 Assertions.assertTrue(model.toJSON().has("created_at"));
                 Assertions.assertTrue(model.getCreatedBy().startsWith("blt"));
                 Assertions.assertEquals("gregory", model.getUpdateAt().getCalendarType());
@@ -60,10 +60,10 @@ void testNewAssetZOnlyForOrderByUid() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
                 Assertions.assertTrue(asset.getAssetUid().startsWith("blt"));
-                Assertions.assertEquals("image/jpeg", asset.getFileType());
-                Assertions.assertEquals("1775299", asset.getFileSize());
-                Assertions.assertEquals("phoenix2.jpg", asset.getFileName());
-                Assertions.assertTrue(asset.getUrl().endsWith("phoenix2.jpg"));
+                Assertions.assertEquals("image/png", asset.getFileType());
+                Assertions.assertEquals("13006", asset.getFileSize());
+                Assertions.assertEquals("iot-icon.png", asset.getFileName());
+                Assertions.assertTrue(asset.getUrl().endsWith("iot-icon.png"));
                 Assertions.assertTrue(asset.toJSON().has("created_at"));
                 Assertions.assertTrue(asset.getCreatedBy().startsWith("blt"));
                 Assertions.assertEquals("gregory", asset.getUpdateAt().getCalendarType());
diff --git a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
index 48607e83..1238e981 100644
--- a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
+++ b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
@@ -24,10 +24,10 @@ void testNewAssetLibrary() {
             public void onCompletion(ResponseType responseType, List assets, Error error) {
                 Asset model = assets.get(0);
                 Assertions.assertTrue(model.getAssetUid().startsWith("blt"));
-                assertEquals("image/jpeg", model.getFileType());
-                assertEquals("1775299", model.getFileSize());
-                assertEquals("phoenix2.jpg", model.getFileName());
-                Assertions.assertTrue(model.getUrl().endsWith("phoenix2.jpg"));
+                assertEquals("image/png", model.getFileType());
+                assertEquals("13006", model.getFileSize());
+                assertEquals("iot-icon.png", model.getFileName());
+                Assertions.assertTrue(model.getUrl().endsWith("iot-icon.png"));
                 Assertions.assertTrue(model.toJSON().has("created_at"));
                 Assertions.assertTrue(model.getCreatedBy().startsWith("blt"));
                 assertEquals("gregory", model.getUpdateAt().getCalendarType());
diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java
index 7df8c94c..657be712 100644
--- a/src/test/java/com/contentstack/sdk/TestEntry.java
+++ b/src/test/java/com/contentstack/sdk/TestEntry.java
@@ -105,7 +105,7 @@ public void onCompletion(ResponseType responseType, Error error) {
     @Test
     @Order(4)
     void entryCalling() {
-        Assertions.assertEquals(6, entry.headers.size());
+        Assertions.assertEquals(7, entry.headers.size());
         logger.info("passed...");
     }
 
diff --git a/src/test/java/com/contentstack/sdk/TestStack.java b/src/test/java/com/contentstack/sdk/TestStack.java
index ccf89b55..edde1475 100644
--- a/src/test/java/com/contentstack/sdk/TestStack.java
+++ b/src/test/java/com/contentstack/sdk/TestStack.java
@@ -304,7 +304,7 @@ void testGetAllContentTypes() {
             @Override
             public void onCompletion(ContentTypesModel contentTypesModel, Error error) {
                 assertTrue(contentTypesModel.getResponse() instanceof JSONArray);
-                assertEquals(5, ((JSONArray) contentTypesModel.getResponse()).length());
+                assertEquals(8, ((JSONArray) contentTypesModel.getResponse()).length());
             }
         });
     }

From ab30eb387f7f4421f13ded407f2f4067328bb774 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Tue, 3 Sep 2024 15:07:06 +0530
Subject: [PATCH 17/25] chore: version bump

---
 CHANGELOG.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84206a93..01f7715d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,12 @@
 
 -Feature: Variants method introduced
 
+## v1.15.0
+
+### Date: 04-Sep-2024
+
+- Live Preview 2.0 support added
+
 ## v1.14.2
 
 ### Date: 15-July-2024

From ec99677b5e699ddc11a32c351e5632d462b5145f Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Wed, 4 Sep 2024 11:06:02 +0530
Subject: [PATCH 18/25] chore: removed print statements

---
 src/test/java/com/contentstack/sdk/TestLivePreview.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java
index 6c6d75c0..778547ba 100644
--- a/src/test/java/com/contentstack/sdk/TestLivePreview.java
+++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java
@@ -115,7 +115,6 @@ void testExceptionWhenAllRequiredParamsNotProvided() {
                 .setLivePreviewHost("live-preview.contentstack.io");
         try {
             Contentstack.stack("liveAPIKey", "liveAccessToken", "liveEnv", livePreviewEnablerConfig);
-            System.out.println("no it works");
         } catch (Exception e) {
             Assertions.assertEquals("managementToken is required", e.getLocalizedMessage());
             System.out.println(e.getLocalizedMessage());

From da9072b80fd37cddac0d18b52389fe9c942bafc1 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Wed, 4 Sep 2024 11:10:13 +0530
Subject: [PATCH 19/25] chore: removed print statements

---
 src/test/java/com/contentstack/sdk/TestLivePreview.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/test/java/com/contentstack/sdk/TestLivePreview.java b/src/test/java/com/contentstack/sdk/TestLivePreview.java
index 778547ba..b5bec654 100644
--- a/src/test/java/com/contentstack/sdk/TestLivePreview.java
+++ b/src/test/java/com/contentstack/sdk/TestLivePreview.java
@@ -117,7 +117,6 @@ void testExceptionWhenAllRequiredParamsNotProvided() {
             Contentstack.stack("liveAPIKey", "liveAccessToken", "liveEnv", livePreviewEnablerConfig);
         } catch (Exception e) {
             Assertions.assertEquals("managementToken is required", e.getLocalizedMessage());
-            System.out.println(e.getLocalizedMessage());
             logger.severe(e.getLocalizedMessage());
         }
     }

From 7681f4d0a0de2432477a6416f219cb98e680cd56 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Tue, 25 Jun 2024 12:57:43 +0530
Subject: [PATCH 20/25] feat : variants implementation

---
 .../java/com/contentstack/sdk/TestEntry.java  | 44 +++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java
index 657be712..f065c924 100644
--- a/src/test/java/com/contentstack/sdk/TestEntry.java
+++ b/src/test/java/com/contentstack/sdk/TestEntry.java
@@ -66,6 +66,50 @@ public void onCompletion(ResponseType responseType, Error error) {
         });
         logger.info("passed..");
     }
+    @Test
+    void VariantsTestSingleUid(){
+        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants("  cs672c33271558d8b0 ");
+        entry.fetch(new EntryResultCallBack() {
+            @Override
+            public void onCompletion(ResponseType responseType, Error error) {
+                assertEquals("cs672c33271558d8b0", entry.getHeaders().get("x-cs-variant-uid"));
+               System.out.println(entry.toJSON());
+            }
+        });
+    }
+    @Test
+    void VariantsTestArray(){
+        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{" cs672c33271558d8b0"," cs321fbc07ec71861b"," cs321fbc07ec71861b "});
+        entry.fetch(new EntryResultCallBack() {
+            @Override
+            public void onCompletion(ResponseType responseType, Error error) {
+               System.out.println(entry.toJSON());
+            }
+        });
+    }
+    
+    @Test
+    void VariantsTestArrayWithMixedElements() {
+        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{"", " cs672c33271558d8b0 ", null, "   "});
+        entry.fetch(new EntryResultCallBack() {
+            @Override
+            public void onCompletion(ResponseType responseType, Error error) {
+                System.out.println(entry.toJSON());
+            }
+        });
+    }
+
+    @Test
+    void VariantsTestNullString() {
+    entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants((String) null);
+    entry.fetch(new EntryResultCallBack() {
+        @Override
+        public void onCompletion(ResponseType responseType, Error error) {
+            assertNull(entry.getHeaders().get("x-cs-variant-uid"));
+            System.out.println(entry.toJSON());
+        }
+    });
+    }
 
     @Test
     void VariantsTestSingleUid() {

From 733be8f454ad1e02ab0b22aa84f28caab4ddb75e Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Thu, 27 Jun 2024 12:51:00 +0530
Subject: [PATCH 21/25] Chore : indentation and dummy ids added

---
 .../java/com/contentstack/sdk/TestEntry.java  | 56 ++-----------------
 1 file changed, 5 insertions(+), 51 deletions(-)

diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java
index f065c924..be8882cd 100644
--- a/src/test/java/com/contentstack/sdk/TestEntry.java
+++ b/src/test/java/com/contentstack/sdk/TestEntry.java
@@ -21,8 +21,8 @@ class TestEntry {
     private Entry entry;
     private final String CONTENT_TYPE = Credentials.CONTENT_TYPE;
     private final String VARIANT_UID = Credentials.VARIANT_UID;
-    private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID;
-
+    private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID ;
+    
     @Test
     @Order(1)
     void entryCallingPrivateModifier() {
@@ -68,68 +68,22 @@ public void onCompletion(ResponseType responseType, Error error) {
     }
     @Test
     void VariantsTestSingleUid(){
-        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants("  cs672c33271558d8b0 ");
-        entry.fetch(new EntryResultCallBack() {
-            @Override
-            public void onCompletion(ResponseType responseType, Error error) {
-                assertEquals("cs672c33271558d8b0", entry.getHeaders().get("x-cs-variant-uid"));
-               System.out.println(entry.toJSON());
-            }
-        });
-    }
-    @Test
-    void VariantsTestArray(){
-        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{" cs672c33271558d8b0"," cs321fbc07ec71861b"," cs321fbc07ec71861b "});
-        entry.fetch(new EntryResultCallBack() {
-            @Override
-            public void onCompletion(ResponseType responseType, Error error) {
-               System.out.println(entry.toJSON());
-            }
-        });
-    }
-    
-    @Test
-    void VariantsTestArrayWithMixedElements() {
-        entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(new String[]{"", " cs672c33271558d8b0 ", null, "   "});
-        entry.fetch(new EntryResultCallBack() {
-            @Override
-            public void onCompletion(ResponseType responseType, Error error) {
-                System.out.println(entry.toJSON());
-            }
-        });
-    }
-
-    @Test
-    void VariantsTestNullString() {
-    entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants((String) null);
-    entry.fetch(new EntryResultCallBack() {
-        @Override
-        public void onCompletion(ResponseType responseType, Error error) {
-            assertNull(entry.getHeaders().get("x-cs-variant-uid"));
-            System.out.println(entry.toJSON());
-        }
-    });
-    }
-
-    @Test
-    void VariantsTestSingleUid() {
         entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UID);
         entry.fetch(new EntryResultCallBack() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
                 assertEquals(VARIANT_UID.trim(), entry.getHeaders().get("x-cs-variant-uid"));
-                System.out.println(entry.toJSON());
+               System.out.println(entry.toJSON());
             }
         });
     }
-
     @Test
-    void VariantsTestArray() {
+    void VariantsTestArray(){
         entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UIDS);
         entry.fetch(new EntryResultCallBack() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
-                System.out.println(entry.toJSON());
+               System.out.println(entry.toJSON());
             }
         });
     }

From 517ba43bcac0bb63d7cdda14f036a94d9b1e6490 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Thu, 27 Jun 2024 13:06:45 +0530
Subject: [PATCH 22/25] Chore : Indentation done

---
 src/test/java/com/contentstack/sdk/TestEntry.java | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/test/java/com/contentstack/sdk/TestEntry.java b/src/test/java/com/contentstack/sdk/TestEntry.java
index be8882cd..657be712 100644
--- a/src/test/java/com/contentstack/sdk/TestEntry.java
+++ b/src/test/java/com/contentstack/sdk/TestEntry.java
@@ -21,8 +21,8 @@ class TestEntry {
     private Entry entry;
     private final String CONTENT_TYPE = Credentials.CONTENT_TYPE;
     private final String VARIANT_UID = Credentials.VARIANT_UID;
-    private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID ;
-    
+    private static final String[] VARIANT_UIDS = Credentials.VARIANTS_UID;
+
     @Test
     @Order(1)
     void entryCallingPrivateModifier() {
@@ -66,24 +66,26 @@ public void onCompletion(ResponseType responseType, Error error) {
         });
         logger.info("passed..");
     }
+
     @Test
-    void VariantsTestSingleUid(){
+    void VariantsTestSingleUid() {
         entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UID);
         entry.fetch(new EntryResultCallBack() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
                 assertEquals(VARIANT_UID.trim(), entry.getHeaders().get("x-cs-variant-uid"));
-               System.out.println(entry.toJSON());
+                System.out.println(entry.toJSON());
             }
         });
     }
+
     @Test
-    void VariantsTestArray(){
+    void VariantsTestArray() {
         entry = stack.contentType(CONTENT_TYPE).entry(entryUid).variants(VARIANT_UIDS);
         entry.fetch(new EntryResultCallBack() {
             @Override
             public void onCompletion(ResponseType responseType, Error error) {
-               System.out.println(entry.toJSON());
+                System.out.println(entry.toJSON());
             }
         });
     }

From 7f7dea498551c33fb496b2ca0def8d33dd67f817 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Wed, 17 Jul 2024 15:16:17 +0530
Subject: [PATCH 23/25] feat: added where method in AssetLibrary class

---
 src/test/java/com/contentstack/sdk/TestAssetLibrary.java | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
index 1238e981..f944d909 100644
--- a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
+++ b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
@@ -2,6 +2,8 @@
 
 import org.junit.jupiter.api.*;
 
+import com.google.gson.JsonObject;
+import org.json.*;
 
 import java.util.List;
 import java.util.logging.Logger;

From ee38778f6c531dd583cb77a55cadd13ceddd7293 Mon Sep 17 00:00:00 2001
From: reeshika-h 
Date: Wed, 17 Jul 2024 15:33:17 +0530
Subject: [PATCH 24/25] change: removed unused libraries

---
 src/test/java/com/contentstack/sdk/TestAssetLibrary.java | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
index f944d909..1238e981 100644
--- a/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
+++ b/src/test/java/com/contentstack/sdk/TestAssetLibrary.java
@@ -2,8 +2,6 @@
 
 import org.junit.jupiter.api.*;
 
-import com.google.gson.JsonObject;
-import org.json.*;
 
 import java.util.List;
 import java.util.logging.Logger;

From 12ea59adc1e4ea3a36f8de614fcd2ada0f06d8ea Mon Sep 17 00:00:00 2001
From: Aravind Kumar 
Date: Fri, 17 May 2024 20:48:27 +0530
Subject: [PATCH 25/25] codeql-analysis.yml