send contacts to oc instance
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / providers / FileContentProvider.java
diff --git a/src/eu/alefzero/owncloud/providers/FileContentProvider.java b/src/eu/alefzero/owncloud/providers/FileContentProvider.java
new file mode 100644 (file)
index 0000000..683b691
--- /dev/null
@@ -0,0 +1,213 @@
+/* ownCloud Android client application\r
+ *   Copyright (C) 2011  Bartek Przybylski\r
+ *\r
+ *   This program is free software: you can redistribute it and/or modify\r
+ *   it under the terms of the GNU General Public License as published by\r
+ *   the Free Software Foundation, either version 3 of the License, or\r
+ *   (at your option) any later version.\r
+ *\r
+ *   This program is distributed in the hope that it will be useful,\r
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ *   GNU General Public License for more details.\r
+ *\r
+ *   You should have received a copy of the GNU General Public License\r
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
+ *\r
+ */\r
+\r
+package eu.alefzero.owncloud.providers;\r
+\r
+import java.util.HashMap;\r
+\r
+import eu.alefzero.owncloud.db.ProviderMeta;\r
+import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
+\r
+import android.content.ContentProvider;\r
+import android.content.ContentUris;\r
+import android.content.ContentValues;\r
+import android.content.Context;\r
+import android.content.UriMatcher;\r
+import android.database.Cursor;\r
+import android.database.SQLException;\r
+import android.database.sqlite.SQLiteDatabase;\r
+import android.database.sqlite.SQLiteOpenHelper;\r
+import android.database.sqlite.SQLiteQueryBuilder;\r
+import android.net.Uri;\r
+import android.text.TextUtils;\r
+\r
+/**\r
+* The ContentProvider for the ownCloud App.\r
+* @author Bartek Przybylski\r
+* \r
+*/\r
+public class FileContentProvider extends ContentProvider {\r
+\r
+  private DataBaseHelper mDbHelper;\r
+  \r
+  private static HashMap<String, String> mProjectionMap;\r
+  static {\r
+    mProjectionMap = new HashMap<String, String>();\r
+    mProjectionMap.put(ProviderTableMeta._ID,\r
+                       ProviderTableMeta._ID);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_PARENT,\r
+                       ProviderTableMeta.FILE_PARENT);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_PATH,\r
+                       ProviderTableMeta.FILE_PATH);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_NAME,\r
+                       ProviderTableMeta.FILE_NAME);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_CREATION,\r
+                       ProviderTableMeta.FILE_CREATION);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_MODIFIED,\r
+                       ProviderTableMeta.FILE_MODIFIED);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_CONTENT_LENGTH,\r
+                       ProviderTableMeta.FILE_CONTENT_LENGTH);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_CONTENT_TYPE,\r
+                       ProviderTableMeta.FILE_CONTENT_TYPE);\r
+    mProjectionMap.put(ProviderTableMeta.FILE_STORAGE_PATH,\r
+                       ProviderTableMeta.FILE_STORAGE_PATH);\r
+  }\r
+  \r
+  private static final int SINGLE_FILE = 1;\r
+  private static final int DIRECTORY = 2;\r
+  private static final int ROOT_DIRECTORY = 3;\r
+  private static final UriMatcher mUriMatcher;\r
+  static {\r
+    mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);\r
+    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "/", ROOT_DIRECTORY);\r
+    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "file/", SINGLE_FILE);\r
+    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "file/#", SINGLE_FILE);\r
+    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "dir/#", DIRECTORY);\r
+  }\r
+  \r
+  @Override\r
+  public int delete(Uri uri, String where, String[] whereArgs) {\r
+    SQLiteDatabase db = mDbHelper.getWritableDatabase();\r
+    int count = 0;\r
+    switch (mUriMatcher.match(uri)) {\r
+      case SINGLE_FILE:\r
+        count = db.delete(ProviderTableMeta.DB_NAME,\r
+                          ProviderTableMeta._ID + "=" + uri.getPathSegments().get(1)\r
+                          + (!TextUtils.isEmpty(where)?" AND (" + where +")" : ""),\r
+                          whereArgs);\r
+        break;\r
+      case ROOT_DIRECTORY:\r
+        count = db.delete(ProviderTableMeta.DB_NAME, where, whereArgs);\r
+        break;\r
+      default:\r
+        throw new IllegalArgumentException("Unknown uri: " + uri.toString());\r
+    }\r
+    getContext().getContentResolver().notifyChange(uri, null);\r
+    return count;\r
+  }\r
+\r
+  @Override\r
+  public String getType(Uri uri) {\r
+    switch (mUriMatcher.match(uri)) {\r
+      case ROOT_DIRECTORY:\r
+        return ProviderTableMeta.CONTENT_TYPE;\r
+      case SINGLE_FILE:\r
+        return ProviderTableMeta.CONTENT_TYPE_ITEM;\r
+      default:\r
+        throw new IllegalArgumentException("Unknown Uri id." + uri.toString());\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public Uri insert(Uri uri, ContentValues values) {\r
+    if (mUriMatcher.match(uri) != SINGLE_FILE) {\r
+      throw new IllegalArgumentException("Unknown uri id: " + uri);\r
+    }\r
+    \r
+    SQLiteDatabase db = mDbHelper.getWritableDatabase();\r
+    long rowId = db.insert(ProviderTableMeta.DB_NAME, null, values);\r
+    if (rowId > 0) {\r
+      Uri insertedFileUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, rowId);\r
+      getContext().getContentResolver().notifyChange(insertedFileUri, null);\r
+      return insertedFileUri;\r
+    }\r
+    throw new SQLException("ERROR " + uri);\r
+  }\r
+\r
+  @Override\r
+  public boolean onCreate() {\r
+    mDbHelper = new DataBaseHelper(getContext());\r
+    return true;\r
+  }\r
+\r
+  @Override\r
+  public Cursor query(Uri uri, String[] projection, String selection,\r
+      String[] selectionArgs, String sortOrder) {\r
+    SQLiteQueryBuilder sqlQuery = new SQLiteQueryBuilder();\r
+        \r
+    sqlQuery.setTables(ProviderTableMeta.DB_NAME);\r
+    sqlQuery.setProjectionMap(mProjectionMap);\r
+    \r
+    switch (mUriMatcher.match(uri)) {\r
+      case ROOT_DIRECTORY:\r
+        sqlQuery.appendWhere(ProviderTableMeta.FILE_PARENT + " is null");\r
+        break;\r
+      case DIRECTORY:\r
+        sqlQuery.appendWhere(ProviderTableMeta.FILE_PARENT + "="+uri.getPathSegments().get(1));\r
+        break;\r
+      case SINGLE_FILE:\r
+        if (uri.getPathSegments().size() > 1) {\r
+          sqlQuery.appendWhere(ProviderTableMeta._ID + "=" +\r
+                               uri.getPathSegments().get(1));\r
+        }\r
+        break;\r
+      default:\r
+        throw new IllegalArgumentException("Unknown uri id: " + uri);\r
+    }\r
+    \r
+    String order;\r
+    if (TextUtils.isEmpty(sortOrder)) {\r
+      order = ProviderTableMeta.DEFAULT_SORT_ORDER;\r
+    } else {\r
+      order = sortOrder;\r
+    }\r
+    \r
+    SQLiteDatabase db = mDbHelper.getReadableDatabase();\r
+    Cursor c = sqlQuery.query(db, projection, selection, selectionArgs, null, null, order);\r
+    \r
+    c.setNotificationUri(getContext().getContentResolver(), uri);\r
+\r
+    return c;\r
+  }\r
+\r
+  @Override\r
+  public int update(Uri uri, ContentValues values, String selection,\r
+      String[] selectionArgs) {\r
+    return mDbHelper.getWritableDatabase().update(ProviderTableMeta.DB_NAME, values, selection, selectionArgs);\r
+  }\r
+\r
+  class DataBaseHelper extends SQLiteOpenHelper {\r
+\r
+    public DataBaseHelper(Context context) {\r
+      super(context, ProviderMeta.DB_NAME, null, ProviderMeta.DB_VERSION);\r
+      \r
+    }\r
+    \r
+    @Override\r
+    public void onCreate(SQLiteDatabase db) {\r
+      db.execSQL("CREATE TABLE " + ProviderTableMeta.DB_NAME + "(" +\r
+                 ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " +\r
+                 ProviderTableMeta.FILE_NAME + " TEXT, " +\r
+                 ProviderTableMeta.FILE_PATH + " TEXT, " +\r
+                 ProviderTableMeta.FILE_PARENT + " INTEGER, " +\r
+                 ProviderTableMeta.FILE_CREATION + " INTEGER, " +\r
+                 ProviderTableMeta.FILE_MODIFIED + " INTEGER, " +\r
+                 ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, " +\r
+                 ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, " +\r
+                 ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, " +\r
+                 ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT);");\r
+    }\r
+\r
+    @Override\r
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\r
+      \r
+    }\r
+    \r
+  }\r
+  \r
+}\r