/** Show this next page in the wizard */
  protected void showNextPage() {
    if (currPageIndex.equals(pages.size() - 1)) {
      // Last page so dispose

      cleanup();
      return;
    }

    AbstractWizardPanel page = pages.get(currPageIndex);

    // Remove page from ignored list if requested
    if (page.getEnablePageClassArray().size() > 0) {
      for (Class<? extends AbstractWizardPanel> ignorePage : page.getEnablePageClassArray()) {
        ignoredPages.remove(ignorePage);
      }
    }

    // Add page to ignored list if requested
    if (page.getDisablePageClassArray().size() > 0) {
      for (Class<? extends AbstractWizardPanel> ignorePage : page.getDisablePageClassArray()) {
        if (!ignoredPages.contains(ignorePage)) {
          ignoredPages.add(ignorePage);
        }
      }
    }

    showPage(currPageIndex + 1, Direction.FORWARD);
  }
  protected void cleanup() {
    for (AbstractWizardPanel page : pages) {
      page.finish();
    }

    dispose();
  }
  /**
   * Show the specified wizard page
   *
   * @param index
   */
  private void showPage(Integer index, Direction dir) {
    AbstractWizardPanel page;
    try {
      page = pages.get(index);
    } catch (Exception e) {
      log.error("Error setting wizard page to index: " + index);
      e.printStackTrace();
      return;
    }

    // Check to see if page should be ignored
    if (isIgnoredPageClass(page)) {
      if (dir.equals(Direction.FORWARD)) {
        index++;
      } else {
        index--;
      }

      showPage(index, dir);
      return;
    }

    pagePanel.removeAll();
    pagePanel.add(page);
    lblTitle.setText(page.getTitle());
    txtInstructions.setText(page.getInstructions());
    currPageIndex = index;
    autoEnableNavButtons();

    page.initialViewTasks();

    pagePanel.repaint();
  }
  private Boolean isIgnoredPageClass(AbstractWizardPanel page) {
    for (Class<? extends AbstractWizardPanel> clazz : ignoredPages) {
      if (page.getClass().equals(clazz)) {
        return true;
      }
    }

    return false;
  }