/**
   * This method is used to set scored questions data.
   *
   * @param scoredQuestionsData
   * @param sortableTable
   * @param isPrint
   */
  void setSortedData(
      ArrayList<UserDataDo> scoredQuestionsData, SortTable sortableTable, boolean isPrint) {
    for (int i = 1; i <= scoredQuestionsData.size(); i++) {
      sortableTable.setValue(i, 0, scoredQuestionsData.get(i - 1).getItemSequence());
      Label questionTitle =
          new Label(
              AnalyticsUtil.html2text(
                  scoredQuestionsData.get(i - 1).getTitle() != null
                      ? scoredQuestionsData.get(i - 1).getTitle()
                      : ""));
      questionTitle.setStyleName(res.css().alignCenterAndBackground());
      questionTitle.addStyleName(res.css().alignLeft());
      sortableTable.setWidget(i, 1, questionTitle);
      VerticalPanel answerBreakDownpnl = new VerticalPanel();
      if (scoredQuestionsData.get(i - 1).getType() != null) {
        String getQuestionType = scoredQuestionsData.get(i - 1).getType();
        if (MC.equalsIgnoreCase(getQuestionType)
            || TF.equalsIgnoreCase(getQuestionType)
            || TSLASHF.equalsIgnoreCase(getQuestionType)) {
          if ((scoredQuestionsData.get(i - 1).getMetaData() != null)
              && (scoredQuestionsData.get(i - 1).getMetaData().size() != 0)) {
            int metaDataSize = scoredQuestionsData.get(i - 1).getMetaData().size();
            int totalcount = scoredQuestionsData.get(i - 1).getAttempts();
            for (int j = 0; j < metaDataSize; j++) {
              MetaDataDo metaData = scoredQuestionsData.get(i - 1).getMetaData().get(j);
              HorizontalPanel datagrap = new HorizontalPanel();
              Label tickmarklbl = new Label();
              tickmarklbl.setStyleName(res.css().tickMarkImgCss());
              datagrap.add(tickmarklbl);
              String questionSequence = AnalyticsUtil.getCharForNumber(metaData.getSequence() - 1);
              int attemptCount = 0;
              Label sequenceCharlbl = new Label(questionSequence + ")");
              sequenceCharlbl.setStyleName(res.css().barGraphCharacter());
              datagrap.add(sequenceCharlbl);
              if (scoredQuestionsData.get(i - 1).getOptions() != null) {
                Map<String, Integer> authorObject = scoredQuestionsData.get(i - 1).getOptions();
                /*JSONValue value = JSONParser.parseStrict(scoredQuestionsData.get(i-1).getOptions().toString());
                JSONObject authorObject = value.isObject();*/
                if (authorObject.keySet().size() != 0
                    && authorObject.get(questionSequence) != null) {
                  attemptCount = (int) authorObject.get(questionSequence).doubleValue();
                }
              }

              Label progressBarlbl = new Label("");
              if (metaData.getIsCorrect() == 1) {
                tickmarklbl.addStyleName(res.css().tickMarkImg());
                progressBarlbl.addStyleName(res.css().assignment_quesiton_ans_bar());
              } else {
                progressBarlbl.addStyleName(res.css().wrongSelectStyle());
              }
              float setWidth = ((float) attemptCount / (float) totalcount) * 100;
              setWidth = (setWidth == 0.0 ? 1 : setWidth);
              progressBarlbl.getElement().getStyle().setWidth(setWidth, Unit.PX);
              datagrap.add(progressBarlbl);

              Label countlbl = new Label("(" + attemptCount + ")");
              datagrap.add(countlbl);
              answerBreakDownpnl.add(datagrap);
            }
          }
        } else if ((OE.equalsIgnoreCase(getQuestionType)
                || FIB.equalsIgnoreCase(getQuestionType)
                || MA.equalsIgnoreCase(getQuestionType))
            && !isPrint) {
          Label viewResponselbl = new Label(i18n.GL2286());
          viewResponselbl.getElement().setAttribute("labelType", "View Response");
          viewResponselbl
              .getElement()
              .setAttribute(
                  "resourceGooruId", scoredQuestionsData.get(i - 1).getResourceGooruOId());
          viewResponselbl
              .getElement()
              .setAttribute("questionType", scoredQuestionsData.get(i - 1).getType());
          viewResponselbl.setStyleName(res.css().viewResponseTextOpended());
          viewResponselbl.addClickHandler(new ClickOnTableCell());
          answerBreakDownpnl.add(viewResponselbl);
        }

        sortableTable.setWidget(i, 3, answerBreakDownpnl);
        sortableTable.setValue(
            i,
            4,
            AnalyticsUtil.getTimeStampLabel(scoredQuestionsData.get(i - 1).getAvgTimeSpent())
                .getText());
        sortableTable.setWidget(
            i, 5, new AnalyticsReactionWidget(scoredQuestionsData.get(i - 1).getAvgReaction()));

        int[] pieChatValues = new int[4];
        pieChatValues[0] = scoredQuestionsData.get(i - 1).getTotalInCorrectCount();
        pieChatValues[1] = scoredQuestionsData.get(i - 1).getTotalCorrectCount();
        pieChatValues[2] = scoredQuestionsData.get(i - 1).getSkip();
        pieChatValues[3] = pieChatValues[0] + pieChatValues[1] + pieChatValues[2];

        // set row style
        if (i % 2 == 0) {
          sortableTable.getRowFormatter().addStyleName(i, res.css().tableRowOdd());
          sortableTable.setWidget(
              i, 2, new HCBarChart().pieChart("#fafafa", pieChatValues, isPrint));
        } else {
          sortableTable.getRowFormatter().addStyleName(i, res.css().tableRowEven());
          sortableTable.setWidget(i, 2, new HCBarChart().pieChart("#fff", pieChatValues, isPrint));
        }
      }
    }
  }
  /**
   * This method is used to set opended question data.
   *
   * @param result
   */
  void setOpenendedQuestionsData(ArrayList<UserDataDo> result) {

    int totalUserCount = collectionMetaData.getUserCount();

    final AdvancedFlexTable adTable = new AdvancedFlexTable();
    adTable.getElement().setAttribute("style", "background: #fff; width: 1000px;");

    adTable.setHeaderWidget(0, getHeaderLbl(i18n.GL3259(), 25));
    adTable.setHeaderWidget(1, getHeaderLbl(i18n.GL0308(), 35));
    adTable.setHeaderWidget(2, getHeaderLbl(i18n.GL3260(), 500));
    adTable.setHeaderWidget(3, getHeaderLbl(i18n.GL2084(), 70));
    adTable.setHeaderWidget(4, getHeaderLbl(i18n.GL3261(), 30));
    adTable.setHeaderWidget(5, getHeaderLbl(i18n.GL3273(), 80));

    if (result.size() != 0) {

      for (int i = 0; i < result.size(); i++) {
        adTable.setWidget(i, 0, new Label(String.valueOf(result.get(i).getItemSequence())));

        // Set Question Title
        Label questionTitle = new Label(AnalyticsUtil.html2text(result.get(i).getTitle()));
        questionTitle.setStyleName(res.css().alignCenterAndBackground());
        questionTitle.addStyleName(res.css().alignLeft());
        adTable.setWidget(i, 1, questionTitle);

        // Set completion
        HTMLPanel completionpnl = new HTMLPanel("");
        Label progressBar = new Label();
        progressBar.setStyleName(res.css().setProgressBar());
        completionpnl.add(progressBar);
        Label incompleteProgressBar = new Label();
        incompleteProgressBar.setStyleName(res.css().setIncorrectProgressBar());
        completionpnl.add(incompleteProgressBar);
        int attemptedCount = result.get(i).getTotalAttemptUserCount();
        float maxAvgVal = ((float) attemptedCount) / ((float) totalUserCount);
        progressBar.getElement().getStyle().setWidth(maxAvgVal * 100, Unit.PX);
        incompleteProgressBar.getElement().getStyle().setWidth((100 - maxAvgVal * 100), Unit.PX);
        Label studentTextlbl = new Label(attemptedCount + "/" + totalUserCount + " Students");
        studentTextlbl.setStyleName(res.css().alignCenterAndBackground());
        studentTextlbl.getElement().getStyle().setWidth(100, Unit.PX);
        completionpnl.add(studentTextlbl);
        adTable.setWidget(i, 2, completionpnl);

        // Set time spent
        adTable.setWidget(i, 3, AnalyticsUtil.getTimeStampLabel(result.get(i).getAvgTimeSpent()));

        // Set reactions
        int reaction = result.get(i).getAvgReaction();
        HTMLPanel reactionpnl = new HTMLPanel("");
        reactionpnl.add(new AnalyticsReactionWidget(reaction));
        Label reactioncount = new Label();
        reactionpnl.add(reactioncount);
        reactioncount.setText(reaction + "/5");
        reactioncount.setStyleName(res.css().alignCenterAndBackground());
        adTable.setWidget(i, 4, reactionpnl);

        // set View response label
        Label viewResponselbl = new Label(i18n.GL2286());
        viewResponselbl.setStyleName(res.css().viewResponseTextOpended());
        viewResponselbl
            .getElement()
            .setAttribute("resourceGooruId", result.get(i).getResourceGooruOId());
        viewResponselbl.getElement().setAttribute("questionType", result.get(i).getType());
        viewResponselbl.getElement().setAttribute("labelType", "View Response");
        adTable.setWidget(i, 5, viewResponselbl);
      }
    }

    adTable.getElement().setId("opendedData");
    teacherOpenendedData.add(adTable);
    if (result.size() == 0) {
      Label erroeMsg = new Label();
      erroeMsg.setStyleName(res.css().displayMessageTextForOEQuestions());
      erroeMsg.setText(i18n.GL3118());
      teacherOpenendedData.add(erroeMsg);
    }
    adTable.addDomHandler(new ClickOnTableCell(), ClickEvent.getType());
    adTable
        .getElement()
        .getFirstChildElement()
        .getFirstChildElement()
        .getFirstChildElement()
        .getStyle()
        .setProperty("width", "98% !important");
  }