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);
   }
 }
  public void editCodeList(String key) {
    /*USTod*/
    //		panel.setHeading(MY_VALUE_SETS_GROUPED_VALUE_SET_UPDATE,
    // MY_VALUE_SETS_GROUPED_VALUE_SET_UPDATE);

    isNewCodeList = false;
    final int pageNumber = detailDisplay.getCodeListsSummaryWidget().getCurrentPage();
    int pageSize = detailDisplay.getCodeListsSummaryWidget().getPageSize();
    int startIndex = pageSize * (pageNumber - 1);
    MatContext.get()
        .getCodeListService()
        .getGroupedCodeList(
            key,
            startIndex,
            pageSize,
            new AsyncCallback<ManageCodeListDetailModel>() {
              @Override
              public void onSuccess(ManageCodeListDetailModel result) {
                currentDetails = result;
                String category = currentDetails.getCategory();
                populateCodeSystemOptions(category, true);
                detailDisplay.EnableAnchors();
                displayDetail(MY_VALUE_SETS_GROUPED_VALUE_SET_UPDATE);
              }

              @Override
              public void onFailure(Throwable caught) {
                // Window.alert(caught.getMessage());
                Window.alert(MatContext.get().getMessageDelegate().getGenericErrorMessage());
              }
            });
  }
  private void displayCodeListsSummary(String codeListId) {
    final int pageNumber = detailDisplay.getCodeListsSummaryWidget().getCurrentPage();
    int pageSize = detailDisplay.getCodeListsSummaryWidget().getPageSize();
    int startIndex = pageSize * (pageNumber - 1);
    MatContext.get()
        .getCodeListService()
        .getGroupedCodeList(
            codeListId,
            startIndex,
            pageSize,
            new AsyncCallback<ManageCodeListDetailModel>() {
              @Override
              public void onSuccess(ManageCodeListDetailModel result) {
                ManageGroupedCodeListsSummaryModel summaryModel =
                    new ManageGroupedCodeListsSummaryModel();
                summaryModel.setData(result.getCodeLists());
                detailDisplay.setCodeLists(
                    summaryModel,
                    currentDetails.getCodeListsPageCount(),
                    currentDetails.getTotalCodeList(),
                    detailDisplay.getCodeListsSummaryWidget().getCurrentPage());
              }

              @Override
              public void onFailure(Throwable caught) {}
            });
  }
  private void displayDetail(String heading) {
    detailDisplay.getErrorMessageDisplay().clear();
    detailDisplay.getSuccessMessageDisplay().clear();
    /*USTod*/
    setPanelContentAndHeading(detailDisplay.asWidget(), heading);
    //		panel.setContent(detailDisplay.asWidget());

    Mat.focusSkipLists("MainContent");
  }
  public void createNewGroupedCodeList() {
    /*USTod*/
    //		panel.setHeading(MY_VALUE_SETS_GROUPED_VALUE_SET_CREATE,
    // MY_VALUE_SETS_GROUPED_VALUE_SET_CREATE);

    isNewCodeList = true;
    currentDetails = new ManageCodeListDetailModel();
    currentDetails.setIsGrouped(true);
    currentDetails.setMeasureId(MatContext.get().getCurrentMeasureId());
    detailDisplay.getCategory().setValue("");
    detailDisplay.getOrganisation().setValue("");
    populateFields();
    detailDisplay.DisableAnchors();
    detailDisplay.getOid().setValue("");
    displayDetail(MY_VALUE_SETS_GROUPED_VALUE_SET_CREATE);
  }
  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 updateModelDetailsFromView() {
    currentDetails.setName(detailDisplay.getName().getValue());

    // US 413. Update Steward and Steward Other value.
    currentDetails.setSteward(detailDisplay.getOrganisation().getValue());
    currentDetails.setStewardValue(detailDisplay.getStewardValue());
    currentDetails.setStewardOther(detailDisplay.getStewardOtherValue());
    currentDetails.setCategory(detailDisplay.getCategory().getValue());
    currentDetails.setRationale(detailDisplay.getRationale().getValue());
    currentDetails.setComments(detailDisplay.getComments().getValue());
    // no need to update code system for a grouped value set
    // this will need to be commented US 216
    // currentDetails.setCodeSystem(detailDisplay.getCodeSystemValue());
    // US 216. The codeSystemVersion should be "Grouping" for GroupedCodeList.
    currentDetails.setCodeSystemVersion(ConstantMessages.GROUPED_CODE_LIST_CS);
    currentDetails.setOid(detailDisplay.getOid().getValue());
    /*US537*/
    currentDetails.setLastModifiedDate(detailDisplay.getLastModifiedDate().getValue());
  }
  private void enableOrDisableFields() {
    boolean canEditValueSet = currentDetails.isMyValueSet();
    boolean isValueSetDraft = currentDetails.isDraft();

    enableOrDisable(canEditValueSet);

    if (canEditValueSet) {
      detailDisplay.enableValueSetWidgetsBasedOnDraft(isNewCodeList || isValueSetDraft);
      detailDisplay.getCategoryListBox().setEnabled(isNewCodeList);
      detailDisplay.getLastModifiedDate().setEnabled(!isValueSetDraft && !isNewCodeList);
      detailDisplay.setSaveCompleteButtonEnabled(!isNewCodeList && isValueSetDraft);
    } else {
      detailDisplay.getCategoryListBox().setEnabled(false);
      detailDisplay.getLastModifiedDate().setEnabled(false);
      detailDisplay.enableValueSetWidgetsBasedOnDraft(false);
      detailDisplay.setSaveCompleteButtonEnabled(false);
    }
  }
  // Changed the method name for consistency.
  private void populateFields() {
    detailDisplay.getName().setValue(currentDetails.getName());

    // US 413. Populate the value for both the Steward List box and the Steward Other if any.
    detailDisplay.getOrganisation().setValue(currentDetails.getSteward());
    String stewardOther = currentDetails.getStewardOther();
    if (stewardOther != null && !stewardOther.equalsIgnoreCase("")) {
      detailDisplay.showOtherTextBox();
      detailDisplay.getStewardOther().setValue(currentDetails.getStewardOther());

    } else {
      detailDisplay.hideOtherTextBox();
    }

    detailDisplay.getCategory().setValue(currentDetails.getCategory());
    detailDisplay.getRationale().setValue(currentDetails.getRationale());
    detailDisplay.getComments().setValue(currentDetails.getComments());
    detailDisplay.getCodeSystem().setValue(currentDetails.getCodeSystem());
    detailDisplay.getCodeSystemVersion().setValue(currentDetails.getCodeSystemVersion());
    detailDisplay.getErrorMessageDisplay().clear();

    // US210 prefixing the oid widget title with the oid itself so it can be viewed by a user
    String oid = currentDetails.getOid();
    detailDisplay.getOid().setValue(oid);
    String oidTitle =
        oid == null ? detailDisplay.getOidTitle() : oid + " - " + detailDisplay.getOidTitle();
    ((TextAreaWithMaxLength) detailDisplay.getOid()).setTitle(oidTitle);

    detailDisplay.getLastModifiedDate().setValue(currentDetails.getLastModifiedDate());
    setModelCodesToView(false);

    enableOrDisableFields();
  }
 public Widget getWidget() {
   detailDisplay.getErrorMessageDisplay().clear();
   detailDisplay.getSuccessMessageDisplay().clear();
   /*USTod*/
   return panel;
 }
  private void update(final int source) {
    detailDisplay.getErrorMessageDisplay().clear();
    detailDisplay.getSuccessMessageDisplay().clear();
    updateModelDetailsFromView();
    if (isValid(currentDetails)) {
      MatContext.get()
          .getCodeListService()
          .saveorUpdateGroupedCodeList(
              currentDetails,
              new AsyncCallback<SaveUpdateCodeListResult>() {
                @Override
                public void onSuccess(SaveUpdateCodeListResult result) {
                  if (result.isSuccess()) {
                    currentDetails.setExistingCodeList(
                        true); // Need to set this flag, after a sucessful save operation. Otherwise
                               // when Adding ValueSets, throws NULL Exception
                    currentDetails.setID(result.getId());
                    detailDisplay
                        .getSuccessMessageDisplay()
                        .setMessage(
                            MatContext.get()
                                .getMessageDelegate()
                                .getGroupedValueSetChangedSavedMessage(source));
                    detailDisplay.EnableAnchors();
                    String lmd = result.getLastModifiedDate();
                    if (lmd != null) {
                      currentDetails.setLastModifiedDate(lmd);
                      if (source == MessageDelegate.COMPLETE)
                        detailDisplay.getLastModifiedDate().setEnabled(true);
                    }
                    populateFields();

                    if (source == MessageDelegate.DRAFT) {
                      // category should be disabled on successfull draft save
                      detailDisplay.getCategoryListBox().setEnabled(false);
                      detailDisplay.setSaveCompleteButtonEnabled(true);
                    }
                  } else {
                    String message = null;
                    switch (result.getFailureReason()) {
                      case SaveUpdateCodeListResult.NOT_UNIQUE:
                        message =
                            MatContext.get()
                                .getMessageDelegate()
                                .getGroupedCodeListExistsMessage(currentDetails.getName());
                        break;
                      case SaveUpdateCodeListResult.OID_NOT_UNIQUE:
                        message = MatContext.get().getMessageDelegate().getOIDInUseMessage();
                        break;
                      case SaveUpdateCodeListResult.INVALID_LAST_MODIFIED_DATE:
                        message =
                            MatContext.get()
                                .getMessageDelegate()
                                .getInvalidLastModifiedDateMessage();
                        break;
                      case SaveUpdateCodeListResult.LAST_MODIFIED_DATE_DUPLICATE:
                        message =
                            MatContext.get()
                                .getMessageDelegate()
                                .getLastModifiedDateNotUniqueMessage();
                        break;
                      default:
                        message =
                            MatContext.get()
                                .getMessageDelegate()
                                .getUnknownErrorMessage(result.getFailureReason());
                    }
                    detailDisplay.getErrorMessageDisplay().setMessage(message);
                  }
                }

                @Override
                public void onFailure(Throwable caught) {
                  detailDisplay
                      .getErrorMessageDisplay()
                      .setMessage(
                          MatContext.get()
                              .getMessageDelegate()
                              .getIdentityMessage(caught.getLocalizedMessage()));
                }
              });
    }
  }
  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 resetToFirstPage() {
   detailDisplay.getCodeListsSummaryWidget().setCurrentPage(default_page_number);
   if (currentDetails != null) {
     editCodeList(currentDetails.getID());
   }
 }
 private void enableOrDisable(boolean editable) {
   ReadOnlyHelper.setReadOnlyForCurrentMeasure(detailDisplay.asWidget(), editable);
   //		ReadOnlyHelper.setReadOnlyForCurrentMeasure(addCodeListDisplay.asWidget(),editable);
 }
 public void clearMessages() {
   detailDisplay.getErrorMessageDisplay().clear();
   detailDisplay.getSuccessMessageDisplay().clear();
   addCodeListDisplay.getErrorMessageDisplay().clear();
   addCodeListDisplay.getSuccessMessageDisplay().clear();
 }