public static <T> T inflate(Cursor cursor, TableDetails tableDetails) {
    T dataModelObject;

    try {
      dataModelObject = (T) tableDetails.createNewModelInstance();
    } catch (Exception ex) {
      throw new QuantumFluxException(
          "Could not create a new instance of data model object: " + tableDetails.getTableName());
    }

    for (int i = 0; i < cursor.getColumnCount(); i++) {
      String columnName = cursor.getColumnName(i);
      TableDetails.ColumnDetails columnDetails = tableDetails.findColumn(columnName);
      inflateColumn(cursor, dataModelObject, columnDetails, i);
    }

    return dataModelObject;
  }