in response-datastore/response-server-service/src/main/java/com/google/cloud/healthcare/fdamystudies/controller/ProcessActivityResponseController.java [435:708]
public ResponseEntity<?> getActivityResponseDataForParticipant(
@RequestParam("appId") String applicationId,
@RequestParam("studyId") String studyId,
@RequestParam("siteId") String siteId,
@RequestParam("participantId") String participantId,
@RequestParam(AppConstants.PARTICIPANT_TOKEN_IDENTIFIER_KEY) String tokenIdentifier,
@RequestParam("activityId") String activityId,
@RequestParam("activityRunId") String activityRunId,
@RequestParam("questionKey") String questionKey,
@RequestHeader String userId,
HttpServletRequest request) {
logger.entry(String.format(BEGIN_REQUEST_LOG, request.getRequestURI()));
AuditLogEventRequest auditRequest = AuditEventMapper.fromHttpServletRequest(request);
try {
Locale locale = request.getLocale();
logger.debug(
"Input values are :\n Study Id: "
+ studyId
+ "\n Site Id: "
+ siteId
+ "\n Activity Id: "
+ activityId);
if (StringUtils.isBlank(applicationId)
|| StringUtils.isBlank(studyId)
|| StringUtils.isBlank(siteId)
|| StringUtils.isBlank(participantId)
|| StringUtils.isBlank(activityId)
|| StringUtils.isBlank(tokenIdentifier)) {
ErrorBean errorBean =
AppUtil.dynamicResponse(
ErrorCode.EC_701.code(),
ErrorCode.EC_701.errorMessage(),
AppConstants.ERROR_STR,
ErrorCode.EC_701.errorMessage());
return new ResponseEntity<>(errorBean, HttpStatus.BAD_REQUEST);
}
auditRequest.setAppId(applicationId);
auditRequest.setSiteId(siteId);
auditRequest.setStudyId(studyId);
auditRequest.setParticipantId(participantId);
// Check if participant is valid
ParticipantInfoEntity participantBo = new ParticipantInfoEntity();
participantBo.setTokenId(tokenIdentifier);
participantBo.setParticipantId(participantId);
if (participantService.isValidParticipant(participantBo)) {
List<SearchQuestionnaireResponseFhirBean> fhirBeans = new ArrayList<>();
if (appConfig.getEnableFhirApi().contains("fhir")
&& appConfig.getDiscardFhirAfterDid().equalsIgnoreCase("false")) {
String datasetPathforFHIR =
String.format(
DATASET_PATH, appConfig.getProjectId(), appConfig.getRegionId(), studyId);
StoredResponseBean storedResponseBean = null;
if (getresponsefhirApi.getfhirResource(
datasetPathforFHIR + FHIR_STORES + "FHIR_" + studyId)
!= null) {
String identifierValue = "";
String searchQuestionnaireJson = "";
if (!activityRunId.isEmpty()) {
identifierValue =
studyId
+ "@"
+ siteId
+ "@"
+ participantId
+ "@"
+ activityId
+ "@"
+ activityRunId;
searchQuestionnaireJson =
fhirhealthcareApis.fhirResourceSearchPost(
datasetPathforFHIR
+ FHIR_STORES
+ "FHIR_"
+ studyId
+ "/fhir/"
+ QUESTIONNAIRE_RESPONSE_TYPE,
"identifier=" + identifierValue);
SearchQuestionnaireResponseFhirBean searchResponseFhirbean =
new Gson()
.fromJson(searchQuestionnaireJson, SearchQuestionnaireResponseFhirBean.class);
fhirBeans.add(searchResponseFhirbean);
storedResponseBean = getresponsefhirApi.initStoredResponseBean();
storedResponseBean =
getresponsefhirApi.convertFhirResponseDataToBean(
participantId, fhirBeans, storedResponseBean, locale);
// return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
} else {
int runId = 1;
for (int i = 0; i < 50; i++) {
activityRunId = Integer.toString(runId);
identifierValue =
studyId
+ "@"
+ siteId
+ "@"
+ participantId
+ "@"
+ activityId
+ "@"
+ activityRunId;
searchQuestionnaireJson =
fhirhealthcareApis.fhirResourceSearchPost(
datasetPathforFHIR
+ FHIR_STORES
+ "FHIR_"
+ studyId
+ "/fhir/"
+ QUESTIONNAIRE_RESPONSE_TYPE,
"identifier=" + identifierValue);
SearchQuestionnaireResponseFhirBean searchResponseFhirbean =
new Gson()
.fromJson(
searchQuestionnaireJson, SearchQuestionnaireResponseFhirBean.class);
storedResponseBean = getresponsefhirApi.initStoredResponseBean();
if (searchResponseFhirbean != null && searchResponseFhirbean.getTotal() == 1) {
runId = runId + 1;
fhirBeans.add(searchResponseFhirbean);
} else {
// break;
runId = runId + 1;
}
}
storedResponseBean =
getresponsefhirApi.convertFhirResponseDataToBean(
participantId, fhirBeans, storedResponseBean, locale);
logger.debug("getresponse()storedResponseBean1", storedResponseBean.toString());
return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
}
// return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
}
logger.debug("getresponse()storedResponseBean2", storedResponseBean.toString());
return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
} else if (appConfig.getEnableFhirApi().contains("did")) {
String datasetPathforDID =
String.format(
DATASET_PATH, appConfig.getProjectId(), appConfig.getRegionId(), studyId);
StoredResponseBean storedResponseBean = null;
if (getresponsefhirApi.getfhirResource(datasetPathforDID + FHIR_STORES + "DID_" + studyId)
!= null) {
String identifierValue = "";
String searchQuestionnaireJson = "";
if (!activityRunId.isEmpty()) {
identifierValue =
studyId
+ "@"
+ siteId
+ "@"
+ participantId
+ "@"
+ activityId
+ "@"
+ activityRunId;
searchQuestionnaireJson =
fhirhealthcareApis.fhirResourceSearchPost(
datasetPathforDID
+ FHIR_STORES
+ "DID_"
+ studyId
+ "/fhir/"
+ QUESTIONNAIRE_RESPONSE_TYPE,
"identifier=" + identifierValue);
SearchQuestionnaireResponseFhirBean searchResponseFhirbean =
new Gson()
.fromJson(searchQuestionnaireJson, SearchQuestionnaireResponseFhirBean.class);
fhirBeans.add(searchResponseFhirbean);
storedResponseBean = getresponsefhirApi.initStoredResponseBean();
storedResponseBean =
getresponsefhirApi.convertFhirResponseDataToBean(
participantId, fhirBeans, storedResponseBean, locale);
} else {
int runId = 1;
for (int i = 0; i < 50; i++) {
activityRunId = Integer.toString(runId);
identifierValue =
studyId
+ "@"
+ siteId
+ "@"
+ participantId
+ "@"
+ activityId
+ "@"
+ activityRunId;
searchQuestionnaireJson =
fhirhealthcareApis.fhirResourceSearchPost(
datasetPathforDID
+ FHIR_STORES
+ "DID_"
+ studyId
+ "/fhir/"
+ QUESTIONNAIRE_RESPONSE_TYPE,
"identifier=" + identifierValue);
SearchQuestionnaireResponseFhirBean searchResponseFhirbean =
new Gson()
.fromJson(
searchQuestionnaireJson, SearchQuestionnaireResponseFhirBean.class);
storedResponseBean = getresponsefhirApi.initStoredResponseBean();
if (searchResponseFhirbean != null && searchResponseFhirbean.getTotal() == 1) {
runId = runId + 1;
fhirBeans.add(searchResponseFhirbean);
} else {
// break;
runId = runId + 1;
}
}
storedResponseBean =
getresponsefhirApi.convertFhirResponseDataToBean(
participantId, fhirBeans, storedResponseBean, locale);
logger.debug("getresponse()storedResponseBean3", storedResponseBean.toString());
return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
}
}
logger.debug("getresponse()storedResponseBean4", storedResponseBean.toString());
return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
} else {
StoredResponseBean storedResponseBean =
activityResponseProcessorService.getActivityResponseDataForParticipant(
studyId, siteId, participantId, activityId, questionKey);
responseServerAuditLogHelper.logEvent(
READ_OPERATION_FOR_RESPONSE_DATA_SUCCEEDED, auditRequest);
logger.debug("getresponse()storedResponseBean5", storedResponseBean.toString());
return new ResponseEntity<>(storedResponseBean, HttpStatus.OK);
}
} else {
ErrorBean errorBean =
AppUtil.dynamicResponse(
ErrorCode.EC_706.code(),
ErrorCode.EC_706.errorMessage(),
AppConstants.ERROR_STR,
"Could not get response data for participant.\n Study Id: "
+ studyId
+ "\n Site Id: "
+ siteId
+ "\n Activity Id: "
+ activityId
+ "\n Particpant Id: "
+ participantId);
logger.error(
"Could not get response data for participant.\n Study Id: "
+ studyId
+ "\n Site Id: "
+ siteId
+ "\n Activity Id: "
+ activityId);
responseServerAuditLogHelper.logEvent(
READ_OPERATION_FOR_RESPONSE_DATA_FAILED, auditRequest);
return new ResponseEntity<>(errorBean, HttpStatus.BAD_REQUEST);
}
} catch (Exception e) {
ErrorBean errorBean =
AppUtil.dynamicResponse(
ErrorCode.EC_708.code(),
ErrorCode.EC_708.errorMessage(),
AppConstants.ERROR_STR,
e.getMessage());
logger.error(
"Could not get response data for participant.\n Study Id: "
+ studyId
+ "\n Site Id: "
+ siteId
+ "\n Activity Id: "
+ activityId);
return new ResponseEntity<>(errorBean, HttpStatus.BAD_REQUEST);
}
}