/**
  * This method is used to print scored questions data
  *
  * @param scoredQuestionsData
  */
 void setQuestionsPrintData(ArrayList<UserDataDo> scoredQuestionsData) {
   scoredPrintWidget.clear();
   final SortTable sortableTable = new SortTable();
   sortableTable.setStyleName(res.css().tableMain());
   sortableTable.getElement().setId("results");
   sortableTable.setBorderWidth(1);
   sortableTable.setCellPadding(4);
   sortableTable.setCellSpacing(1);
   sortableTable.addColumnHeader(i18n.GL3259(), 0);
   sortableTable.addColumnHeader(i18n.GL0308(), 1);
   sortableTable.addColumnHeader(i18n.GL2229(), 2);
   sortableTable.addColumnHeader(i18n.GL3269(), 3);
   sortableTable.addColumnHeader(i18n.GL2084(), 4);
   sortableTable.addColumnHeader(i18n.GL3261(), 5);
   sortableTable.getRowFormatter().addStyleName(0, res.css().tableHeader());
   // To add scored questions
   scoredQuestionHeading.setText(i18n.GL2282());
   scoredQuestionHeading.getElement().getStyle().setClear(Clear.BOTH);
   scoredQuestionHeading.getElement().getStyle().setPaddingTop(15, Unit.PX);
   scoredQuestionHeading.getElement().getStyle().setPaddingBottom(20, Unit.PX);
   scoredQuestionHeading.getElement().getStyle().setTextAlign(TextAlign.LEFT);
   printWidget.add(scoredQuestionHeading);
   scoredPrintWidget.add(sortableTable);
   scoredPrintWidget.getElement().getStyle().setPaddingTop(15, Unit.PX);
   if (scoredQuestionsData.size() != 0) {
     setSortedData(scoredQuestionsData, sortableTable, true);
   } else {
     Label erroeMsg = new Label();
     erroeMsg.setStyleName(res.css().displayMessageTextForScoredQuestions());
     erroeMsg.setText(i18n.GL3265());
     scoredPrintWidget.add(erroeMsg);
   }
   scoredPrintWidget.setVisible(false);
 }
 /**
  * This method is used to display scored data
  *
  * @param scoredQuestionsData
  */
 void setScoredQuestionsData(ArrayList<UserDataDo> scoredQuestionsData) {
   teacherScoredData.clear();
   final SortTable sortableTable = new SortTable();
   sortableTable.setStyleName(res.css().tableMain());
   sortableTable.getElement().setId("results");
   sortableTable.setBorderWidth(1);
   sortableTable.setCellPadding(4);
   sortableTable.setCellSpacing(1);
   sortableTable.setWidth("800");
   sortableTable.addColumnHeader(i18n.GL3259(), 0);
   sortableTable.addColumnHeader(i18n.GL0308(), 1);
   sortableTable.addColumnHeader(i18n.GL3276(), 2);
   sortableTable.addColumnHeader(i18n.GL3277(), 3);
   sortableTable.addColumnHeader(i18n.GL2084(), 4);
   sortableTable.addColumnHeader(i18n.GL3261(), 5);
   sortableTable.getRowFormatter().addStyleName(0, res.css().tableHeader());
   teacherScoredData.add(sortableTable);
   if (scoredQuestionsData.size() != 0) {
     setSortedData(scoredQuestionsData, sortableTable, false);
   } else {
     Label erroeMsg = new Label();
     erroeMsg.setStyleName(res.css().displayMessageTextForScoredQuestions());
     erroeMsg.setText(i18n.GL3265());
     teacherScoredData.add(erroeMsg);
   }
 }
  /**
   * This method is used to display collection break down data.
   *
   * @param result
   * @param loadingImage
   */
  void setCollectionBreakDown(ArrayList<UserDataDo> result, final HTMLPanel loadingImage) {

    UserDataDo maxAvgValue =
        Collections.max(
            result,
            new Comparator<UserDataDo>() {
              public int compare(UserDataDo o1, UserDataDo o2) {
                Long obj1 = new Long(o1.getTimeSpent());
                Long obj2 = new Long(o2.getTimeSpent());
                return obj1.compareTo(obj2);
              }
            });

    final SortTable sortableTable = new SortTable();
    sortableTable.setStyleName(res.css().tableMain());
    sortableTable.getElement().setId("collectionbreak");
    sortableTable.setBorderWidth(1);
    sortableTable.setCellPadding(4);
    sortableTable.setCellSpacing(1);
    sortableTable.setWidth("800");
    sortableTable.getElement().getStyle().setBackgroundColor("#fff");
    sortableTable.addColumnHeader(i18n.GL3259(), 0);
    sortableTable.addColumnHeader(i18n.GL3267(), 1);
    sortableTable.addColumnHeader(i18n.GL3182(), 2);
    sortableTable.addColumnHeader(i18n.GL3268(), 3);
    sortableTable.addColumnHeader(i18n.GL0934(), 4);
    sortableTable.addColumnHeader(i18n.GL3261(), 5);
    sortableTable.getRowFormatter().addStyleName(0, res.css().tableHeader());

    int rowVal = 1;
    for (int i = 0; i < result.size(); i++) {
      Label number = new Label(String.valueOf(result.get(i).getItemSequence()));
      number.setStyleName(res.css().alignCenterAndBackground());
      sortableTable.setWidget(rowVal, 0, number);
      // set Format
      String resourceCategory =
          result.get(i).getResourceFormat() != null ? result.get(i).getResourceFormat().trim() : "";
      String categoryStyle = "";
      if (resourceCategory.equalsIgnoreCase("website")
          || resourceCategory.equalsIgnoreCase("webpage")) {
        resourceCategory = "webpage";
        categoryStyle = res.css().category_new_type_webpage();
      } else if (resourceCategory.equalsIgnoreCase("slide")
          || resourceCategory.equalsIgnoreCase("image")) {
        resourceCategory = "image";
        categoryStyle = res.css().category_new_type_image();
      } else if (resourceCategory.equalsIgnoreCase("handout")
          || resourceCategory.equalsIgnoreCase("lesson")
          || resourceCategory.equalsIgnoreCase("textbook")
          || resourceCategory.equalsIgnoreCase("text")) {
        resourceCategory = "text";
        categoryStyle = res.css().category_new_type_text();
      } else if (resourceCategory.equalsIgnoreCase("exam")) {
        resourceCategory = "webpage";
        categoryStyle = res.css().category_new_type_webpage();
      } else if (resourceCategory.equalsIgnoreCase("video")) {
        resourceCategory = "video";
        categoryStyle = res.css().category_new_type_video();
      } else if (resourceCategory.equalsIgnoreCase("interactive")) {
        resourceCategory = "webpage";
        categoryStyle = res.css().category_new_type_interactive();
      } else if (resourceCategory.equalsIgnoreCase("audio")) {
        resourceCategory = "audio";
        categoryStyle = res.css().category_new_type_audio();
      } else {
        categoryStyle = res.css().category_new_type_other();
      }
      Label categorylbl = new Label();
      categorylbl.setStyleName(res.css().alignCenterAndBackground());
      categorylbl.addStyleName(categoryStyle);
      categorylbl.addStyleName(res.css().setMarginAuto());
      sortableTable.setWidget(rowVal, 1, categorylbl);

      // Set Question Title
      Label questionTitle =
          new Label(
              AnalyticsUtil.html2text(
                  result.get(i).getTitle() != null ? result.get(i).getTitle() : ""));
      questionTitle.setStyleName(res.css().alignCenterAndBackground());
      questionTitle.addStyleName(res.css().alignLeft());
      sortableTable.setWidget(rowVal, 2, questionTitle);

      // Set time spent
      HorizontalPanel timeSpentpnl = new HorizontalPanel();
      timeSpentpnl.add(AnalyticsUtil.getTimeStampLabel(result.get(i).getAvgTimeSpent()));
      Label progressBar = new Label();
      progressBar.setStyleName(res.css().setProgressBar());
      timeSpentpnl.add(progressBar);
      double maxAvgVal =
          ((double) result.get(i).getAvgTimeSpent()) / ((double) maxAvgValue.getTimeSpent());
      progressBar.getElement().getStyle().setWidth(maxAvgVal * 100, Unit.PX);
      sortableTable.setWidget(rowVal, 3, timeSpentpnl);

      // set Views label
      Label viewlbl = new Label(Integer.toString(result.get(i).getViews()));
      viewlbl.setStyleName(res.css().alignCenterAndBackground());
      sortableTable.setWidget(rowVal, 4, viewlbl);

      // 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());
      sortableTable.setWidget(rowVal, 5, reactionpnl);
      if (rowVal % 2 == 0) {
        sortableTable
            .getRowFormatter()
            .getElement(rowVal)
            .setAttribute("style", "background-color: #fafafa");
      }
      rowVal++;
    }
    if (result.size() == 0) {
      Label erroeMsg = new Label();
      erroeMsg.setStyleName(res.css().displayMessageTextForScoredQuestions());
      erroeMsg.setText(i18n.GL3467());
      teacherResourceBreakdownData.add(erroeMsg);
    }
    teacherResourceBreakdownData.add(sortableTable);
    filterDropDown.addChangeHandler(
        new ChangeHandler() {
          @Override
          public void onChange(ChangeEvent event) {
            teacherResourceBreakdownData.clear();
            int selectedIndex = filterDropDown.getSelectedIndex();
            sortableTable.setStyleName("collectionProgressTable");
            sortableTable.getElement().setId("collectionbreak");
            if (selectedIndex == 1) {
              if (questionsData.size() > 0) {
                setCollectionBreakDown(questionsData, loadingImage);
              } else {
                Label erroeMsg = new Label();
                erroeMsg.setStyleName(res.css().displayMessageTextForOEQuestions());
                erroeMsg.setText(i18n.GL3274());
                teacherResourceBreakdownData.add(erroeMsg);
              }
            } else if (selectedIndex == 2) {
              if (resourceData.size() > 0) {
                setCollectionBreakDown(resourceData, loadingImage);
              } else {
                Label erroeMsg = new Label();
                erroeMsg.setStyleName(res.css().displayMessageTextForOEQuestions());
                erroeMsg.setText(i18n.GL3467());
                teacherResourceBreakdownData.add(erroeMsg);
              }
            } else {
              if (allData.size() > 0) {
                setCollectionBreakDown(allData, loadingImage);
              } else {
                Label erroeMsg = new Label();
                erroeMsg.setStyleName(res.css().displayMessageTextForOEQuestions());
                erroeMsg.setText(i18n.GL3467());
                teacherResourceBreakdownData.add(erroeMsg);
              }
            }
            sortableTable.addDomHandler(new ClickOnTableCell(), ClickEvent.getType());
          }
        });
    loadingImage.setVisible(false);
  }