Exemple #1
0
  /** 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;
  }
Exemple #2
0
  /**
   * 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;
  }