FINERACT-2333: Batch API - Support date format: from array to string
This commit is contained in:
+20
-11
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user