public ResponseEntity getActivityResponseDataForParticipant()

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);
    }
  }