@Override
  public String getHtml(IMacroContext macroContext) {
    htmlSerializerContext = macroContext.getHtmlSerializerContext();
    pageStore = macroContext.getPageStore();
    permissionEvaluator = macroContext.getPermissionEvaluator();

    path = htmlSerializerContext.getPagePath();
    if (path != null) {
      projectName = htmlSerializerContext.getProjectName();
      branchName = htmlSerializerContext.getBranchName();

      if (log.isInfoEnabled()) {
        log.info(
            "rendering neighbors for page: {}/{}/{}, user: {}", //$NON-NLS-1$
            projectName,
            branchName,
            Util.toUrlPagePath(path),
            htmlSerializerContext.getAuthentication().getName());
      }

      try {
        StringBuilder buf = new StringBuilder();
        buf.append(
                "<ul class=\"well well-small nav nav-list neighbors pull-right\">") //$NON-NLS-1$
            .append(printParent(printLinkListItem(path), path))
            .append("</ul>"); // $NON-NLS-1$
        return buf.toString();
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    } else {
      return null;
    }
  }
 private boolean hasViewPermission(String path) {
   Authentication authentication = htmlSerializerContext.getAuthentication();
   return permissionEvaluator.hasPagePermission(
       authentication, projectName, branchName, path, Permission.VIEW);
 }