docs: private String buildNotificationListItem(CmsExtendedNotificationCause notificationCause, int row) {
  
          StringBuffer result = new StringBuffer("<tr class=\"trow");
          result.append(row);
          result.append("\"><td width=\"100%\">");
          String resourcePath = notificationCause.getResource().getRootPath();
          String siteRoot = OpenCms.getSiteManager().getSiteRoot(resourcePath);
          resourcePath = resourcePath.substring(siteRoot.length());
          // append link, if page is available
          if ((notificationCause.getResource().getDateReleased() < System.currentTimeMillis())
              && (notificationCause.getResource().getDateExpired() > System.currentTimeMillis())) {
  
              Map<String, String[]> params = new HashMap<String, String[]>();
              params.put(CmsWorkplace.PARAM_WP_SITE, new String[] {siteRoot});
              params.put(CmsDialog.PARAM_RESOURCE, new String[] {resourcePath});
              result.append("<a href=\"");
              result.append(
                  CmsRequestUtil.appendParameters(m_uriWorkplace + "commons/displayresource.jsp", params, false));
              result.append("\">");
              result.append(resourcePath);
              result.append("</a>");
          } else {
              result.append(resourcePath);
          }
          result.append("</td><td><div style=\"white-space:nowrap;padding-left:10px;padding-right:10px;\">");
          result.append(siteRoot);
          result.append("</td><td><div style=\"white-space:nowrap;padding-left:10px;padding-right:10px;\">");
          if (notificationCause.getCause() == CmsExtendedNotificationCause.RESOURCE_EXPIRES) {
              result.append(m_messages.key(Messages.GUI_EXPIRES_AT_1, new Object[] {notificationCause.getDate()}));
              result.append("</div></td>");
              appendConfirmLink(result, notificationCause);
              appendModifyLink(result, notificationCause);
          } else if (notificationCause.getCause() == CmsExtendedNotificationCause.RESOURCE_RELEASE) {
              result.append(m_messages.key(Messages.GUI_RELEASE_AT_1, new Object[] {notificationCause.getDate()}));
              result.append("</div></td>");
              appendConfirmLink(result, notificationCause);
              appendModifyLink(result, notificationCause);
          } else if (notificationCause.getCause() == CmsExtendedNotificationCause.RESOURCE_UPDATE_REQUIRED) {
              result.append(m_messages.key(Messages.GUI_UPDATE_REQUIRED_1, new Object[] {notificationCause.getDate()}));
              result.append("</div></td>");
              appendConfirmLink(result, notificationCause);
              appendEditLink(result, notificationCause);
          } else {
              result.append(
                  m_messages.key(
                      Messages.GUI_UNCHANGED_SINCE_1,
                      new Object[] {new Integer(CmsDateUtil.getDaysPassedSince(notificationCause.getDate()))}));
              result.append("</div></td>");
              appendConfirmLink(result, notificationCause);
              appendEditLink(result, notificationCause);
          }
  
          result.append("</tr>");
  
          return result.toString();
      }