I have a Java Program which has Completable Future. It does async calls. I do not want this. I want to convert this to normal.
When this method is being called, then there is completable future which is used. Need to get rid of of completable future.
I can provide other information also, if needed. Can I simply remove futures.add(CompletableFuture.supplyAsync(() from the code? How to handle response and error?
private void getClockRequestList(String createdBy, String capacityType, List<CompletableFuture<String>> futures,
ResourceHierarchy rA, int[] clock_ids, Boolean checkIfCreatingClock, String url)
throws JsonProcessingException {
for (int clockid : clock_ids) {
String clockRequest = requestMapperImpl.getClockRequest(createdBy, capacityType, String.valueOf(clockid),
rA, checkIfCreatingClock);
futures.add(CompletableFuture.supplyAsync(() -> {
String response = null;
try {
response = genericRestClientImp.httpPostData(clockRequest, url);
logger.info("Response from EAM is: {}",response);
} catch (IOException error) {
logger.error(error);
throw new RuntimeException(error);
}
logger.info("Response from EAM is: {}",response);
return response;
}).handle((response, error) -> {
if (response != null) {
if (checkIfCreatingClock) {
if (response.contains(AppConstant.FAILURE_MSG)) {
logger.info(responseMapperImpl.responseMessageClock(AppConstant.FAILURE, response, rA,
clockid));
return responseMapperImpl.responseMessageClock(AppConstant.FAILURE, response, rA, clockid);
}
else if (response.contains(AppConstant.STATUS_404)) {
logger.info(responseMapperImpl.responseMessageClock(AppConstant.STATUS_404, response, rA,
clockid));
return responseMapperImpl.responseMessageClock(AppConstant.STATUS_404, response, rA,
clockid);
} else if (response.contains(AppConstant.SUCCESS_MSG)) {
logger.info(responseMapperImpl.responseMessageClock(AppConstant.SUCCESS, response, rA,
clockid));
return responseMapperImpl.responseMessageClock(AppConstant.SUCCESS, response, rA, clockid);
} else {
logger.info(
responseMapperImpl.responseMessageClock(AppConstant.ERROR, response, rA, clockid));
return responseMapperImpl.responseMessageClock(AppConstant.ERROR, response, rA, clockid);
}
} else {
if (response.contains(AppConstant.SUCCESS)
|| response.contains(StringUtils.capitalize(AppConstant.SUCCESS))) {
logger.info(responseMapperImpl.responseMessageTotalCapacity(AppConstant.SUCCESS, response,
rA, clockid));
return responseMapperImpl.responseMessageTotalCapacity(AppConstant.SUCCESS, response, rA,
clockid);
} else if (response.contains(AppConstant.FAILURE)
|| response.contains(StringUtils.capitalize(AppConstant.FAILURE))) {
logger.info(responseMapperImpl.responseMessageTotalCapacity(AppConstant.FAILURE, response, rA,
clockid));
return responseMapperImpl.responseMessageTotalCapacity(AppConstant.FAILURE, response, rA, clockid);
}
else {
logger.info(responseMapperImpl.responseMessageTotalCapacity(AppConstant.ERROR, response, rA,
clockid));
return responseMapperImpl.responseMessageTotalCapacity(AppConstant.ERROR, response, rA,
clockid);
}
}
} else {
ErrorResponse errorResponse = new ErrorResponse();
ResponseStatusMsg responseStatusMsg = new ResponseStatusMsg();
responseStatusMsg.setStatusCode(HttpStatus.NOT_FOUND.value());
errorResponse.setClockId(clockid);
errorResponse.setResourceId(rA.getResourceID());
responseStatusMsg.setError("Failure in getting response from the "+url);
errorResponse.setResponse(responseStatusMsg);
List<ErrorResponse> errorList = new ArrayList();
errorList.add(errorResponse);
responseObject.setError(errorList);
logger.info(responseObject.toString());
return responseObject.toString();
}
}));
}
}