From e41751573a194e4e263b91a065eb43121dc3b20f Mon Sep 17 00:00:00 2001 From: reeshika-h Date: Tue, 2 Sep 2025 11:21:25 +0530 Subject: [PATCH] Refactor error handling to use ErrorMessages constants for consistency in Contentstack, InvalidInputException, JSONUTF8Request, and NodeToHTML classes --- .../com/contentstack/sdk/Contentstack.java | 2 +- .../com/contentstack/sdk/ErrorMessages.java | 33 +++++++++++++++++++ .../sdk/InvalidInputException.java | 2 +- .../com/contentstack/sdk/JSONUTF8Request.java | 4 +-- .../java/com/contentstack/sdk/NodeToHTML.java | 2 +- 5 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 contentstack/src/main/java/com/contentstack/sdk/ErrorMessages.java diff --git a/contentstack/src/main/java/com/contentstack/sdk/Contentstack.java b/contentstack/src/main/java/com/contentstack/sdk/Contentstack.java index 97fe6402..5d10650e 100755 --- a/contentstack/src/main/java/com/contentstack/sdk/Contentstack.java +++ b/contentstack/src/main/java/com/contentstack/sdk/Contentstack.java @@ -27,7 +27,7 @@ public class Contentstack { private static Contentstack instance; private Contentstack(Context context) { - throw new IllegalStateException("Private constructor not allowed"); + throw new IllegalStateException(ErrorMessages.PRIVATE_CONSTRUCTOR_NOT_ALLOWED); } /** diff --git a/contentstack/src/main/java/com/contentstack/sdk/ErrorMessages.java b/contentstack/src/main/java/com/contentstack/sdk/ErrorMessages.java new file mode 100644 index 00000000..d80a7880 --- /dev/null +++ b/contentstack/src/main/java/com/contentstack/sdk/ErrorMessages.java @@ -0,0 +1,33 @@ +package com.contentstack.sdk; + +/** + * Contains all error messages used across the SDK. + * Centralizing messages here makes it easier to maintain and update them. + */ +public final class ErrorMessages { + private ErrorMessages() { + throw new IllegalStateException("Utility class - do not instantiate"); + } + + // Constructor related errors + public static final String PRIVATE_CONSTRUCTOR_NOT_ALLOWED = + "This class does not support private constructors. Use a public constructor to create an instance."; + public static final String UTILITY_CLASS_INSTANTIATION = + "This is a utility class and cannot be instantiated"; + public static final String NODE_TO_HTML_INSTANTIATION = + "Failed to create an instance of NodeToHTML, you can directly access the methods of this class"; + + // Input validation errors + public static final String NULL_OR_EMPTY_INPUT = + "The input value cannot be null or empty. Provide a valid string to continue."; + + // Network and parsing errors + public static final String ENCODING_ERROR = + "The system encountered an encoding issue while processing your request. Try again or contact support."; + public static final String JSON_PARSING_ERROR = + "We couldn't process the response due to a data formatting issue. Try again or contact support if the problem persists."; + + // Cache related errors + public static final String CACHE_INITIALIZATION_ERROR = + "Failed to initialize cache. The application will continue without caching."; +} diff --git a/contentstack/src/main/java/com/contentstack/sdk/InvalidInputException.java b/contentstack/src/main/java/com/contentstack/sdk/InvalidInputException.java index 37720f1f..950a1018 100644 --- a/contentstack/src/main/java/com/contentstack/sdk/InvalidInputException.java +++ b/contentstack/src/main/java/com/contentstack/sdk/InvalidInputException.java @@ -13,7 +13,7 @@ * * public void processInput(String input) throws InvalidInputException { * if (input == null || input.isEmpty()) { - * throw new InvalidInputException("Input cannot be null or empty"); + * throw new InvalidInputException(ErrorMessages.NULL_OR_EMPTY_INPUT); * } * // Process the input here * } diff --git a/contentstack/src/main/java/com/contentstack/sdk/JSONUTF8Request.java b/contentstack/src/main/java/com/contentstack/sdk/JSONUTF8Request.java index d9bc6913..40486733 100755 --- a/contentstack/src/main/java/com/contentstack/sdk/JSONUTF8Request.java +++ b/contentstack/src/main/java/com/contentstack/sdk/JSONUTF8Request.java @@ -24,9 +24,9 @@ protected Response parseNetworkResponse(NetworkResponse response) { String jsonString = new String(response.data, "UTF-8"); return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { - return Response.error(new ParseError(e)); + return Response.error(new ParseError(new UnsupportedEncodingException(ErrorMessages.ENCODING_ERROR))); } catch (JSONException je) { - return Response.error(new ParseError(je)); + return Response.error(new ParseError(new JSONException(ErrorMessages.JSON_PARSING_ERROR))); } } diff --git a/contentstack/src/main/java/com/contentstack/sdk/NodeToHTML.java b/contentstack/src/main/java/com/contentstack/sdk/NodeToHTML.java index e290582a..21e9e632 100644 --- a/contentstack/src/main/java/com/contentstack/sdk/NodeToHTML.java +++ b/contentstack/src/main/java/com/contentstack/sdk/NodeToHTML.java @@ -4,7 +4,7 @@ public class NodeToHTML { private NodeToHTML() { - throw new IllegalStateException("Could not create instance of NodeToHTML"); + throw new IllegalStateException(ErrorMessages.NODE_TO_HTML_INSTANTIATION); } public static String textNodeToHTML(JSONObject nodeText, Option renderOption) { String text = nodeText.optString("text");