StatusProvider.java :  » Calendar » kolab-android » at » dasz » KolabDroid » Provider » Android Open Source

Android Open Source » Calendar » kolab android 
kolab android » at » dasz » KolabDroid » Provider » StatusProvider.java
/*
 * Copyright 2010 Arthur Zaczek <arthur@dasz.at>, dasz.at OG; All rights reserved.
 * Copyright 2010 David Schmitt <david@dasz.at>, dasz.at OG; All rights reserved.
 *
 *  This file is part of Kolab Sync for Android.

 *  Kolab Sync for Android 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.

 *  Kolab Sync for Android 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 Kolab Sync for Android.
 *  If not, see <http://www.gnu.org/licenses/>.
 */

package at.dasz.KolabDroid.Provider;

import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import at.dasz.KolabDroid.Sync.StatusEntry;

public class StatusProvider
{
  public final static String    STATUS_TABLE_NAME    = "Status";

  public final static String    COL_time        = "time";
  public final static String    COL_task        = "task";

  public final static String    COL_items        = "items";

  public final static String    COL_localChanged    = "localChanged";
  public final static String    COL_remoteChanged    = "remoteChanged";

  public final static String    COL_localNew      = "localNew";
  public final static String    COL_remoteNew      = "remoteNew";

  public final static String    COL_localDeleted    = "localDeleted";
  public final static String    COL_remoteDeleted    = "remoteDeleted";

  public final static String    COL_conflicted      = "conflicted";
  public final static String    COL_errors        = "errors";
  public final static String    COL_fatalErrorMsg    = "fatalErrorMsg";

  public final static int      COL_IDX_time      = 1;
  public final static int      COL_IDX_task      = 2;

  public final static int      COL_IDX_items      = 3;

  public final static int      COL_IDX_localChanged  = 4;
  public final static int      COL_IDX_remoteChanged  = 5;

  public final static int      COL_IDX_localNew    = 6;
  public final static int      COL_IDX_remoteNew    = 7;

  public final static int      COL_IDX_localDeleted  = 8;
  public final static int      COL_IDX_remoteDeleted  = 9;

  public final static int      COL_IDX_conflicted    = 10;
  public final static int      COL_IDX_errors      = 11;
  public final static int      COL_IDX_fatalErrorMsg  = 12;

  public static final String[]  DEFAULT_PROJECTION    = new String[] {
      DatabaseHelper.COL_ID, // 0
      COL_time, // 1
      COL_task, // 2
      COL_items, // 3
      COL_localChanged, // 4
      COL_remoteChanged, // 5
      COL_localNew, // 6
      COL_remoteNew, // 7
      COL_localDeleted, // 8
      COL_remoteDeleted, // 9
      COL_conflicted, // 10
      COL_errors, // 11
      COL_fatalErrorMsg, // 12
                              };

  private DatabaseHelper      dbHelper;

  public StatusProvider(Context ctx)
  {
    dbHelper = new DatabaseHelper(ctx);
  }

  public void close()
  {
    dbHelper.close();
  }

  private Cursor getCursor(SQLiteDatabase db, String[] projectionIn,
      String selection, String[] selectionArgs, String groupBy,
      String having, String sortOrder)
  {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    qb.setTables(STATUS_TABLE_NAME);
    return qb.query(db, projectionIn, selection, selectionArgs, groupBy,
        having, sortOrder);
  }

  public StatusEntry getStatusEntry(int id)
  {
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor c = null;
    try
    {
      c = getCursor(db, DEFAULT_PROJECTION, DatabaseHelper.COL_ID
          + " = ?", new String[] { Integer.toString(id) }, null,
          null, null);
      if (c.moveToFirst()) return new StatusEntry(c);
      return null;
    }
    finally
    {
      if (c != null) c.close();
      if (db != null) db.close();
    }
  }

  public StatusEntry getLastStatusEntry(String task)
  {
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor c = null;
    try
    {
      c = getCursor(db, DatabaseHelper.ID_PROJECTION, "MAX(" + COL_time
          + ") AND " + COL_task + "= ?", new String[] { task }, null,
          null, null);
      if (c.moveToFirst()) return getStatusEntry(c
          .getInt(DatabaseHelper.COL_IDX_ID));
      return null;
    }
    finally
    {
      if (c != null) c.close();
      if (db != null) db.close();
    }
  }

  public ArrayList<StatusEntry> getLastStatusEntries()
  {
    ArrayList<StatusEntry> result = new ArrayList<StatusEntry>();

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor c = null;
    try
    {
      c = getCursor(db, DEFAULT_PROJECTION, null, null, null, null,
          COL_time + " DESC");
      while (c.moveToNext())
      {
        result.add(new StatusEntry(c));
      }
    }
    finally
    {
      if (c != null) c.close();
      if (db != null) db.close();
    }

    return result;
  }

  public void saveStatusEntry(StatusEntry entry)
  {
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    try
    {
      if (entry.getId() != 0)
      {
        db.update(STATUS_TABLE_NAME, entry.toContentValues(),
            DatabaseHelper.COL_ID + " = " + entry.getId(), null);
      }
      else
      {
        long rowId = db.insertOrThrow(STATUS_TABLE_NAME, null, entry
            .toContentValues());
        entry.setId(rowId);
      }
    }
    finally
    {
      if (db != null) db.close();
    }
  }

  public void deleteStatusEntry(StatusEntry entry)
  {
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    try
    {
      db.delete(STATUS_TABLE_NAME, DatabaseHelper.COL_ID + " = "
          + entry.getId(), null);
    }
    finally
    {
      if (db != null) db.close();
    }
  }

  public void clearAllEntries()
  {
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    try
    {
      db.execSQL("DELETE FROM " + StatusProvider.STATUS_TABLE_NAME);
    }
    finally
    {
      if (db != null) db.close();
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.