public int getWarnaRgbStabilo(int ari) {
   // cek dulu ada ato ga
   Cursor c =
       helper
           .getReadableDatabase()
           .query(
               Db.TABEL_Bukmak2,
               null,
               Db.Bukmak2.ari + "=? and " + Db.Bukmak2.jenis + "=?",
               new String[] {String.valueOf(ari), String.valueOf(Db.Bukmak2.jenis_stabilo)},
               null,
               null,
               null); //$NON-NLS-1$ //$NON-NLS-2$
   try {
     if (c.moveToNext()) {
       // sudah ada!
       Bookmark2 bukmak = Bookmark2.dariCursor(c);
       return U.decodeHighlight(bukmak.tulisan);
     } else {
       return -1;
     }
   } finally {
     c.close();
   }
 }
 /** @return null when not found */
 public TLongList listLabelIds(long bukmak2_id) {
   TLongList res = null;
   Cursor cursor =
       helper
           .getReadableDatabase()
           .rawQuery(
               "select "
                   + Db.TABEL_Bukmak2_Label
                   + "."
                   + Db.Bukmak2_Label.label_id
                   + " from "
                   + Db.TABEL_Bukmak2_Label
                   + " where "
                   + Db.TABEL_Bukmak2_Label
                   + "."
                   + Db.Bukmak2_Label.bukmak2_id
                   + "=?",
               new String[] {
                 String.valueOf(bukmak2_id)
               }); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$//$NON-NLS-6$
   try {
     int col_label_id = cursor.getColumnIndexOrThrow(Db.Bukmak2_Label.label_id);
     while (cursor.moveToNext()) {
       if (res == null) res = new TLongArrayList();
       res.add(cursor.getLong(col_label_id));
     }
   } finally {
     cursor.close();
   }
   return res;
 }
  /**
   * @param map_0 adalah ayat, basis 0
   * @return null kalau ga ada warna stabilo, atau int[] kalau ada, sesuai offset map_0.
   */
  public int[] putAtribut(int ari_kitabpasal, int[] map_0) {
    int ariMin = ari_kitabpasal & 0x00ffff00;
    int ariMax = ari_kitabpasal | 0x000000ff;
    int[] res = null;

    sql_getCatatan_params[0] = String.valueOf(ariMin);
    sql_getCatatan_params[1] = String.valueOf(ariMax);
    Cursor cursor =
        helper
            .getReadableDatabase()
            .rawQuery(
                "select * from "
                    + Db.TABEL_Bukmak2
                    + " where "
                    + Db.Bukmak2.ari
                    + ">=? and "
                    + Db.Bukmak2.ari
                    + "<?",
                sql_getCatatan_params); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    try {
      int kolom_jenis = cursor.getColumnIndexOrThrow(Db.Bukmak2.jenis);
      int kolom_ari = cursor.getColumnIndexOrThrow(Db.Bukmak2.ari);
      int kolom_tulisan = cursor.getColumnIndexOrThrow(Db.Bukmak2.tulisan);
      while (cursor.moveToNext()) {
        int ari = cursor.getInt(kolom_ari);
        int jenis = cursor.getInt(kolom_jenis);

        int ofsetMap = Ari.toVerse(ari) - 1; // dari basis1 ke basis 0
        if (ofsetMap >= map_0.length) {
          Log.e(
              TAG,
              "ofsetMap kebanyakan "
                  + ofsetMap
                  + " terjadi pada ari 0x"
                  + Integer.toHexString(ari)); // $NON-NLS-1$ //$NON-NLS-2$
        } else {
          if (jenis == Db.Bukmak2.kind_bookmark) {
            map_0[ofsetMap] |= 0x1;
          } else if (jenis == Db.Bukmak2.kind_note) {
            map_0[ofsetMap] |= 0x2;
          } else if (jenis == Db.Bukmak2.jenis_stabilo) {
            map_0[ofsetMap] |= 0x4;

            String tulisan = cursor.getString(kolom_tulisan);
            int warnaRgb = U.decodeHighlight(tulisan);

            if (res == null) res = new int[map_0.length];
            res[ofsetMap] = warnaRgb;
          }
        }
      }
    } finally {
      cursor.close();
    }
    return res;
  }
  public int getWarnaRgbStabilo(int ariKp, IntArrayList terpilih) {
    int ariMin = ariKp;
    int ariMax = ariKp | 0xff;
    int[] xwarna = new int[256];
    int res = -2;

    for (int i = 0; i < xwarna.length; i++) xwarna[i] = -1;

    // cek dulu ada ato ga
    Cursor c =
        helper
            .getReadableDatabase()
            .query(
                Db.TABEL_Bukmak2,
                null,
                Db.Bukmak2.ari + ">? and " + Db.Bukmak2.ari + "<=? and " + Db.Bukmak2.jenis + "=?",
                new String[] {
                  String.valueOf(ariMin),
                  String.valueOf(ariMax),
                  String.valueOf(Db.Bukmak2.jenis_stabilo)
                },
                null,
                null,
                null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    try {
      int ari_col = c.getColumnIndexOrThrow(Db.Bukmak2.ari);
      int tulisan_col = c.getColumnIndexOrThrow(Db.Bukmak2.tulisan);

      // masukin aja ke array dulu
      while (c.moveToNext()) {
        int ari = c.getInt(ari_col);
        int index = ari & 0xff;
        int warna = U.decodeHighlight(c.getString(tulisan_col));
        xwarna[index] = warna;
      }

      // tentukan warna default. Kalau semua berwarna x, maka jadi x. Kalau ada salah satu yang
      // bukan x, jadi -1;
      for (int i = 0; i < terpilih.size(); i++) {
        int ayat_1 = terpilih.get(i);
        int warna = xwarna[ayat_1];
        if (res == -2) {
          res = warna;
        } else if (warna != res) {
          return -1;
        }
      }

      if (res == -2) return -1;
      return res;
    } finally {
      c.close();
    }
  }
 public int getUrutanTerbesarLabel() {
   SQLiteDatabase db = helper.getReadableDatabase();
   SQLiteStatement stmt =
       db.compileStatement(
           "select max("
               + Db.Label.urutan
               + ") from "
               + Db.TABEL_Label); // $NON-NLS-1$//$NON-NLS-2$
   try {
     return (int) stmt.simpleQueryForLong();
   } finally {
     stmt.close();
   }
 }
 public int countBukmakDenganLabel(Label label) {
   SQLiteDatabase db = helper.getReadableDatabase();
   SQLiteStatement stmt =
       db.compileStatement(
           "select count(*) from "
               + Db.TABEL_Bukmak2_Label
               + " where "
               + Db.Bukmak2_Label.label_id
               + "=?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
   try {
     stmt.bindLong(1, label._id);
     return (int) stmt.simpleQueryForLong();
   } finally {
     stmt.close();
   }
 }
 /** @return null when not found */
 public List<Label> listLabels(long bukmak2_id) {
   List<Label> res = null;
   Cursor cursor =
       helper
           .getReadableDatabase()
           .rawQuery(
               "select "
                   + Db.TABEL_Label
                   + ".* from "
                   + Db.TABEL_Label
                   + ", "
                   + Db.TABEL_Bukmak2_Label
                   + " where "
                   + Db.TABEL_Bukmak2_Label
                   + "."
                   + Db.Bukmak2_Label.label_id
                   + " = "
                   + Db.TABEL_Label
                   + "."
                   + BaseColumns._ID
                   + " and "
                   + Db.TABEL_Bukmak2_Label
                   + "."
                   + Db.Bukmak2_Label.bukmak2_id
                   + " = ?  order by "
                   + Db.TABEL_Label
                   + "."
                   + Db.Label.urutan
                   + " asc",
               new String[] {
                 String.valueOf(bukmak2_id)
               }); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$//$NON-NLS-6$//$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
   try {
     while (cursor.moveToNext()) {
       if (res == null) res = new ArrayList<Label>();
       res.add(Label.fromCursor(cursor));
     }
   } finally {
     cursor.close();
   }
   return res;
 }
 public boolean adakahEdisiYesDenganNamafile(String namafile) {
   SQLiteDatabase db = helper.getReadableDatabase();
   SQLiteStatement stmt =
       db.compileStatement(
           "select count(*) from "
               + Db.TABEL_Edisi
               + " where "
               + Db.Edisi.jenis
               + "=? and "
               + Db.Edisi.namafile
               + "=?"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
   try {
     stmt.clearBindings();
     stmt.bindLong(1, Db.Edisi.jenis_yes);
     stmt.bindString(2, namafile);
     return stmt.simpleQueryForLong() > 0;
   } finally {
     stmt.close();
   }
 }
  /** Coba ambil artikel dari db lokal. Artikel ga siap pakai pun akan direturn. */
  public IArtikel cobaAmbilRenungan(String nama, String tgl) {
    Cursor c =
        helper
            .getReadableDatabase()
            .query(
                Db.TABEL_Renungan,
                null,
                Db.Renungan.nama + "=? and " + Db.Renungan.tgl + "=?",
                new String[] {nama, tgl},
                null,
                null,
                null); //$NON-NLS-1$ //$NON-NLS-2$
    try {
      if (c.moveToNext()) {
        IArtikel res = null;
        if (nama.equals("rh")) { // $NON-NLS-1$
          res =
              new ArtikelRenunganHarian(
                  tgl,
                  c.getString(c.getColumnIndexOrThrow(Db.Renungan.judul)),
                  c.getString(c.getColumnIndexOrThrow(Db.Renungan.header)),
                  c.getString(c.getColumnIndexOrThrow(Db.Renungan.isi)),
                  c.getInt(c.getColumnIndexOrThrow(Db.Renungan.siapPakai)) > 0);
        } else if (nama.equals("sh")) { // $NON-NLS-1$
          res =
              new ArtikelSantapanHarian(
                  tgl,
                  c.getString(c.getColumnIndexOrThrow(Db.Renungan.judul)),
                  c.getString(c.getColumnIndexOrThrow(Db.Renungan.header)),
                  c.getString(c.getColumnIndexOrThrow(Db.Renungan.isi)),
                  c.getInt(c.getColumnIndexOrThrow(Db.Renungan.siapPakai)) > 0);
        }

        return res;
      } else {
        return null;
      }
    } finally {
      c.close();
    }
  }
  public Bookmark2 getBukmakById(long id) {
    Cursor cursor =
        helper
            .getReadableDatabase()
            .query(
                Db.TABEL_Bukmak2,
                null,
                "_id=?", //$NON-NLS-1$
                new String[] {String.valueOf(id)},
                null,
                null,
                null);

    try {
      if (!cursor.moveToNext()) return null;

      return Bookmark2.dariCursor(cursor);
    } finally {
      cursor.close();
    }
  }
 public Label getLabelById(long labelId) {
   SQLiteDatabase db = helper.getReadableDatabase();
   Cursor cursor =
       db.query(
           Db.TABEL_Label,
           null,
           BaseColumns._ID + "=?",
           new String[] {String.valueOf(labelId)},
           null,
           null,
           null); //$NON-NLS-1$
   try {
     if (cursor.moveToNext()) {
       return Label.fromCursor(cursor);
     } else {
       return null;
     }
   } finally {
     cursor.close();
   }
 }
 public List<Label> listSemuaLabel() {
   List<Label> res = new ArrayList<Label>();
   Cursor cursor =
       helper
           .getReadableDatabase()
           .query(
               Db.TABEL_Label,
               null,
               null,
               null,
               null,
               null,
               Db.Label.urutan + " asc"); // $NON-NLS-1$
   try {
     while (cursor.moveToNext()) {
       res.add(Label.fromCursor(cursor));
     }
   } finally {
     cursor.close();
   }
   return res;
 }
  public List<MVersionYes> listAllVersions() {
    List<MVersionYes> res = new ArrayList<MVersionYes>();
    Cursor cursor =
        helper
            .getReadableDatabase()
            .query(
                Db.TABEL_Edisi,
                null,
                null,
                null,
                null,
                null,
                Db.Edisi.urutan + " asc"); // $NON-NLS-1$
    try {
      int col_aktif = cursor.getColumnIndexOrThrow(Db.Edisi.aktif);
      int col_shortName = cursor.getColumnIndexOrThrow(Db.Edisi.shortName);
      int col_judul = cursor.getColumnIndexOrThrow(Db.Edisi.judul);
      int col_keterangan = cursor.getColumnIndexOrThrow(Db.Edisi.keterangan);
      int col_namafile = cursor.getColumnIndexOrThrow(Db.Edisi.namafile);
      int col_namafile_pdbasal = cursor.getColumnIndexOrThrow(Db.Edisi.namafile_pdbasal);
      int col_urutan = cursor.getColumnIndexOrThrow(Db.Edisi.urutan);

      while (cursor.moveToNext()) {
        MVersionYes yes = new MVersionYes();
        yes.cache_active = cursor.getInt(col_aktif) != 0;
        yes.type = Db.Edisi.jenis_yes;
        yes.description = cursor.getString(col_keterangan);
        yes.shortName = cursor.getString(col_shortName);
        yes.longName = cursor.getString(col_judul);
        yes.filename = cursor.getString(col_namafile);
        yes.originalPdbFilename = cursor.getString(col_namafile_pdbasal);
        yes.ordering = cursor.getInt(col_urutan);
        res.add(yes);
      }
    } finally {
      cursor.close();
    }
    return res;
  }
  public Bookmark2 getBukmakByAri(int ari, int jenis) {
    Cursor cursor =
        helper
            .getReadableDatabase()
            .query(
                Db.TABEL_Bukmak2,
                new String[] {
                  BaseColumns._ID, Db.Bukmak2.tulisan, Db.Bukmak2.waktuTambah, Db.Bukmak2.waktuUbah
                },
                Db.Bukmak2.ari + "=? and " + Db.Bukmak2.jenis + "=?", // $NON-NLS-1$ //$NON-NLS-2$
                new String[] {String.valueOf(ari), String.valueOf(jenis)},
                null,
                null,
                null);

    try {
      if (!cursor.moveToNext()) return null;

      return Bookmark2.dariCursor(cursor, ari, jenis);
    } finally {
      cursor.close();
    }
  }
  public int countAtribut(int ari_kitabpasal) {
    int ariMin = ari_kitabpasal & 0x00ffff00;
    int ariMax = ari_kitabpasal | 0x000000ff;

    if (stmt_countAtribut == null) {
      stmt_countAtribut =
          helper
              .getReadableDatabase()
              .compileStatement(
                  "select count(*) from "
                      + Db.TABEL_Bukmak2
                      + " where "
                      + Db.Bukmak2.ari
                      + ">=? and "
                      + Db.Bukmak2.ari
                      + "<?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
    }

    stmt_countAtribut.clearBindings();
    stmt_countAtribut.bindLong(1, ariMin);
    stmt_countAtribut.bindLong(2, ariMax);

    return (int) stmt_countAtribut.simpleQueryForLong();
  }
  public Cursor listBukmak(int jenis, long labelId, String sortColumn, boolean sortAscending) {
    SQLiteDatabase db = helper.getReadableDatabase();

    String sortClause =
        sortColumn
            + (Db.Bukmak2.tulisan.equals(sortColumn) ? " collate NOCASE " : "")
            + (sortAscending
                ? " asc"
                : " desc"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

    if (labelId == 0) { // no restrictions
      return db.query(
          Db.TABEL_Bukmak2,
          null,
          Db.Bukmak2.jenis + "=?",
          new String[] {String.valueOf(jenis)},
          null,
          null,
          sortClause); //$NON-NLS-1$
    } else if (labelId == BookmarkListActivity.LABELID_noLabel) { // only without label
      return db.rawQuery(
          "select "
              + Db.TABEL_Bukmak2
              + ".* from "
              + Db.TABEL_Bukmak2
              + " where "
              + Db.TABEL_Bukmak2
              + "."
              + Db.Bukmak2.jenis
              + "=? and "
              + Db.TABEL_Bukmak2
              + "."
              + BaseColumns._ID
              + " not in (select "
              + Db.Bukmak2_Label.bukmak2_id
              + " from "
              + Db.TABEL_Bukmak2_Label
              + ") order by "
              + Db.TABEL_Bukmak2
              + "."
              + sortClause,
          new String[] {
            String.valueOf(jenis)
          }); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
              // //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$
    } else { // filter by labelId
      return db.rawQuery(
          "select "
              + Db.TABEL_Bukmak2
              + ".* from "
              + Db.TABEL_Bukmak2
              + ", "
              + Db.TABEL_Bukmak2_Label
              + " where "
              + Db.Bukmak2.jenis
              + "=? and "
              + Db.TABEL_Bukmak2
              + "."
              + BaseColumns._ID
              + " = "
              + Db.TABEL_Bukmak2_Label
              + "."
              + Db.Bukmak2_Label.bukmak2_id
              + " and "
              + Db.TABEL_Bukmak2_Label
              + "."
              + Db.Bukmak2_Label.label_id
              + "=? order by "
              + Db.TABEL_Bukmak2
              + "."
              + sortClause,
          new String[] {
            String.valueOf(jenis), String.valueOf(labelId)
          }); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$//$NON-NLS-6$//$NON-NLS-7$//$NON-NLS-8$//$NON-NLS-9$//$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$
    }
  }
 public Cursor listSemuaBukmak() {
   return helper.getReadableDatabase().query(Db.TABEL_Bukmak2, null, null, null, null, null, null);
 }