private void displayCodeListsForTheSelectedPage(String codeListId) {
    final int pageNumber = addCodeListDisplay.getCurrentPage();
    int pageSize = addCodeListDisplay.getPageSize();
    int startIndex = pageSize * (pageNumber - 1);
    MatContext.get()
        .getCodeListService()
        .getGroupedCodeList(
            codeListId,
            startIndex,
            pageSize,
            new AsyncCallback<ManageCodeListDetailModel>() {
              @Override
              public void onSuccess(ManageCodeListDetailModel result) {
                currentCodeLists = new ManageGroupCodeListsModel(result.getCodeLists(), false);
                currentCodeLists.setPageSize(addCodeListDisplay.getPageSize());
                currentDetails.setCodeLists(
                    result
                        .getCodeLists()); // Need to set this to keep in sync with the current Page
                                          // codesList
                addCodeListDisplay.buildDataTable(
                    currentCodeLists,
                    false,
                    currentDetails.getTotalCodeList(),
                    currentDetails.getCodeListsPageCount(),
                    addCodeListDisplay.getCurrentPage());
              }

              @Override
              public void onFailure(Throwable caught) {}
            });
  }
  public Widget getAddCodeLists() {
    /*USTod*/
    panel.setHeading(MY_VALUE_SETS_GROUPED_VALUE_SET_ADD, MY_VALUE_SETS_GROUPED_VALUE_SET_ADD);

    addCodeListDisplay.getSuccessMessageDisplay().clear();
    return addCodeListDisplay.asWidget();
  }
  private void displayCodeList() {
    setCodeListOptions(detailDisplay.getCategory().getValue());
    addCodeListDisplay.setReturnToLink("Return to  " + currentDetails.getName());
    resetAddCodeListScreen();

    /*USTod*/
    setPanelContentAndHeading(
        addCodeListDisplay.asWidget(),
        MY_VALUE_SETS_GROUPED_VALUE_SET_MANAGE + " for " + currentDetails.getName());

    Mat.focusSkipLists("MainContent");
  }
  private void setCodeListOptions(String category) {
    if (category != null && category.length() > 0) {
      MatContext.get()
          .getCodeListService()
          .getCodeListsForCategory(
              category,
              new AsyncCallback<List<? extends HasListBox>>() {

                @Override
                public void onFailure(Throwable caught) {
                  addCodeListDisplay
                      .getErrorMessageDisplay()
                      .setMessage(MatContext.get().getMessageDelegate().getGenericErrorMessage());
                  MatContext.get()
                      .recordTransactionEvent(
                          null,
                          null,
                          null,
                          "Unhandled Exception: " + caught.getLocalizedMessage(),
                          0);
                }

                @Override
                public void onSuccess(List<? extends HasListBox> result) {
                  addCodeListDisplay.setCodeListOptions(result);
                }
              });
    } else {
      addCodeListDisplay.setCodeListOptions(new ArrayList<HasListBoxDTO>());
    }
  }
  private void addCodeList() {
    addCodeListDisplay.getErrorMessageDisplay().clear();
    final GroupedCodeListDTO dto = new GroupedCodeListDTO();
    MatContext.get()
        .getCodeListService()
        .getGroupedCodeList(
            currentDetails.getID(),
            new AsyncCallback<ManageCodeListDetailModel>() {

              @Override
              public void onFailure(Throwable caught) {
                addCodeListDisplay
                    .getErrorMessageDisplay()
                    .setMessage(caught.getLocalizedMessage());
              }

              @Override
              public void onSuccess(ManageCodeListDetailModel result) {
                /*
                 * setting to false before running the check below
                 * not sure why this is a class level variable
                 */
                currentDetails = result;
                codeListExists = false;
                dto.setCodeSystem(result.getCodeSystem());

                List<GroupedCodeListDTO> existingCodeLists = currentDetails.getCodeLists();
                if (existingCodeLists != null && !existingCodeLists.isEmpty()) {
                  for (GroupedCodeListDTO existingCodeList : existingCodeLists) {

                    String existingOID = existingCodeList.getOid();
                    String selectedOID = addCodeListDisplay.getCodeListOid();
                    if (existingOID != null
                        && selectedOID != null
                        && existingOID.trim().equalsIgnoreCase(selectedOID.trim())) {
                      codeListExists = true;
                      addCodeListDisplay
                          .getErrorMessageDisplay()
                          .setMessage(
                              MatContext.get()
                                  .getMessageDelegate()
                                  .getCodeListAlreadyExistsForGroupedMessage(
                                      currentDetails.getName()));
                      return;
                    }
                  }
                }
                if (!codeListExists) {
                  HasValue<String> tmp = addCodeListDisplay.getCodeId();
                  dto.setId(addCodeListDisplay.getCodeId().getValue());
                  dto.setName(addCodeListDisplay.getCodeListName());
                  dto.setDescription(addCodeListDisplay.getCodeDescription().getValue());
                  dto.setOid(addCodeListDisplay.getCodeListOid());
                  currentDetails.getAddValueSetsMap().put(dto.getId(), dto);
                  addCodeListtoGroupedCodeList(currentDetails);
                }
              }
            });
  }
 private void setModelCodesToView(boolean value) {
   if (currentDetails.getCodeLists() != null) {
     Collections.sort(currentDetails.getCodeLists(), new GroupedCodeListDTO.Comparator());
     addCodeListDisplay.setCodeListName(currentDetails.getName());
     currentCodeLists = new ManageGroupCodeListsModel(currentDetails.getCodeLists(), value);
     currentCodeLists.setPageSize(addCodeListDisplay.getPageSize());
     addCodeListDisplay.buildDataTable(
         currentCodeLists,
         value,
         currentDetails.getTotalCodeList(),
         currentDetails.getCodeListsPageCount(),
         addCodeListDisplay.getCurrentPage());
   }
   ManageGroupedCodeListsSummaryModel codeListsSummaryModel =
       new ManageGroupedCodeListsSummaryModel();
   codeListsSummaryModel.setData(currentDetails.getCodeLists());
   detailDisplay.setCodeLists(
       codeListsSummaryModel,
       currentDetails.getCodeListsPageCount(),
       currentDetails.getTotalCodeList(),
       detailDisplay.getCodeListsSummaryWidget().getCurrentPage());
   if (!isNewCodeList) {
     if (currentDetails.isDraft())
       ReadOnlyHelper.setReadOnlyForCurrentMeasure(
           addCodeListDisplay.asWidget(), currentDetails.isMyValueSet());
     else ReadOnlyHelper.setReadOnlyForCurrentMeasure(addCodeListDisplay.asWidget(), false);
   } else {
     ReadOnlyHelper.setReadOnlyForCurrentMeasure(addCodeListDisplay.asWidget(), isNewCodeList);
   }
 }
  private boolean isValidCodeList() {
    List<String> messages = new ArrayList<String>();
    String codeId = addCodeListDisplay.getCodeId().getValue();
    if (codeId == null || codeId.equals("")) {
      messages.add(MatContext.get().getMessageDelegate().getCodeListRequiredMessage());
    }

    String codeDesc = addCodeListDisplay.getCodeDescription().getValue();

    if (codeDesc == null || codeDesc.equals("")) {
      messages.add(MatContext.get().getMessageDelegate().getDescriptionRequiredMeassage());
    }

    boolean valid = messages.size() == 0;
    if (!valid) {
      addCodeListDisplay.getErrorMessageDisplay().setMessages(messages);
    } else {
      addCodeListDisplay.getErrorMessageDisplay().clear();
    }
    return valid;
  }
 private void resetAddCodeListScreen() {
   addCodeListDisplay.setCurrentPage(default_page_number); // Resetting to first page.
   addCodeListDisplay.getCodeDescription().setValue("");
   setModelCodesToView(false);
 }
  public ManageGroupedCodeListPresenter(
      GroupedCodeListDisplay dDisplayArg,
      AddCodeListDisplay addCodeListArg,
      ListBoxCodeProvider lbcp) {
    super(dDisplayArg, lbcp);

    this.detailDisplay = dDisplayArg;
    listBoxProvider = lbcp;
    addCodeListDisplay = addCodeListArg;

    addCodeListDisplay
        .getPageSelectionTool()
        .addPageSelectionHandler(
            new PageSelectionEventHandler() {

              @Override
              public void onPageSelection(PageSelectionEvent event) {
                int pageNumber = event.getPageNumber();
                if (pageNumber == -1) { // if next button clicked
                  if (addCodeListDisplay.getCurrentPage()
                      == currentDetails.getCodeListsPageCount()) {
                    pageNumber = addCodeListDisplay.getCurrentPage();
                  } else {
                    pageNumber = addCodeListDisplay.getCurrentPage() + 1;
                  }
                } else if (pageNumber == 0) { // if first button clicked
                  pageNumber = 1;
                } else if (pageNumber == -9) { // if prev button clicked
                  if (addCodeListDisplay.getCurrentPage() == 1) {
                    pageNumber = addCodeListDisplay.getCurrentPage();
                  } else {
                    pageNumber = addCodeListDisplay.getCurrentPage() - 1;
                  }
                }
                addCodeListDisplay.setCurrentPage(pageNumber); // Setting it to the display.
                currentCodeLists.setCurrentPage(pageNumber);
                displayCodeListsForTheSelectedPage(currentDetails.getID());
              }
            });

    addCodeListDisplay
        .getSearchButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                addCodeListDisplay.getSuccessMessageDisplay().clear();
                addCodeListDisplay.getErrorMessageDisplay().clear();
                int startIndex = 1;
                String searchString = "";
                int filter = addCodeListDisplay.getValueSetSearchFilterPanel().getSelectedIndex();
                String currentSortColumn = "name";
                boolean sortIsAscending = true;
                boolean defaultCodeList = true;
                search(
                    searchString,
                    startIndex,
                    currentSortColumn,
                    sortIsAscending,
                    defaultCodeList,
                    filter);
              }
            });

    addCodeListDisplay
        .getSaveButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                addCodeListDisplay.getSuccessMessageDisplay().clear();
                addCodeListDisplay.getErrorMessageDisplay().clear();
                if (isValidCodeList()) addCodeList();
              }
            });

    addCodeListDisplay
        .getCancelButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                addCodeListDisplay.getSuccessMessageDisplay().clear();
                addCodeListDisplay.getErrorMessageDisplay().clear();
                addCodeListDisplay.getCodeId().setValue("");
                addCodeListDisplay.getCodeDescription().setValue("");
              }
            });
    addCodeListDisplay
        .getRemoveButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                clearMessages();
                removeSelectedCodeListsFromGroupCodeList();
              }
            });
    addCodeListDisplay
        .getReturnButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                clearMessages();
                displayDetail(MY_VALUE_SETS_GROUPED_VALUE_SET_UPDATE);
                resetToFirstPage();
              }
            });
    addCodeListDisplay
        .getSelectAllTool()
        .addSelectAllHandler(
            new SelectAllEventHandler() {

              @Override
              public void onSelectAll(SelectAllEvent event) {
                setModelCodesToView(
                    event
                        .isChecked()); // This line will reconstruct the entire table with
                                       // checked/Not checked value
              }
            });

    detailDisplay
        .getAddCodeListButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {

                addCodeListDisplay.setCurrentPage(default_page_number);
                displayCodeList();
                addCodeListDisplay.getValueSetSearchFilterPanel().setSelectedIndex(0);
                addCodeListDisplay
                    .getSearchButton()
                    .fireEvent(
                        new GwtEvent<ClickHandler>() {
                          @Override
                          public com.google.gwt.event.shared.GwtEvent.Type<ClickHandler>
                              getAssociatedType() {
                            return ClickEvent.getType();
                          }

                          @Override
                          protected void dispatch(ClickHandler handler) {
                            handler.onClick(null);
                          }
                        });
              }
            });
    detailDisplay
        .getSaveButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                currentDetails.setDraft(true);
                update(MessageDelegate.DRAFT);
              }
            });

    detailDisplay
        .getSaveCompleteButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                currentDetails.setDraft(false);
                update(MessageDelegate.COMPLETE);
              }
            });

    detailDisplay
        .getCancelButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                detailDisplay
                    .getCodeListsSummaryWidget()
                    .setCurrentPage(
                        default_page_number); // Need to reset to first Page when the cancel button
                                              // has been clicked.
                MatContext.get().getEventBus().fireEvent(new CancelEditCodeListEvent());
              }
            });

    detailDisplay
        .getCreateNewButton()
        .addClickHandler(
            new ClickHandler() {

              @Override
              public void onClick(ClickEvent event) {
                MatContext.get().restartTimeoutWarning();
                MatContext.get().getEventBus().fireEvent(new CreateNewCodeListEvent());
              }
            });

    detailDisplay
        .getCreateNewGroupedButton()
        .addClickHandler(
            new ClickHandler() {

              @Override
              public void onClick(ClickEvent event) {
                MatContext.get().getEventBus().fireEvent(new CreateNewGroupedCodeListEvent());
              }
            });

    detailDisplay
        .getCategory()
        .addValueChangeHandler(
            new ValueChangeHandler<String>() {

              @Override
              public void onValueChange(ValueChangeEvent<String> event) {
                String category = event.getValue();
                boolean populate = false;
                populateCodeSystemOptions(category, populate);
              }
            });

    detailDisplay
        .getGenerateOidButton()
        .addClickHandler(
            new ClickHandler() {
              @Override
              public void onClick(ClickEvent event) {
                MatContext.get()
                    .getCodeListService()
                    .generateUniqueOid(
                        currentDetails,
                        new AsyncCallback<String>() {

                          @Override
                          public void onFailure(Throwable caught) {
                            Window.alert(caught.getLocalizedMessage());
                          }

                          @Override
                          public void onSuccess(String result) {
                            detailDisplay.getOid().setValue(result);
                          }
                        });
              }
            });

    // US 413. Value change listener to show or remove Steward Other text box.
    detailDisplay
        .getOrganisation()
        .addValueChangeHandler(
            new ValueChangeHandler<String>() {

              @Override
              public void onValueChange(ValueChangeEvent<String> event) {
                String value = detailDisplay.getStewardValue();
                if (value.startsWith("Other")) {
                  detailDisplay.showOtherTextBox();
                } else {
                  detailDisplay.hideOtherTextBox();
                }
              }
            });

    detailDisplay
        .getLastModifiedDate()
        .addValueChangeHandler(
            new ValueChangeHandler<String>() {

              @Override
              public void onValueChange(ValueChangeEvent<String> event) {
                detailDisplay.asWidget().getElement().setAttribute("role", "alert");
                detailDisplay.setSaveCompleteButtonEnabled(currentDetails.isMyValueSet());
              }
            });

    if (detailDisplay.getCodeListsSummaryWidget().getPageSelectionTool() != null) {
      detailDisplay
          .getCodeListsSummaryWidget()
          .getPageSelectionTool()
          .addPageSelectionHandler(
              new PageSelectionEventHandler() {

                @Override
                public void onPageSelection(PageSelectionEvent event) {
                  int pageNumber = event.getPageNumber();
                  if (pageNumber == -1) { // if next button clicked
                    if (detailDisplay.getCodeListsSummaryWidget().getCurrentPage()
                        == currentDetails.getCodeListsPageCount()) {
                      pageNumber = detailDisplay.getCodeListsSummaryWidget().getCurrentPage();
                    } else {
                      pageNumber = detailDisplay.getCodeListsSummaryWidget().getCurrentPage() + 1;
                    }
                  } else if (pageNumber == 0) { // if first button clicked
                    pageNumber = 1;
                  } else if (pageNumber == -9) { // if first button clicked
                    if (detailDisplay.getCodeListsSummaryWidget().getCurrentPage() == 1) {
                      pageNumber = detailDisplay.getCodeListsSummaryWidget().getCurrentPage();
                    } else {
                      pageNumber = detailDisplay.getCodeListsSummaryWidget().getCurrentPage() - 1;
                    }
                  }
                  detailDisplay.getCodeListsSummaryWidget().setCurrentPage(pageNumber);
                  currentCodeLists.setCurrentPage(pageNumber);
                  displayCodeListsSummary(currentDetails.getID());
                }
              });
    }

    /*USTod*/
    setPanelContentAndHeading(detailDisplay.asWidget(), MY_VALUE_SETS_GROUPED_VALUE_SET);
  }
 public void clearMessages() {
   detailDisplay.getErrorMessageDisplay().clear();
   detailDisplay.getSuccessMessageDisplay().clear();
   addCodeListDisplay.getErrorMessageDisplay().clear();
   addCodeListDisplay.getSuccessMessageDisplay().clear();
 }