/**
   * Produce the contents of a column name cell. The cell should link to a page for the column. It
   * should also have a tooltip with a description to the column and links for relevant hints (joins
   * and filters);
   */
  String nameCell(DBColumn column) {
    log.args(column);
    int width = maxWidth(column);
    String columnName = breakUp(column.name);

    if (columnName.length() > width) {
      columnName = columnName.substring(0, width);
    }
    Label text = Label.of(columnName);
    URIObject target = column.linkTo().getTarget();
    ImmutableList<DBColumn> joins = destinationColumns(column, hints.getJoinsFor(column));
    ImmutableList<DBRowFilter> filters = hints.getFiltersFor(column);
    Tooltip tooltip = ColumnNameTooltip.columnJoinsFilters(column, joins, filters);
    String link = Link.textTargetTip(text, target, tooltip).toString();
    Keyness keyness = column.keyness;
    if (keyness == DBColumn.Keyness.NONE) {
      return link;
    }
    if (keyness == DBColumn.Keyness.PRIMARY) {
      return tags.img("Primary key", Icons.PRIMARY_KEY) + link;
    }
    if (keyness == DBColumn.Keyness.FOREIGN) {
      return tags.img("Foreign key", Icons.FOREIGN_KEY) + link;
    }
    throw new IllegalArgumentException("" + keyness);
  }
  private DBResultSetRenderer(
      DBResultSet results, ImmutableList<Order> orders, Hints hints, ClientInfo client) {
    this.results = notNull(results);
    this.orders = notNull(orders);
    this.hints = notNull(hints);
    this.client = notNull(client);

    tags = HTMLTags.of();
  }
 /** The rows that contain all of the result set values. */
 String valueRows() {
   StringBuilder out = new StringBuilder();
   CSS cssClass = CSS.ODD_ROW;
   for (DBRow row : results.rows) {
     out.append("<tr class=\"" + cssClass + "\">");
     for (DBColumn column : results.columns) {
       Cell cell = Cell.at(row, column);
       DBValue value = results.getValue(row, column);
       out.append(tags.td(valueCell(cell, value)));
     }
     out.append("</tr>\r");
     if (cssClass == CSS.EVEN_ROW) {
       cssClass = CSS.ODD_ROW;
     } else {
       cssClass = CSS.EVEN_ROW;
     }
   }
   return out.toString();
 }
 public String tdRowspan(String s, int width) {
   return "<td rowspan=" + tags.q(width) + ">" + s + "</td>";
 }