FINERACT-2333: Batch API - Support date format: from array to string

This commit is contained in:
Adam Saghy
2025-07-28 19:06:48 +02:00
parent 52be53778d
commit ab8bb930ec
2 changed files with 110 additions and 11 deletions
@@ -25,6 +25,8 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.ReadContext;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -134,7 +136,7 @@ public class ResolutionHelper {
// parameter
for (Map.Entry<String, JsonElement> element : jsonRequestBody.entrySet()) {
final String key = element.getKey();
final JsonElement value = resolveDependentVariables(element.getValue(), responseCtx);
final JsonElement value = resolveDependentVariables(element.getValue(), requestBody, responseCtx);
jsonResultBody.add(key, value);
}
// Set the body after dependency resolution
@@ -163,44 +165,51 @@ public class ResolutionHelper {
return request;
}
private JsonElement resolveDependentVariables(final JsonElement jsonElement, final ReadContext responseCtx) {
private JsonElement resolveDependentVariables(final JsonElement jsonElement, final String requestBody, final ReadContext responseCtx) {
JsonElement value;
if (jsonElement.isJsonObject()) {
final JsonObject jsObject = jsonElement.getAsJsonObject();
value = processJsonObject(jsObject, responseCtx);
value = processJsonObject(jsObject, requestBody, responseCtx);
} else if (jsonElement.isJsonArray()) {
final JsonArray jsElementArray = jsonElement.getAsJsonArray();
value = processJsonArray(jsElementArray, responseCtx);
value = processJsonArray(jsElementArray, requestBody, responseCtx);
} else if (jsonElement.isJsonNull()) {
// No further processing of null values
value = jsonElement;
} else {
value = processJsonPrimitive(jsonElement, responseCtx);
value = processJsonPrimitive(jsonElement, requestBody, responseCtx);
}
return value;
}
private JsonElement processJsonObject(final JsonObject jsObject, final ReadContext responseCtx) {
private JsonElement processJsonObject(final JsonObject jsObject, final String requestBody, final ReadContext responseCtx) {
JsonObject valueObj = new JsonObject();
for (Map.Entry<String, JsonElement> element : jsObject.entrySet()) {
valueObj.add(element.getKey(), resolveDependentVariables(element.getValue(), responseCtx));
valueObj.add(element.getKey(), resolveDependentVariables(element.getValue(), requestBody, responseCtx));
}
return valueObj;
}
private JsonArray processJsonArray(final JsonArray elementArray, final ReadContext responseCtx) {
private JsonArray processJsonArray(final JsonArray elementArray, final String requestBody, final ReadContext responseCtx) {
JsonArray valueArr = new JsonArray();
for (JsonElement element : elementArray) {
valueArr.add(resolveDependentVariables(element, responseCtx));
valueArr.add(resolveDependentVariables(element, requestBody, responseCtx));
}
return valueArr;
}
private JsonElement processJsonPrimitive(final JsonElement element, final ReadContext responseCtx) {
private JsonElement processJsonPrimitive(final JsonElement element, final String requestBody, final ReadContext responseCtx) {
JsonElement value = element;
if (element instanceof JsonPrimitive) {
String paramVal = element.getAsString();
if (paramVal.contains("$.")) {
if (paramVal.contains("$[ARRAYDATE]")) {
String resolvableParamVal = paramVal.replace("$[ARRAYDATE]", "$");
final String resParamValue = responseCtx.read(resolvableParamVal).toString();
JsonArray date = (JsonArray) this.fromJsonHelper.parse(resParamValue);
String dateFormat = JsonPath.read(requestBody, "$.dateFormat");
return new JsonPrimitive(DateTimeFormatter.ofPattern(dateFormat)
.format(LocalDate.of(date.get(0).getAsInt(), date.get(1).getAsInt(), date.get(2).getAsInt())));
} else if (paramVal.contains("$.")) {
// Get the value of the parameter from parent response
final String resParamValue = responseCtx.read(paramVal).toString();
value = this.fromJsonHelper.parse(resParamValue);