model for file representation
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / cp.java
index bb66bfc..e63de72 100644 (file)
-/* ownCloud Android client application
- *   Copyright (C) 2011  Bartek Przybylski
- *
- *   This program 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.
- *
- *   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package eu.alefzero.owncloud;
-
-import java.util.HashMap;
-
-import eu.alefzero.owncloud.db.ProviderMeta;
-import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;
-
-import android.content.ContentProvider;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.SQLException;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.text.TextUtils;
-
-public class cp extends ContentProvider {
-
-  private DataBaseHelper mDbHelper;
-  
-  private static HashMap<String, String> mProjectionMap;
-  static {
-    mProjectionMap = new HashMap<String, String>();
-    mProjectionMap.put(ProviderTableMeta._ID,
-                       ProviderTableMeta._ID);
-    mProjectionMap.put(ProviderTableMeta.FILE_PARENT,
-                       ProviderTableMeta.FILE_PARENT);
-    mProjectionMap.put(ProviderTableMeta.FILE_PATH,
-                       ProviderTableMeta.FILE_PATH);
-    mProjectionMap.put(ProviderTableMeta.FILE_NAME,
-                       ProviderTableMeta.FILE_NAME);
-    mProjectionMap.put(ProviderTableMeta.FILE_CREATION,
-                       ProviderTableMeta.FILE_CREATION);
-    mProjectionMap.put(ProviderTableMeta.FILE_MODIFIED,
-                       ProviderTableMeta.FILE_MODIFIED);
-    mProjectionMap.put(ProviderTableMeta.FILE_CONTENT_LENGTH,
-                       ProviderTableMeta.FILE_CONTENT_LENGTH);
-    mProjectionMap.put(ProviderTableMeta.FILE_CONTENT_TYPE,
-                       ProviderTableMeta.FILE_CONTENT_TYPE);
-    mProjectionMap.put(ProviderTableMeta.FILE_STORAGE_PATH,
-                       ProviderTableMeta.FILE_STORAGE_PATH);
-  }
-  
-  private static final int SINGLE_FILE = 1;
-  private static final int DIRECTORY = 2;
-  private static final int ROOT_DIRECTORY = 3;
-  private static final UriMatcher mUriMatcher;
-  static {
-    mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "/", ROOT_DIRECTORY);
-    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "file/", SINGLE_FILE);
-    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "file/#", SINGLE_FILE);
-    mUriMatcher.addURI(ProviderMeta.AUTHORITY_FILES, "dir/#", DIRECTORY);
-  }
-  
-  private static final String TAG = "OC_ContentProvider";
-  
-  @Override
-  public int delete(Uri uri, String where, String[] whereArgs) {
-    SQLiteDatabase db = mDbHelper.getWritableDatabase();
-    int count = 0;
-    switch (mUriMatcher.match(uri)) {
-      case SINGLE_FILE:
-        count = db.delete(ProviderTableMeta.DB_NAME,
-                          ProviderTableMeta._ID + "=" + uri.getPathSegments().get(1)
-                          + (!TextUtils.isEmpty(where)?" AND (" + where +")" : ""),
-                          whereArgs);
-        break;
-      case ROOT_DIRECTORY:
-        count = db.delete(ProviderTableMeta.DB_NAME, where, whereArgs);
-        break;
-      default:
-        throw new IllegalArgumentException("Unknown uri: " + uri.toString());
-    }
-    getContext().getContentResolver().notifyChange(uri, null);
-    return count;
-  }
-
-  @Override
-  public String getType(Uri uri) {
-    switch (mUriMatcher.match(uri)) {
-      case ROOT_DIRECTORY:
-        return ProviderTableMeta.CONTENT_TYPE;
-      case SINGLE_FILE:
-        return ProviderTableMeta.CONTENT_TYPE_ITEM;
-      default:
-        throw new IllegalArgumentException("Unknown Uri id." + uri.toString());
-    }
-  }
-
-  @Override
-  public Uri insert(Uri uri, ContentValues values) {
-    if (mUriMatcher.match(uri) != SINGLE_FILE) {
-      throw new IllegalArgumentException("Unknown uri id: " + uri);
-    }
-    
-    SQLiteDatabase db = mDbHelper.getWritableDatabase();
-    long rowId = db.insert(ProviderTableMeta.DB_NAME, ProviderTableMeta.FILE_NAME, values);
-    if (rowId > 0) {
-      Uri insertedFileUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, rowId);
-      getContext().getContentResolver().notifyChange(insertedFileUri, null);
-      return insertedFileUri;
-    }
-    throw new SQLException("ERROR " + uri);
-  }
-
-  @Override
-  public boolean onCreate() {
-    mDbHelper = new DataBaseHelper(getContext());
-    return true;
-  }
-
-  @Override
-  public Cursor query(Uri uri, String[] projection, String selection,
-      String[] selectionArgs, String sortOrder) {
-    SQLiteQueryBuilder sqlQuery = new SQLiteQueryBuilder();
-        
-    sqlQuery.setTables(ProviderTableMeta.DB_NAME);
-    sqlQuery.setProjectionMap(mProjectionMap);
-    
-    switch (mUriMatcher.match(uri)) {
-      case ROOT_DIRECTORY:
-        sqlQuery.appendWhere(ProviderTableMeta.FILE_PARENT + " is null");
-        break;
-      case DIRECTORY:
-        sqlQuery.appendWhere(ProviderTableMeta.FILE_PARENT + "="+uri.getPathSegments().get(1));
-        break;
-      case SINGLE_FILE:
-        if (uri.getPathSegments().size() > 1) {
-          sqlQuery.appendWhere(ProviderTableMeta._ID + "=" +
-                               uri.getPathSegments().get(1));
-        }
-        break;
-      default:
-        throw new IllegalArgumentException("Unknown uri id: " + uri);
-    }
-    
-    String order;
-    if (TextUtils.isEmpty(sortOrder)) {
-      order = ProviderTableMeta.DEFAULT_SORT_ORDER;
-    } else {
-      order = sortOrder;
-    }
-    
-    SQLiteDatabase db = mDbHelper.getReadableDatabase();
-    Cursor c = sqlQuery.query(db, projection, selection, selectionArgs, null, null, order);
-    
-    c.setNotificationUri(getContext().getContentResolver(), uri);
-
-    return c;
-  }
-
-  @Override
-  public int update(Uri uri, ContentValues values, String selection,
-      String[] selectionArgs) {
-    return mDbHelper.getWritableDatabase().update(ProviderTableMeta.DB_NAME, values, selection, selectionArgs);
-  }
-
-  class DataBaseHelper extends SQLiteOpenHelper {
-
-    public DataBaseHelper(Context context) {
-      super(context, ProviderMeta.DB_NAME, null, ProviderMeta.DB_VERSION);
-      
-    }
-    
-    @Override
-    public void onCreate(SQLiteDatabase db) {
-      db.execSQL("CREATE TABLE " + ProviderTableMeta.DB_NAME + "(" +
-                 ProviderTableMeta._ID + " INTEGER PRIMARY KEY, " +
-                 ProviderTableMeta.FILE_NAME + " TEXT, " +
-                 ProviderTableMeta.FILE_PATH + " TEXT, " +
-                 ProviderTableMeta.FILE_PARENT + " INTEGER, " +
-                 ProviderTableMeta.FILE_CREATION + " INTEGER, " +
-                 ProviderTableMeta.FILE_MODIFIED + " INTEGER, " +
-                 ProviderTableMeta.FILE_CONTENT_TYPE + " TEXT, " +
-                 ProviderTableMeta.FILE_CONTENT_LENGTH + " INTEGER, " +
-                 ProviderTableMeta.FILE_STORAGE_PATH + " TEXT, " +
-                 ProviderTableMeta.FILE_ACCOUNT_OWNER + " TEXT);");
-    }
-
-    @Override
-    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-      
-    }
-    
-  }
-  
-}
+/* 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;\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 cp 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, ProviderTableMeta.FILE_NAME, 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