public CellValue<Long> makeNewRowNumberCellValue(Long initialValue) {
   // Rows are 0-based internally but 1-based in the UI
   CellValue<Long> cv = makeNewLongCellValue(initialValue);
   if (initialValue != null) {
     cv.setValue(initialValue);
   }
   return cv;
 }
  /**
   * Convert a type-safe UI CellValue into a type-safe Model CellValue
   *
   * @param column Model column from which data-type can be derived
   * @param cell UI CellValue to convert into Model CellValue
   * @return
   */
  public DTCellValue52 convertToModelCell(BaseColumn column, CellValue<?> cell) {
    DataType.DataTypes dt = utilities.getDataType(column);
    DTCellValue52 dtCell = null;

    switch (dt) {
      case BOOLEAN:
        dtCell = new DTCellValue52((Boolean) cell.getValue());
        break;
      case DATE:
        dtCell = new DTCellValue52((Date) cell.getValue());
        break;
      case NUMERIC:
        dtCell = new DTCellValue52((BigDecimal) cell.getValue());
        break;
      case NUMERIC_BIGDECIMAL:
        dtCell = new DTCellValue52((BigDecimal) cell.getValue());
        break;
      case NUMERIC_BIGINTEGER:
        dtCell = new DTCellValue52((BigInteger) cell.getValue());
        break;
      case NUMERIC_BYTE:
        dtCell = new DTCellValue52((Byte) cell.getValue());
        break;
      case NUMERIC_DOUBLE:
        dtCell = new DTCellValue52((Double) cell.getValue());
        break;
      case NUMERIC_FLOAT:
        dtCell = new DTCellValue52((Float) cell.getValue());
        break;
      case NUMERIC_INTEGER:
        dtCell = new DTCellValue52((Integer) cell.getValue());
        break;
      case NUMERIC_LONG:
        dtCell = new DTCellValue52((Long) cell.getValue());
        break;
      case NUMERIC_SHORT:
        dtCell = new DTCellValue52((Short) cell.getValue());
        break;
      default:
        dtCell = new DTCellValue52((String) cell.getValue());
    }
    dtCell.setOtherwise(cell.isOtherwise());
    return dtCell;
  }