  public boolean renderImpl(final GWikiContext ctx, final MacroAttributes attrs)
  {
    if (RenderModes.NoToc.isSet(ctx.getRenderMode()) == true) {
      return true;
    }
    final GWikiElementInfo elementInfo = ctx.getCurrentElement().getElementInfo();
    if (elementInfo.getId() == null) {
      return false;
    }
    final ArrayList<String> breadcrumbs = new ArrayList<String>();
    if (elementInfo.isIndexed()) {
      breadcrumbs.add(elementInfo.getId());
      setParentForElement(ctx, elementInfo, breadcrumbs);
    } else {
      final String pageId = ctx.getRequestParameter("pageId");
      final String parentPageId = ctx.getRequestParameter("parentPageId");
      if (StringUtils.isNotBlank(pageId)) {
        computeParameter(ctx, breadcrumbs, pageId);
      } else if (StringUtils.isNotBlank(parentPageId)) {
        computeParameter(ctx, breadcrumbs, parentPageId);
      } else {
        breadcrumbs.add(ctx.getWikiWeb().getWikiConfig().getWelcomePageId());
      }
    }
    ctx.append("<ul>");
    for (int i = breadcrumbs.size() - 1; i >= 0; i--) {
      ctx.append("<li>").append(ctx.renderLocalUrl(breadcrumbs.get(i))).append("</li>");
    }
    ctx.append("</ul>");
    ctx.flush();
    return true;
  }

  public boolean renderImpl(final GWikiContext ctx, final MacroAttributes attrs)
  {
    if (RenderModes.NoToc.isSet(ctx.getRenderMode()) == true) {
      return true;
    }
    final GWikiElementInfo elementInfo = ctx.getCurrentElement().getElementInfo();
    if (elementInfo.getId() == null) {
      return false;
    }
    final ArrayList<String> breadcrumbs = new ArrayList<String>();
    if (elementInfo.isIndexed()) {
      breadcrumbs.add(elementInfo.getId());
      setParentForElement(ctx, elementInfo, breadcrumbs);
    } else {
      final String pageId = ctx.getRequestParameter("pageId");
      final String parentPageId = ctx.getRequestParameter("parentPageId");
      if (StringUtils.isNotBlank(pageId)
          && ctx.getWikiWeb().findElement(pageId) != null
          && ctx.getWikiWeb().findElement(pageId).getElementInfo().isIndexed()) {
        computeParameter(ctx, breadcrumbs, pageId);
      } else if (StringUtils.isNotBlank(parentPageId)
          && ctx.getWikiWeb().findElement(parentPageId) != null
          && ctx.getWikiWeb().findElement(parentPageId).getElementInfo().isIndexed()) {
        computeParameter(ctx, breadcrumbs, parentPageId);
      } else {
        breadcrumbs.add(ctx.getWikiWeb().getWikiConfig().getWelcomePageId());
      }
    }
    ctx.append("<ul>");
    for (int i = breadcrumbs.size() - 1; i >= 0; i--) {
      ctx.append("<li>").append(ctx.renderLocalUrl(breadcrumbs.get(i))).append("</li>");
    }
    ctx.append("</ul>");
    ctx.flush();
    return true;
  }
