Esempio n. 1
0
  private List<Pista> getPistas(
      String uuid, String name, String estado, String esporte, String responsavelUuid) {
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    List<Pista> pistas = new ArrayList<>();
    try {
      SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
      queryBuilder.setTables(
          TABLE
              + " INNER JOIN "
              + LocalDAO.TABLE
              + " ON "
              + Columns._UUID.getColumnNameWithTable()
              + " = "
              + LocalDAO.Columns._UUID.getColumnNameWithTable()
              + " LEFT OUTER JOIN "
              + HorarioDAO.TABLE
              + " ON "
              + Columns._UUID.getColumnNameWithTable()
              + " = "
              + HorarioDAO.Columns._UUID.getColumnNameWithTable()
              + " LEFT OUTER JOIN "
              + LocalizavelEsporteDAO.TABLE
              + " ON "
              + Columns._UUID.getColumnNameWithTable()
              + " = "
              + LocalizavelEsporteDAO.Columns._UUID.getColumnNameWithTable()
              + " INNER JOIN "
              + EsporteDAO.TABLE
              + " ON "
              + LocalizavelEsporteDAO.Columns._ESPORTE_ID.getColumnNameWithTable()
              + " = "
              + EsporteDAO.Columns._ID.getColumnNameWithTable());

      StringBuilder selection = new StringBuilder("1 = 1");
      List<String> selectionArgs = new ArrayList<>();
      if (uuid != null && !uuid.isEmpty()) {
        selection.append(" AND ").append(Columns._UUID.getColumnNameWithTable()).append(" = ? ");
        selectionArgs.add(uuid);
      }
      if (name != null && !name.isEmpty()) {
        selection.append(" AND ").append(Columns._NOME.getColumnNameWithTable()).append(" LIKE ? ");
        selectionArgs.add(name + "%");
      }
      if (estado != null && !estado.isEmpty()) {
        selection
            .append(" AND ")
            .append(LocalDAO.Columns._ESTADO.getColumnNameWithTable())
            .append(" = ? ");
        selectionArgs.add(estado);
      }
      if (esporte != null && !esporte.isEmpty()) {
        selection
            .append(" AND ")
            .append(EsporteDAO.Columns._CATEGORIA.getColumnNameWithTable())
            .append(" = ? ");
        selectionArgs.add(esporte);
      }
      if (responsavelUuid != null && !responsavelUuid.isEmpty()) {
        selection
            .append(" AND ")
            .append(Columns._RESPONSAVEL_UUID.getColumnNameWithTable())
            .append(" = ? ");
        selectionArgs.add(responsavelUuid);
      }

      Cursor cursor =
          queryBuilder.query(
              db,
              getColumnsProjectionWithAlias(
                  Columns.class, LocalDAO.Columns.class, HorarioDAO.Columns.class),
              selection.toString(),
              selectionArgs.toArray(new String[selectionArgs.size()]),
              getGroupBy(Columns.class, LocalDAO.Columns.class, HorarioDAO.Columns.class),
              null,
              null);
      if (cursor.moveToFirst()) {
        do {
          Pista pista = getPista(cursor, true);
          pista.setLocal(localDAO.getLocal(cursor, true));
          pista.setHorario(horarioDAO.getHorario(cursor, true));
          pista.setEsportes(localizavelEsporteDAO.getEsportes(db, pista.getUuid()));
          pistas.add(pista);
        } while (cursor.moveToNext());
      }
      cursor.close();
    } catch (Exception ex) {
      Log.e(TAG, "Error getting pistas.", ex);
    } finally {
      dbHelper.close(db);
    }
    return pistas;
  }