protected final String doInBackground()

in Android/app/src/main/java/com/harvard/webservicemodule/apihelper/ApiCall.java [240:416]


  protected final String doInBackground(T... params) {

    String responseCode;
    ConnectionDetector connectionDetector = new ConnectionDetector(context);
    String response;
    if (connectionDetector.isConnectingToInternet()) {
      switch (webserviceType) {
        case "get":
          responseModel = HttpRequest.getRequest(urlPassed, headersData, serverType);
          break;
        case "put_json":
          responseModel =
              HttpRequest.makePutRequestWithJson(urlPassed, jsonData, headersData, serverType);
          break;
        case "post_hashmap":
          responseModel =
              HttpRequest.postRequestsWithHashmap(urlPassed, hashmapData, headersData, serverType);
          break;
        case "post_json":
          responseModel =
              HttpRequest.makePostRequestWithJson(urlPassed, jsonData, headersData, serverType);
          break;
        case "delete_json":
          responseModel =
              HttpRequest.makeDeleteRequestWithJson(urlPassed, jsonData, headersData, serverType);
          break;
      }
      responseCode = responseModel.getResponseCode();
      response = responseModel.getResponseData();
      if (responseCode.equalsIgnoreCase("0") && response.equalsIgnoreCase("timeout")) {
        response = "timeout";
      } else if (responseCode.equalsIgnoreCase("0") && response.equalsIgnoreCase("")) {
        response = "error";
      } else if (Integer.parseInt(responseCode) == HttpURLConnection.HTTP_UNAUTHORIZED) {
        response = "session expired";

        if (!this.serverType.equalsIgnoreCase("STUDY_DATASTORE")) {

          HashMap<String, String> refreshTokenJsonData = new HashMap();
          refreshTokenJsonData.put(
              "refresh_token",
              AppController.getHelperSharedPreference()
                  .readPreference(context, context.getString(R.string.refreshToken), ""));
          refreshTokenJsonData.put(
              "userId",
              SharedPreferenceHelper.readPreference(
                  context, context.getString(R.string.userid), ""));
          refreshTokenJsonData.put("redirect_uri", Urls.AUTH_SERVER_REDIRECT_URL);
          refreshTokenJsonData.put("client_id", BuildConfig.HYDRA_CLIENT_ID);
          refreshTokenJsonData.put("grant_type", "refresh_token");

          HashMap<String, String> refreshTokenHeader = new HashMap<>();
          refreshTokenHeader.put("Content-Type", "application/x-www-form-urlencoded");
          refreshTokenHeader.put("mobilePlatform", "ANDROID");
          refreshTokenHeader.put("correlationId", FdaApplication.getRandomString());

          String refreshTokenUrl = Urls.BASE_URL_AUTH_SERVER + Urls.TOKENS;
          responseModel =
              HttpRequest.postRequestsWithHashmap(
                  refreshTokenUrl, refreshTokenJsonData, refreshTokenHeader, "");
          String s = checkResponse(true, responseModel, HttpURLConnection.HTTP_FORBIDDEN);
          if (s.equalsIgnoreCase("success")) {
            if (headersData != null
                && (headersData.containsKey("Authorization") || headersData.containsKey("auth"))) {
              String s1 =
                  AppController.getHelperSharedPreference()
                      .readPreference(context, context.getString(R.string.auth), "");
              headersData.put("Authorization", "Bearer " + s1);
            }
            switch (webserviceType) {
              case "get":
                responseModel = HttpRequest.getRequest(urlPassed, headersData, serverType);
                break;
              case "put_json":
                responseModel =
                    HttpRequest.makePutRequestWithJson(
                        urlPassed, jsonData, headersData, serverType);
                break;
              case "post_hashmap":
                responseModel =
                    HttpRequest.postRequestsWithHashmap(
                        urlPassed, hashmapData, headersData, serverType);
                break;
              case "post_json":
                responseModel =
                    HttpRequest.makePostRequestWithJson(
                        urlPassed, jsonData, headersData, serverType);
                break;
              case "delete_json":
                responseModel =
                    HttpRequest.makeDeleteRequestWithJson(
                        urlPassed, jsonData, headersData, serverType);
                break;
            }
            response = checkResponse(false, responseModel, HttpURLConnection.HTTP_UNAUTHORIZED);
          } else if (s.equalsIgnoreCase("session expired")
              || s.equalsIgnoreCase("Unknown error")
              || s.equalsIgnoreCase("server error")
              || s.equalsIgnoreCase("client error")
              || s.equalsIgnoreCase("")
              || s.equalsIgnoreCase("No data")) {
            responseModel.setResponseCode("401");
            responseModel.setServermsg("session expired");
          }
        } else {
          responseModel.setResponseCode(String.valueOf(HttpURLConnection.HTTP_FORBIDDEN));
          responseModel.setServermsg(context.getString(R.string.invalid_client));
        }
      } else if (Integer.parseInt(responseCode) >= HttpURLConnection.HTTP_OK
          && Integer.parseInt(responseCode) < HttpURLConnection.HTTP_MULT_CHOICE
          && !response.equalsIgnoreCase("")) {
        response = "success";

        obj = parseJson(responseModel, genericClass);
        if (urlPassed.contains(Urls.BASE_URL_STUDY_DATASTORE + "/activity")) {
          try {
            ActivityInfoData activityInfoData = (ActivityInfoData) obj;
            JSONObject jsonObject = new JSONObject(responseModel.getResponseData());
            JSONObject jsonObjectActivity = jsonObject.getJSONObject("activity");
            JSONArray jsonArray = jsonObjectActivity.getJSONArray("steps");
            for (int i = 0; i < jsonArray.length(); i++) {
              JSONObject jsonObject2 = jsonArray.getJSONObject(i);
              JSONObject format = jsonObject2.getJSONObject("format");
              String key = jsonObject2.getString("key");
              String defaultString = null;
              try {
                Object defaultValue = format.get("default");
                defaultString = "";
                if (defaultValue instanceof Integer) {
                  defaultString = "" + (int) defaultValue;
                } else if (defaultValue instanceof Double) {
                  defaultString = "" + (double) defaultValue;
                } else if (defaultValue instanceof Long) {
                  defaultString = "" + (long) defaultValue;
                } else if (defaultValue instanceof String) {
                  defaultString = "" + (String) defaultValue;
                } else {
                  defaultString = "" + defaultValue;
                }
              } catch (JSONException e) {
                defaultString = "";
                Logger.log(e);
              }
              for (int k = 0; k < activityInfoData.getActivity().getSteps().size(); k++) {
                if (activityInfoData
                    .getActivity()
                    .getSteps()
                    .get(k)
                    .getKey()
                    .equalsIgnoreCase(key)) {
                  activityInfoData
                      .getActivity()
                      .getSteps()
                      .get(k)
                      .getFormat()
                      .setDefaultValue(defaultString);
                }
              }
            }
            obj = (T) activityInfoData;

          } catch (Exception e) {
            Logger.log(e);
          }
        }
      } else if (Integer.parseInt(responseCode) >= 400 && Integer.parseInt(responseCode) < 500) {
        response = "client error";
      } else if (Integer.parseInt(responseCode) >= 500 && Integer.parseInt(responseCode) < 600) {
        response = "server error";
      } else {
        response = "";
      }
    } else {
      return "No network";
    }
    return response;
  }