private JSONObject generateresult()

in Android/app/src/main/java/com/harvard/studyappmodule/SurveyCompleteActivity.java [220:571]


  private JSONObject generateresult(ActivityObj activityObj, String stringExtra) {

    try {
      JSONObject dataobj = new JSONObject();
      dataobj.put("startTime", activityObj.getMetadata().getStartDate());
      dataobj.put("endTime", activityObj.getMetadata().getEndDate());
      dataobj.put("resultType", activityObj.getType());
      dataobj.put("submittedTime", AppController.getDateFormatForApi().format(Calendar.getInstance().getTime()));

      JSONArray resultarray = new JSONArray();
      JsonParser jsonParser = new JsonParser();
      RealmResults<StepRecordCustom> stepRecord =
          realm.where(StepRecordCustom.class).equalTo("taskId", stringExtra).findAll();
      boolean formskipped = true;
      for (int i = 0; i < activityObj.getSteps().size(); i++) {
        for (int j = 0; j < stepRecord.size(); j++) {
          if (stepRecord
              .get(j)
              .getStepId()
              .equalsIgnoreCase(activityObj.getSteps().get(i).getKey())) {

            if (!activityObj.getSteps().get(i).getType().equalsIgnoreCase("task")) {
              JSONObject resultarrobj = new JSONObject();
              resultarrobj.put("resultType", activityObj.getSteps().get(i).getResultType());
              resultarrobj.put("key", activityObj.getSteps().get(i).getKey());

              resultarrobj.put(
                  "startTime",
                  AppController.getDateFormatForApi().format(stepRecord.get(j).getStarted()));
              resultarrobj.put(
                  "endTime",
                  AppController.getDateFormatForApi().format(stepRecord.get(j).getCompleted()));
              if (!activityObj.getSteps().get(i).getResultType().equalsIgnoreCase("grouped")) {
                if (stepRecord.get(j).getResult().equalsIgnoreCase("{}")) {
                  resultarrobj.put("skipped", true);
                  resultarrobj.put("value", "");
                } else {
                  if (stepRecord.get(j).getResult().equalsIgnoreCase("{\"answer\":[]}")) {
                    resultarrobj.put("skipped", true);
                  } else {
                    resultarrobj.put("skipped", false);
                  }
                  resultarrobj.put(
                      "value",
                      findPrimitiveData(
                          jsonParser.parse(stepRecord.get(j).getResult()), activityObj, i));
                }
              } else {
                Map<String, Object> map =
                    (Map<String, Object>)
                        parseData(jsonParser.parse(stepRecord.get(j).getResult()));
                JSONArray jsonArrayMain = new JSONArray();

                int k = 0;
                boolean update;
                boolean createResult = true;
                while (createResult) {
                  JSONArray jsonArray = new JSONArray();
                  update = false;
                  for (Map.Entry<String, Object> entry : map.entrySet()) {
                    Map<String, Object> mapEntry = (Map<String, Object>) entry.getValue();
                    JSONObject jsonObject = new JSONObject();
                    String identifier = (String) mapEntry.get("identifier");
                    if (k == 0) {
                      if (!identifier.contains("_addMoreEnabled")) {
                        for (int c = 0; c < activityObj.getSteps().size(); c++) {
                          if (activityObj.getSteps().get(c).getSteps().size() > 0) {
                            for (int c1 = 0;
                                c1 < activityObj.getSteps().get(c).getSteps().size();
                                c1++) {
                              if (activityObj
                                  .getSteps()
                                  .get(c)
                                  .getSteps()
                                  .get(c1)
                                  .getKey()
                                  .equalsIgnoreCase((String) mapEntry.get("identifier"))) {
                                jsonObject.put(
                                    "resultType",
                                    activityObj
                                        .getSteps()
                                        .get(c)
                                        .getSteps()
                                        .get(c1)
                                        .getResultType());
                              }
                            }
                          }
                        }
                        jsonObject.put("key", mapEntry.get("identifier"));
                        jsonObject.put("startTime", mapEntry.get("startDate"));
                        jsonObject.put("endTime", mapEntry.get("endDate"));

                        Map<String, Object> mapEntryResult =
                            (Map<String, Object>) mapEntry.get("results");
                        Object o = mapEntryResult.get("answer");
                        if (o instanceof Object[]) {
                          Object[] objects = (Object[]) o;
                          if (objects.length > 0) {
                            if (objects[0] instanceof Integer) {
                              JSONArray jsonArray1 = new JSONArray();
                              for (int l = 0; l < objects.length; l++) {
                                for (int c = 0; c < activityObj.getSteps().size(); c++) {
                                  if (activityObj.getSteps().get(c).getSteps().size() > 0) {
                                    for (int c1 = 0;
                                        c1 < activityObj.getSteps().get(c).getSteps().size();
                                        c1++) {
                                      if (activityObj
                                          .getSteps()
                                          .get(c)
                                          .getSteps()
                                          .get(c1)
                                          .getKey()
                                          .equalsIgnoreCase((String) mapEntry.get("identifier"))) {
                                        jsonArray1.put(
                                            activityObj
                                                .getSteps()
                                                .get(c)
                                                .getSteps()
                                                .get(c1)
                                                .getFormat()
                                                .getTextChoices()
                                                .get((int) objects[l])
                                                .getValue());
                                      }
                                    }
                                  }
                                }
                              }
                              jsonObject.put("value", jsonArray1);
                            } else if (objects[0] instanceof String) {
                              JSONArray jsonArray1 = new JSONArray();
                              for (int l = 0; l < objects.length; l++) {
                                jsonArray1.put((String) objects[l]);
                              }
                              jsonObject.put("value", jsonArray1);
                            }
                          } else {
                            jsonObject.put("value", new JSONArray());
                          }
                        } else {
                          jsonObject.put("value", mapEntryResult.get("answer"));
                        }

                        try {
                          if (jsonObject.get("value") == null) {
                            resultarrobj.put("skipped", true);
                            jsonObject.put("skipped", true);
                          } else if (jsonObject.get("value").toString().equalsIgnoreCase("")) {
                            resultarrobj.put("skipped", true);
                            jsonObject.put("skipped", true);
                          } else if (jsonObject.get("value").toString().equalsIgnoreCase("[]")) {
                            resultarrobj.put("skipped", true);
                            jsonObject.put("skipped", true);
                          } else {
                            resultarrobj.put("skipped", false);
                            jsonObject.put("skipped", false);
                            formskipped = false;
                          }
                        } catch (JSONException e) {
                          Logger.log(e);
                          resultarrobj.put("skipped", true);
                          jsonObject.put("skipped", true);
                        }

                        jsonArray.put(jsonObject);
                        update = true;
                      }
                    } else if (identifier.contains(k + "_addMoreEnabled")) {
                      for (int c = 0; c < activityObj.getSteps().size(); c++) {
                        if (activityObj.getSteps().get(c).getSteps().size() > 0) {
                          for (int c1 = 0;
                              c1 < activityObj.getSteps().get(c).getSteps().size();
                              c1++) {
                            if (activityObj
                                .getSteps()
                                .get(c)
                                .getSteps()
                                .get(c1)
                                .getKey()
                                .equalsIgnoreCase((String) mapEntry.get("identifier"))) {
                              jsonObject.put(
                                  "resultType",
                                  activityObj.getSteps().get(c).getSteps().get(c1).getResultType());
                            }
                          }
                        }
                      }
                      jsonObject.put(
                          "key",
                          mapEntry
                              .get("identifier")
                              .toString()
                              .substring(
                                  0, mapEntry.get("identifier").toString().lastIndexOf("-")));
                      jsonObject.put("startTime", mapEntry.get("startDate"));
                      jsonObject.put("endTime", mapEntry.get("endDate"));
                      jsonObject.put("skipped", false);
                      Map<String, Object> mapEntryResult =
                          (Map<String, Object>) mapEntry.get("results");
                      Object o = mapEntryResult.get("answer");
                      if (o instanceof Object[]) {
                        Object[] objects = (Object[]) o;
                        if (objects.length > 0) {
                          if (objects[0] instanceof Integer) {
                            JSONArray jsonArray1 = new JSONArray();
                            for (int l = 0; l < objects.length; l++) {
                              for (int c = 0; c < activityObj.getSteps().size(); c++) {
                                if (activityObj.getSteps().get(c).getSteps().size() > 0) {
                                  for (int c1 = 0;
                                      c1 < activityObj.getSteps().get(c).getSteps().size();
                                      c1++) {
                                    if (activityObj
                                        .getSteps()
                                        .get(c)
                                        .getSteps()
                                        .get(c1)
                                        .getKey()
                                        .equalsIgnoreCase((String) mapEntry.get("identifier"))) {
                                      jsonArray1.put(
                                          activityObj
                                              .getSteps()
                                              .get(c)
                                              .getSteps()
                                              .get(c1)
                                              .getFormat()
                                              .getTextChoices()
                                              .get((int) objects[l])
                                              .getValue());
                                    }
                                  }
                                }
                              }
                            }
                            jsonObject.put("value", jsonArray1);
                          } else if (objects[0] instanceof String) {
                            JSONArray jsonArray1 = new JSONArray();
                            for (int l = 0; l < objects.length; l++) {
                              jsonArray1.put((String) objects[l]);
                            }
                            jsonObject.put("value", jsonArray1);
                          }
                        } else {
                          jsonObject.put("value", new JSONArray());
                        }
                      } else {
                        jsonObject.put("value", mapEntryResult.get("answer"));
                      }

                      try {
                        if (jsonObject.get("value") == null) {
                          resultarrobj.put("skipped", true);
                          jsonObject.put("skipped", true);
                        } else if (jsonObject.get("value").toString().equalsIgnoreCase("")) {
                          resultarrobj.put("skipped", true);
                          jsonObject.put("skipped", true);
                        } else if (jsonObject.get("value").toString().equalsIgnoreCase("[]")) {
                          resultarrobj.put("skipped", true);
                          jsonObject.put("skipped", true);
                        } else {
                          resultarrobj.put("skipped", false);
                          jsonObject.put("skipped", false);
                          formskipped = false;
                        }
                      } catch (JSONException e) {
                        Logger.log(e);
                        resultarrobj.put("skipped", true);
                        jsonObject.put("skipped", true);
                      }

                      jsonArray.put(jsonObject);
                      update = true;
                    }
                  }
                  k = k + jsonArray.length();
                  if (update) {
                    jsonArrayMain.put(jsonArray);
                  } else {
                    createResult = false;
                  }
                }
                if (formskipped) {
                  resultarrobj.put("skipped", true);
                  resultarrobj.put("value", new JSONArray());
                } else {
                  resultarrobj.put("skipped", false);
                  resultarrobj.put("value", jsonArrayMain);
                }
              }
              resultarray.put(resultarrobj);

              dataobj.put("results", resultarray);
            } else {

              JSONObject durationobj = new JSONObject();
              durationobj.put("resultType", "numeric");
              durationobj.put("key", "duration");
              durationobj.put("startTime", null);
              durationobj.put("endTime", null);
              if (stepRecord.get(j).getResult().equalsIgnoreCase("{}")) {
                durationobj.put("skipped", true);
              } else {
                durationobj.put("skipped", false);
              }
              JSONObject activejsonObject = new JSONObject(stepRecord.get(j).getResult());
              JSONObject answerjsonobj = activejsonObject.getJSONObject("answer");
              durationobj.put("value", answerjsonobj.getString("duration"));

              JSONObject valueobj = new JSONObject();
              valueobj.put("resultType", "numeric");
              valueobj.put("key", "count");
              valueobj.put("startTime", null);
              valueobj.put("endTime", null);
              if (stepRecord.get(j).getResult().equalsIgnoreCase("{}")) {
                valueobj.put("skipped", true);
              } else {
                valueobj.put("skipped", false);
              }
              valueobj.put("value", answerjsonobj.getInt("value"));

              resultarray.put(durationobj);
              resultarray.put(valueobj);

              JSONObject jsonObject = new JSONObject();
              jsonObject.put("value", resultarray);
              jsonObject.put(
                  "startTime",
                  AppController.getDateFormatForApi().format(stepRecord.get(j).getStarted()));
              jsonObject.put(
                  "endTime",
                  AppController.getDateFormatForApi().format(stepRecord.get(j).getCompleted()));
              jsonObject.put("resultType", "grouped");
              jsonObject.put("key", activityObj.getSteps().get(i).getKey());
              if (stepRecord.get(j).getResult().equalsIgnoreCase("{}")) {
                jsonObject.put("skipped", true);
              } else {
                jsonObject.put("skipped", false);
              }
              JSONArray jsonArray = new JSONArray();
              jsonArray.put(jsonObject);

              dataobj.put("results", jsonArray);
            }
          }
        }
      }
      return dataobj;
    } catch (JSONException e) {
      Logger.log(e);
    }
    return new JSONObject();
  }