docs: protected String createDialogRowHtml(CmsWidgetDialogParameter base) {
  
          StringBuffer result = new StringBuffer(256);
  
          List<CmsWidgetDialogParameter> sequence = getParameters().get(base.getName());
          int count = sequence.size();
  
          // check if value is optional or multiple
          boolean addValue = false;
          if (count < base.getMaxOccurs()) {
              addValue = true;
          }
          boolean removeValue = false;
          if (count > base.getMinOccurs()) {
              removeValue = true;
          }
  
          // check if value is present
          boolean disabledElement = false;
          if (count < 1) {
              // no parameter with the value present, but also not optional: use base as parameter
              sequence = new ArrayList<CmsWidgetDialogParameter>();
              sequence.add(base);
              count = 1;
              if (base.getMinOccurs() == 0) {
                  disabledElement = true;
              }
          }
  
          // loop through multiple elements
          for (int j = 0; j < count; j++) {
  
              // get the parameter and the widget
              CmsWidgetDialogParameter p = sequence.get(j);
              I_CmsWidget widget = p.getWidget();
  
              // check for an error in this row
              if (p.hasError()) {
                  // show error message
                  result.append("<tr><td></td><td><img src=\"");
                  result.append(getSkinUri()).append("editors/xmlcontent/");
                  result.append("error.png");
                  result.append("\" border=\"0\" alt=\"\"></td><td class=\"xmlTdError\">");
                  Throwable t = p.getError();
                  while (t != null) {
                      if (t instanceof I_CmsThrowable) {
                          result.append(CmsEncoder.escapeXml(((I_CmsThrowable)t).getLocalizedMessage(getLocale())));
                      } else {
                          result.append(CmsEncoder.escapeXml(t.getLocalizedMessage()));
                      }
                      t = t.getCause();
                      if (t != null) {
                          result.append("<br>");
                      }
                  }
                  result.append("</td><td colspan=\"2\"></td></tr>\n");
              }
  
              // create label and help bubble cells
              result.append("<tr>");
              result.append("<td class=\"xmlLabel");
              if (disabledElement) {
                  // element is disabled, mark it with css
                  result.append("Disabled");
              }
  
              result.append("\">");
              result.append(keyDefault(A_CmsWidget.getLabelKey(p), p.getName()));
              if (count > 1) {
                  result.append(" [").append(p.getIndex() + 1).append("]");
              }
              result.append(": </td>");
              if (p.getIndex() == 0) {
                  // show help bubble only on first element of each content definition
                  result.append(p.getWidget().getHelpBubble(getCms(), this, p));
              } else {
                  // create empty cell for all following elements
                  result.append(dialogHorizontalSpacer(16));
              }
  
              // append individual widget html cell if element is enabled
              if (!disabledElement) {
                  // this is a simple type, display widget
                  result.append(widget.getDialogWidget(getCms(), this, p));
              } else {
                  // disabled element, show message for optional element
                  result.append("<td class=\"xmlTdDisabled maxwidth\">");
                  result.append(key(Messages.GUI_EDITOR_WIDGET_OPTIONALELEMENT_0));
                  result.append("</td>");
              }
  
              // append add and remove element buttons if required
              result.append(dialogHorizontalSpacer(5));
              result.append("<td>");
              if (addValue || removeValue) {
                  result.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
  
                  if (!addValue) {
                      result.append(dialogHorizontalSpacer(25));
                  } else {
                      result.append(
                          "<td><table class=\"editorbuttonbackground\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
                      result.append(buildAddElement(base.getName(), p.getIndex(), addValue));
                  }
  
                  if (removeValue) {
                      if (!addValue) {
                          result.append(
                              "<td><table class=\"editorbuttonbackground\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr>");
                      }
                      result.append(buildRemoveElement(base.getName(), p.getIndex(), removeValue));
                  }
  
                  result.append("</tr></table></td>");
                  result.append("</tr></table>");
              }
              result.append("</td>");
              // close row
              result.append("</tr>\n");
          }
  
          return result.toString();
      }