Java tutorial
/* * PinDroid - http://code.google.com/p/PinDroid/ * * Copyright (C) 2010 Matt Schmidt * * PinDroid is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 3 of the License, * or (at your option) any later version. * * PinDroid is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PinDroid; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ package com.pindroid.platform; import java.util.ArrayList; import com.pindroid.providers.ContentNotFoundException; import com.pindroid.providers.NoteContent.Note; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; import android.support.v4.content.CursorLoader; import android.text.TextUtils; public class NoteManager { public static CursorLoader GetNotes(String account, String sortorder, Context context) { final String[] projection = new String[] { Note._ID, Note.Title, Note.Text, Note.Hash, Note.Pid, Note.Account, Note.Added, Note.Updated }; final String selection = Note.Account + "=?"; final String[] selectionargs = new String[] { account }; return new CursorLoader(context, Note.CONTENT_URI, projection, selection, selectionargs, sortorder); } public static Note GetById(int id, Context context) throws ContentNotFoundException { final String[] projection = new String[] { Note.Account, Note.Title, Note.Text, Note.Pid, Note.Hash, Note.Added, Note.Updated }; Uri uri = ContentUris.appendId(Note.CONTENT_URI.buildUpon(), id).build(); Cursor c = context.getContentResolver().query(uri, projection, null, null, null); if (c.moveToFirst()) { final int accountColumn = c.getColumnIndex(Note.Account); final int titleColumn = c.getColumnIndex(Note.Title); final int textColumn = c.getColumnIndex(Note.Text); final int pidColumn = c.getColumnIndex(Note.Pid); final int hashColumn = c.getColumnIndex(Note.Hash); final int addedColumn = c.getColumnIndex(Note.Added); final int updatedColumn = c.getColumnIndex(Note.Updated); Note n = new Note(id, c.getString(titleColumn), c.getString(textColumn), c.getString(accountColumn), c.getString(hashColumn), c.getString(pidColumn), c.getLong(addedColumn), c.getLong(updatedColumn)); c.close(); return n; } else { c.close(); throw new ContentNotFoundException(); } } public static void BulkInsert(ArrayList<Note> list, String account, Context context) { int notesize = list.size(); ContentValues[] ncv = new ContentValues[notesize]; for (int i = 0; i < notesize; i++) { Note n = list.get(i); ContentValues values = new ContentValues(); values.put(Note.Title, n.getTitle()); values.put(Note.Text, n.getText()); values.put(Note.Account, account); values.put(Note.Hash, n.getHash()); values.put(Note.Pid, n.getPid()); values.put(Note.Added, n.getAdded()); values.put(Note.Updated, n.getUpdated()); ncv[i] = values; } context.getContentResolver().bulkInsert(Note.CONTENT_URI, ncv); } public static void TruncateNotes(String account, Context context) { final String selection = Note.Account + "=?"; final String[] selectionargs = new String[] { account }; context.getContentResolver().delete(Note.CONTENT_URI, selection, selectionargs); } public static void TruncateOldNotes(ArrayList<String> accounts, Context context) { final ArrayList<String> selectionList = new ArrayList<String>(); for (String s : accounts) { selectionList.add(Note.Account + " <> '" + s + "'"); } final String selection = TextUtils.join(" AND ", selectionList); context.getContentResolver().delete(Note.CONTENT_URI, selection, null); } public static void UpsertNote(Note note, String account, Context context) { final String[] projection = new String[] { Note.Pid, Note.Account, Note.Hash }; final String selection = Note.Pid + "=? AND " + Note.Account + "=?"; final String[] selectionargs = new String[] { note.getPid(), account }; final Cursor c = context.getContentResolver().query(Note.CONTENT_URI, projection, selection, selectionargs, null); if (c.moveToFirst()) { final int hashColumn = c.getColumnIndex(Note.Hash); final String hash = c.getString(hashColumn); if (!hash.equals(note.getHash())) { note.setHash(null); } UpdateNote(note, account, context); } else { AddNote(note, account, context); } c.close(); } public static void AddNote(Note note, String account, Context context) { final ContentValues values = new ContentValues(); values.put(Note.Title, note.getTitle()); values.put(Note.Hash, note.getHash()); values.put(Note.Text, note.getText()); values.put(Note.Pid, note.getPid()); values.put(Note.Added, note.getAdded()); values.put(Note.Updated, note.getUpdated()); values.put(Note.Account, note.getAccount()); context.getContentResolver().insert(Note.CONTENT_URI, values); } public static void UpdateNote(Note note, String account, Context context) { final String selection = Note.Pid + "=? AND " + Note.Account + "=?"; final String[] selectionargs = new String[] { note.getPid(), account }; final ContentValues values = new ContentValues(); values.put(Note.Title, note.getTitle()); values.put(Note.Hash, note.getHash()); values.put(Note.Text, note.getText()); values.put(Note.Pid, note.getPid()); values.put(Note.Added, note.getAdded()); values.put(Note.Updated, note.getUpdated()); values.put(Note.Account, note.getAccount()); context.getContentResolver().update(Note.CONTENT_URI, values, selection, selectionargs); } public static Note CursorToNote(Cursor c) { Note n = new Note(); n.setId(c.getInt(c.getColumnIndex(BaseColumns._ID))); n.setTitle(c.getString(c.getColumnIndex(Note.Title))); n.setText(c.getString(c.getColumnIndex(Note.Text))); if (c.getColumnIndex(Note.Account) != -1) n.setAccount(c.getString(c.getColumnIndex(Note.Account))); return n; } public static CursorLoader SearchNotes(String query, String username, Context context) { final String[] projection = new String[] { Note._ID, Note.Title, Note.Text, Note.Hash, Note.Pid, Note.Account, Note.Added, Note.Updated }; String selection = null; final String sortorder = Note.Updated + " ASC"; final ArrayList<String> selectionlist = new ArrayList<String>(); ArrayList<String> queryList = new ArrayList<String>(); for (String s : query.split(" ")) { queryList.add("(" + Note.Title + " LIKE ? OR " + Note.Text + " LIKE ?)"); selectionlist.add("%" + s + "%"); selectionlist.add("%" + s + "%"); } selectionlist.add(username); if (query != null && query != "") { selection = "(" + TextUtils.join(" OR ", queryList) + ")" + " AND " + Note.Account + "=?"; } else { selection = Note.Account + "=?"; } return new CursorLoader(context, Note.CONTENT_URI, projection, selection, selectionlist.toArray(new String[] {}), sortorder); } }