/** Update objects (one or several records) in the database */ @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = MyContextHolder.get().getDatabase().getWritableDatabase(); int count = 0; ParsedUri uriParser = ParsedUri.fromUri(uri); long accountUserId = 0; switch (uriParser.matched()) { case MSG: count = db.update(Msg.TABLE_NAME, values, selection, selectionArgs); break; case MSG_ITEM: accountUserId = uriParser.getAccountUserId(); long rowId = uriParser.getMessageId(); MsgOfUserValues msgOfUserValues = MsgOfUserValues.valueOf(accountUserId, values); msgOfUserValues.setMsgId(rowId); if (values.size() > 0) { count = db.update( Msg.TABLE_NAME, values, BaseColumns._ID + "=" + rowId + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs); } count += msgOfUserValues.update(db); break; case USER: count = db.update(User.TABLE_NAME, values, selection, selectionArgs); break; case USER_ITEM: accountUserId = uriParser.getAccountUserId(); long selectedUserId = uriParser.getUserId(); FollowingUserValues followingUserValues = FollowingUserValues.valueOf(accountUserId, selectedUserId, values); count = db.update( User.TABLE_NAME, values, BaseColumns._ID + "=" + selectedUserId + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs); followingUserValues.update(db); optionallyLoadAvatar(selectedUserId, values); break; default: throw new IllegalArgumentException(uriParser.toString()); } return count; }
/** * Insert a new record into the database. * * @see android.content.ContentProvider#insert(android.net.Uri, android.content.ContentValues) */ @Override public Uri insert(Uri uri, ContentValues initialValues) { ContentValues values; MsgOfUserValues msgOfUserValues = new MsgOfUserValues(0); FollowingUserValues followingUserValues = null; long accountUserId = 0; long rowId; Uri newUri = null; try { Long now = System.currentTimeMillis(); SQLiteDatabase db = MyContextHolder.get().getDatabase().getWritableDatabase(); String table; if (initialValues != null) { values = new ContentValues(initialValues); } else { values = new ContentValues(); } ParsedUri uriParser = ParsedUri.fromUri(uri); switch (uriParser.matched()) { case MSG_ITEM: accountUserId = uriParser.getAccountUserId(); table = Msg.TABLE_NAME; /** Add default values for missed required fields */ if (!values.containsKey(Msg.AUTHOR_ID) && values.containsKey(Msg.SENDER_ID)) { values.put(Msg.AUTHOR_ID, values.get(Msg.SENDER_ID).toString()); } if (!values.containsKey(Msg.BODY)) { values.put(Msg.BODY, ""); } if (!values.containsKey(Msg.VIA)) { values.put(Msg.VIA, ""); } values.put(Msg.INS_DATE, now); msgOfUserValues = MsgOfUserValues.valueOf(accountUserId, values); break; case ORIGIN_ITEM: table = Origin.TABLE_NAME; break; case USER_ITEM: table = User.TABLE_NAME; values.put(User.INS_DATE, now); accountUserId = uriParser.getAccountUserId(); followingUserValues = FollowingUserValues.valueOf(accountUserId, 0, values); break; default: throw new IllegalArgumentException(uriParser.toString()); } rowId = db.insert(table, null, values); if (rowId == -1) { throw new SQLException("Failed to insert row into " + uri); } else if (User.TABLE_NAME.equals(table)) { optionallyLoadAvatar(rowId, values); } msgOfUserValues.setMsgId(rowId); msgOfUserValues.insert(db); if (followingUserValues != null) { followingUserValues.followingUserId = rowId; followingUserValues.update(db); } switch (uriParser.matched()) { case MSG_ITEM: newUri = MatchedUri.getMsgUri(accountUserId, rowId); break; case ORIGIN_ITEM: newUri = MatchedUri.getOriginUri(rowId); break; case USER_ITEM: newUri = MatchedUri.getUserUri(accountUserId, rowId); break; default: break; } } catch (Exception e) { MyLog.e(this, "Insert " + uri, e); } return newUri; }