diff --git a/CHANGELOG.md b/CHANGELOG.md
index 52b7b07..0a28090 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# CHANGELOG
+## v2.1.2
+
+### Date: 26-May-2025
+
+- Global field implementation
+
## v2.1.1
### Date: 1-Apr-2025
diff --git a/pom.xml b/pom.xml
index 5ab23a8..7aa3656 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.contentstack.sdk
java
- 2.1.1
+ 2.1.2
jar
contentstack-java
Java SDK for Contentstack Content Delivery API
diff --git a/src/main/java/com/contentstack/sdk/CSBackgroundTask.java b/src/main/java/com/contentstack/sdk/CSBackgroundTask.java
index 893408d..aaebb39 100644
--- a/src/main/java/com/contentstack/sdk/CSBackgroundTask.java
+++ b/src/main/java/com/contentstack/sdk/CSBackgroundTask.java
@@ -100,4 +100,15 @@ protected void checkHeader(@NotNull Map headers) {
}
}
+ protected CSBackgroundTask(GlobalField globalField, Stack stackInstance, String controller, String url,
+ HashMap headers, HashMap urlParams, String requestInfo,
+ ResultCallBack callback) {
+ checkHeader(headers);
+ String completeUrl = stackInstance.config.getEndpoint() + url;
+ CSConnectionRequest csConnectionRequest = new CSConnectionRequest(globalField);
+ csConnectionRequest.setURLQueries(urlParams);
+ this.service = stackInstance.service;
+ csConnectionRequest.setParams(completeUrl, headers, controller, requestInfo, callback, this.service, stackInstance);
+ }
+
}
diff --git a/src/main/java/com/contentstack/sdk/CSConnectionRequest.java b/src/main/java/com/contentstack/sdk/CSConnectionRequest.java
index 64daeb4..2209053 100644
--- a/src/main/java/com/contentstack/sdk/CSConnectionRequest.java
+++ b/src/main/java/com/contentstack/sdk/CSConnectionRequest.java
@@ -53,6 +53,10 @@ public CSConnectionRequest(ContentType contentType) {
this.endpoint = contentType.stackInstance.config.getEndpoint();
}
+ public CSConnectionRequest(GlobalField globalField) {
+ this.endpoint = globalField.stackInstance.config.getEndpoint();
+ }
+
public void setQueryInstance(Query queryInstance) {
this.endpoint = queryInstance.contentTypeInstance.stackInstance.config.getEndpoint();
}
@@ -167,6 +171,12 @@ public synchronized void onRequestFinished(CSHttpConnection request) {
if (request.getCallBackObject() != null) {
((ContentTypesCallback) request.getCallBackObject()).onRequestFinish(model);
}
+ } else if (request.getController().equalsIgnoreCase(Constants.FETCHGLOBALFIELDS)) {
+ GlobalFieldsModel model = new GlobalFieldsModel();
+ model.setJSON(jsonResponse);
+ if (request.getCallBackObject() != null) {
+ ((GlobalFieldsCallback) request.getCallBackObject()).onRequestFinish(model);
+ }
}
}
diff --git a/src/main/java/com/contentstack/sdk/Constants.java b/src/main/java/com/contentstack/sdk/Constants.java
index 2491722..c1eb614 100644
--- a/src/main/java/com/contentstack/sdk/Constants.java
+++ b/src/main/java/com/contentstack/sdk/Constants.java
@@ -54,7 +54,7 @@ protected Constants() {
*/
// REQUEST_CONTROLLER
public enum REQUEST_CONTROLLER {
- QUERY, ENTRY, ASSET, SYNC, CONTENTTYPES, ASSETLIBRARY
+ QUERY, ENTRY, ASSET, SYNC, CONTENTTYPES, ASSETLIBRARY, GLOBALFIELDS
}
// GET REQUEST TYPE
@@ -65,6 +65,7 @@ public enum REQUEST_CONTROLLER {
public static final String FETCHASSETS = "getAssets";
public static final String FETCHSYNC = "getSync";
public static final String FETCHCONTENTTYPES = "getContentTypes";
+ public static final String FETCHGLOBALFIELDS = "getGlobalFields";
public static final String CONTENT_TYPE_NAME = "Please set contentType name.";
public static final String QUERY_EXCEPTION = "Please provide valid params.";
diff --git a/src/main/java/com/contentstack/sdk/GlobalField.java b/src/main/java/com/contentstack/sdk/GlobalField.java
new file mode 100644
index 0000000..11901cf
--- /dev/null
+++ b/src/main/java/com/contentstack/sdk/GlobalField.java
@@ -0,0 +1,119 @@
+package com.contentstack.sdk;
+
+import org.jetbrains.annotations.NotNull;
+import org.json.JSONObject;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.logging.Logger;
+
+/**
+ * This call returns information of a specific global field. It returns the
+ * global field schema.
+ *
+ */
+public class GlobalField {
+
+ protected static final Logger logger = Logger.getLogger(GlobalField.class.getSimpleName());
+ protected String globalFieldUid;
+ protected Stack stackInstance = null;
+ protected JSONObject params = new JSONObject();
+ protected LinkedHashMap headers = null;
+
+ protected GlobalField() {
+ this.headers = new LinkedHashMap<>();
+ }
+
+ protected GlobalField(@NotNull String globalFieldUid) {
+ this.globalFieldUid = globalFieldUid;
+ this.headers = new LinkedHashMap<>();
+ }
+
+ protected void setStackInstance(Stack stack) {
+ this.stackInstance = stack;
+ this.headers = stack.headers;
+ }
+
+ /**
+ * Sets header on {@link Stack}.
+ *
+ * @param headerKey
+ * the header key
+ * @param headerValue
+ * the header value
+ */
+ public void setHeader(String headerKey, String headerValue) {
+ if (!headerKey.isEmpty() && !headerValue.isEmpty()) {
+ this.headers.put(headerKey, headerValue);
+ }
+ }
+
+ /**
+ * Remove header from {@link Stack}
+ *
+ * @param headerKey
+ * the header key
+ */
+ public void removeHeader(String headerKey) {
+ if (!headerKey.isEmpty()) {
+ this.headers.remove(headerKey);
+ }
+ }
+
+ /**
+ * Fetch.
+ *
+ * @param params
+ * the params
+ * @param callback
+ * the callback
+ * @throws IllegalAccessException
+ * illegal access exception
+ */
+
+ public GlobalField includeBranch() {
+ this.params.put("include_branch", true);
+ return this;
+ }
+
+ public GlobalField includeGlobalFieldSchema() {
+ this.params.put("include_global_field_schema", true);
+ return this;
+ }
+
+ public void fetch(final GlobalFieldsCallback callback) throws IllegalAccessException {
+ String urlString = "global_fields/" + globalFieldUid;
+ if (globalFieldUid == null || globalFieldUid.isEmpty()) {
+ throw new IllegalAccessException("globalFieldUid is required");
+ }
+ fetchGlobalFields(urlString, this.params, this.headers, callback);
+ }
+
+ public void findAll(final GlobalFieldsCallback callback) {
+ String urlString = "global_fields";
+ fetchGlobalFields(urlString, this.params, this.headers, callback);
+ }
+
+ private void fetchGlobalFields(String urlString, JSONObject params, HashMap headers,
+ GlobalFieldsCallback callback) {
+ if (callback != null) {
+ HashMap urlParams = getUrlParams(params);
+ new CSBackgroundTask(this, stackInstance, Constants.FETCHGLOBALFIELDS, urlString, headers, urlParams,
+ Constants.REQUEST_CONTROLLER.GLOBALFIELDS.toString(), callback);
+ }
+ }
+
+ private HashMap getUrlParams(JSONObject urlQueriesJSON) {
+ HashMap hashMap = new HashMap<>();
+ if (urlQueriesJSON != null && urlQueriesJSON.length() > 0) {
+ Iterator itStr = urlQueriesJSON.keys();
+ while (itStr.hasNext()) {
+ String key = itStr.next();
+ Object value = urlQueriesJSON.opt(key);
+ hashMap.put(key, value);
+ }
+ }
+ return hashMap;
+ }
+}
diff --git a/src/main/java/com/contentstack/sdk/GlobalFieldsCallback.java b/src/main/java/com/contentstack/sdk/GlobalFieldsCallback.java
new file mode 100755
index 0000000..189e08a
--- /dev/null
+++ b/src/main/java/com/contentstack/sdk/GlobalFieldsCallback.java
@@ -0,0 +1,18 @@
+package com.contentstack.sdk;
+
+/**
+ * The callback for Content Types that contains GlobalFieldsModel and Error
+ */
+public abstract class GlobalFieldsCallback implements ResultCallBack {
+
+ public abstract void onCompletion(GlobalFieldsModel globalFieldsModel, Error error);
+
+ void onRequestFinish(GlobalFieldsModel globalFieldsModel) {
+ onCompletion(globalFieldsModel, null);
+ }
+
+ @Override
+ public void onRequestFail(ResponseType responseType, Error error) {
+ onCompletion(null, error);
+ }
+}
diff --git a/src/main/java/com/contentstack/sdk/GlobalFieldsModel.java b/src/main/java/com/contentstack/sdk/GlobalFieldsModel.java
new file mode 100644
index 0000000..aad19e0
--- /dev/null
+++ b/src/main/java/com/contentstack/sdk/GlobalFieldsModel.java
@@ -0,0 +1,59 @@
+package com.contentstack.sdk;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+/**
+ * The GlobalFieldsModel that contains global fields response
+ */
+public class GlobalFieldsModel {
+
+ private Object response;
+ private JSONArray responseJSONArray = new JSONArray();
+
+ public void setJSON(JSONObject responseJSON) {
+ if (responseJSON != null) {
+ String gfKey = "global_field";
+ if (responseJSON.has(gfKey) && responseJSON.opt(gfKey) instanceof LinkedHashMap) {
+ try {
+ this.response = new JSONObject((LinkedHashMap, ?>) responseJSON.get(gfKey));
+ } catch (Exception e) {
+ System.err.println("Error processing 'global_field': " + e.getMessage());
+ }
+ }
+ String gfListKey = "global_fields";
+ if (responseJSON.has(gfListKey) && responseJSON.opt(gfListKey) instanceof ArrayList) {
+ try {
+ ArrayList> globalFields = (ArrayList) responseJSON.get(gfListKey);
+ List