com.fanfou.app.opensource.api.bean.DirectMessage.java Source code

Java tutorial

Introduction

Here is the source code for com.fanfou.app.opensource.api.bean.DirectMessage.java

Source

/*******************************************************************************
 * Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package com.fanfou.app.opensource.api.bean;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.ContentValues;
import android.database.Cursor;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.util.Log;

import com.fanfou.app.opensource.AppContext;
import com.fanfou.app.opensource.api.ApiException;
import com.fanfou.app.opensource.api.ApiParser;
import com.fanfou.app.opensource.db.Contents.BasicColumns;
import com.fanfou.app.opensource.db.Contents.DirectMessageInfo;
import com.fanfou.app.opensource.http.ResponseCode;
import com.fanfou.app.opensource.http.SimpleResponse;
import com.fanfou.app.opensource.service.Constants;
import com.fanfou.app.opensource.util.StringHelper;

/**
 * @author mcxiaoke
 * @version 1.0 2011.04.30
 * @version 1.1 2011.05.02
 * @version 1.5 2011.05.20
 * @version 1.6 2011.07.22
 * @version 1.7 2011.10.21
 * @version 1.8 2011.11.04
 * @version 1.9 2011.11.21
 * @version 2.0 2011.11.23
 * @version 2.1 2011.12.01
 * @version 2.2 2011.12.16
 * @version 2.3 2011.12.19
 * @version 3.0 2011.12.21
 * @version 3.1 2011.12.23
 * 
 */
public class DirectMessage implements Storable<DirectMessage> {

    public static final String TAG = DirectMessage.class.getSimpleName();

    private static void log(final String message) {
        Log.d(DirectMessage.TAG, message);
    }

    public String id;
    public String ownerId;
    public String text;
    public Date createdAt;
    public String senderId;
    public String senderScreenName;
    public String recipientId;
    public String recipientScreenName;

    public String senderProfileImageUrl;
    public String recipientProfileImageUrl;

    public int type;

    public String threadUserId;
    public String threadUserName;
    public boolean isRead;

    public long realId;

    public User sender = null;
    public User recipient = null;

    public static final Parcelable.Creator<DirectMessage> CREATOR = new Parcelable.Creator<DirectMessage>() {

        @Override
        public DirectMessage createFromParcel(final Parcel source) {
            return new DirectMessage(source);
        }

        @Override
        public DirectMessage[] newArray(final int size) {
            return new DirectMessage[size];
        }
    };

    public static DirectMessage parse(final Cursor c) {
        if (c == null) {
            return null;
        }
        final DirectMessage dm = new DirectMessage();
        dm.id = ApiParser.parseString(c, BasicColumns.ID);
        dm.ownerId = ApiParser.parseString(c, BasicColumns.OWNER_ID);
        dm.text = ApiParser.parseString(c, DirectMessageInfo.TEXT);
        dm.createdAt = ApiParser.parseDate(c, BasicColumns.CREATED_AT);
        dm.senderId = ApiParser.parseString(c, DirectMessageInfo.SENDER_ID);
        dm.senderScreenName = ApiParser.parseString(c, DirectMessageInfo.SENDER_SCREEN_NAME);
        dm.recipientId = ApiParser.parseString(c, DirectMessageInfo.RECIPIENT_ID);
        dm.recipientScreenName = ApiParser.parseString(c, DirectMessageInfo.RECIPIENT_SCREEN_NAME);
        dm.senderProfileImageUrl = ApiParser.parseString(c, DirectMessageInfo.SENDER_PROFILE_IMAGE_URL);
        dm.recipientProfileImageUrl = ApiParser.parseString(c, DirectMessageInfo.RECIPIENT_PROFILE_IMAGE_URL);

        dm.type = ApiParser.parseInt(c, BasicColumns.TYPE);

        dm.threadUserId = ApiParser.parseString(c, DirectMessageInfo.THREAD_USER_ID);
        dm.threadUserName = ApiParser.parseString(c, DirectMessageInfo.THREAD_USER_NAME);
        dm.isRead = ApiParser.parseBoolean(c, DirectMessageInfo.IS_READ);

        if (TextUtils.isEmpty(dm.id)) {
            return null;
        }

        return dm;
    }

    public static DirectMessage parse(final JSONObject o, final int type) throws ApiException {
        if (o == null) {
            return null;
        }
        DirectMessage dm = null;
        try {
            dm = new DirectMessage();
            dm.id = o.getString(BasicColumns.ID);
            dm.realId = ApiParser.decodeMessageRealId(dm.id);
            dm.text = o.getString(DirectMessageInfo.TEXT);
            dm.createdAt = ApiParser.date(o.getString(BasicColumns.CREATED_AT));
            dm.senderId = o.getString(DirectMessageInfo.SENDER_ID);
            dm.senderScreenName = o.getString(DirectMessageInfo.SENDER_SCREEN_NAME);
            dm.recipientId = o.getString(DirectMessageInfo.RECIPIENT_ID);
            dm.recipientScreenName = o.getString(DirectMessageInfo.RECIPIENT_SCREEN_NAME);

            if (o.has("sender")) {
                final JSONObject so = o.getJSONObject("sender");
                dm.sender = User.parse(so);
                dm.senderProfileImageUrl = dm.sender.profileImageUrl;
            }
            if (o.has("recipient")) {
                final JSONObject so = o.getJSONObject("recipient");
                dm.recipient = User.parse(so);
                dm.recipientProfileImageUrl = dm.recipient.profileImageUrl;
            }

            dm.isRead = false;

            dm.type = type;

            dm.ownerId = AppContext.getUserId();
        } catch (final JSONException e) {
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
        if (AppContext.DEBUG) {
            DirectMessage.log("DirectMessage.parse id=" + dm.id);
        }
        return dm;
    }

    public static DirectMessage parse(final SimpleResponse r, final int type) throws ApiException {
        JSONObject o = null;
        try {
            o = r.getJSONObject();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        if (o != null) {
            return DirectMessage.parse(o, type);
        }
        return null;
    }

    public static ArrayList<DirectMessage> parseConversationList(final JSONArray a) throws ApiException {
        if (a == null) {
            return null;
        }
        final ArrayList<DirectMessage> dms = new ArrayList<DirectMessage>();
        try {
            for (int i = 0; i < a.length(); i++) {
                final JSONObject io = a.getJSONObject(i);
                final JSONObject dmo = io.getJSONObject("dm");
                final DirectMessage dm = DirectMessage.parse(dmo,
                        Constants.TYPE_DIRECT_MESSAGES_CONVERSTATION_LIST);
                dms.add(dm);
            }
        } catch (final JSONException e) {
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
        return dms;
    }

    public static ArrayList<DirectMessage> parseConversationList(final SimpleResponse response)
            throws ApiException {
        JSONArray json = null;
        try {
            json = response.getJSONArray();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        if (json != null) {
            return DirectMessage.parseConversationList(json);
        }
        return null;
    }

    public static List<DirectMessage> parseConversationUser(final JSONArray a) throws ApiException {
        return DirectMessage.parseMessges(a, Constants.TYPE_DIRECT_MESSAGES_CONVERSTATION);
    }

    public static List<DirectMessage> parseConversationUser(final SimpleResponse response) throws ApiException {
        JSONArray json = null;
        try {
            json = response.getJSONArray();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        if (json != null) {
            return DirectMessage.parseConversationUser(json);
        }
        return null;

    }

    public static ArrayList<DirectMessage> parseMessges(final JSONArray a, final int type) throws ApiException {
        if (a == null) {
            return null;
        }
        final ArrayList<DirectMessage> dms = new ArrayList<DirectMessage>();
        try {
            for (int i = 0; i < a.length(); i++) {
                final JSONObject o = a.getJSONObject(i);
                final DirectMessage dm = DirectMessage.parse(o, type);
                dms.add(dm);
            }
        } catch (final JSONException e) {
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
        return dms;
    }

    public static ArrayList<DirectMessage> parseMessges(final SimpleResponse r, final int type)
            throws ApiException {
        JSONArray a = null;
        try {
            a = r.getJSONArray();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        if (a != null) {
            return DirectMessage.parseMessges(a, type);
        }
        return null;
    }

    public DirectMessage() {

    }

    public DirectMessage(final Parcel in) {
        this.id = in.readString();
        this.ownerId = in.readString();
        this.createdAt = new Date(in.readLong());
        this.type = in.readInt();

        this.senderId = in.readString();
        this.recipientId = in.readString();
        this.text = in.readString();

        this.senderScreenName = in.readString();
        this.recipientScreenName = in.readString();
        this.senderProfileImageUrl = in.readString();
        this.recipientProfileImageUrl = in.readString();

        this.threadUserId = in.readString();
        this.threadUserName = in.readString();

        this.isRead = in.readInt() == 0 ? false : true;
    }

    @Override
    public int compareTo(final DirectMessage another) {
        return this.createdAt.compareTo(another.createdAt);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public boolean equals(final Object o) {
        if (o instanceof DirectMessage) {
            final DirectMessage dm = (DirectMessage) o;
            if (this.id.equals(dm.id)) {
                return true;
            }
        }
        return false;
    }

    @Override
    public int hashCode() {
        return this.id.hashCode();
    }

    public boolean isNull() {
        return StringHelper.isEmpty(this.id);
    }

    @Override
    public ContentValues toContentValues() {
        final ContentValues cv = new ContentValues();

        cv.put(BasicColumns.ID, this.id);
        cv.put(BasicColumns.OWNER_ID, this.ownerId);
        cv.put(BasicColumns.CREATED_AT, this.createdAt.getTime());
        cv.put(BasicColumns.TYPE, this.type);

        cv.put(DirectMessageInfo.SENDER_ID, this.senderId);
        cv.put(DirectMessageInfo.RECIPIENT_ID, this.recipientId);
        cv.put(DirectMessageInfo.TEXT, this.text);

        cv.put(DirectMessageInfo.SENDER_SCREEN_NAME, this.senderScreenName);
        cv.put(DirectMessageInfo.RECIPIENT_SCREEN_NAME, this.recipientScreenName);

        cv.put(DirectMessageInfo.SENDER_PROFILE_IMAGE_URL, this.senderProfileImageUrl);
        cv.put(DirectMessageInfo.RECIPIENT_PROFILE_IMAGE_URL, this.recipientProfileImageUrl);

        cv.put(DirectMessageInfo.THREAD_USER_ID, this.threadUserId);
        cv.put(DirectMessageInfo.THREAD_USER_NAME, this.threadUserName);
        cv.put(DirectMessageInfo.IS_READ, this.isRead);

        return cv;
    }

    @Override
    public String toString() {
        return "[Message] " + BasicColumns.ID + "=" + this.id + " " + DirectMessageInfo.TEXT + "=" + this.text + " "
                + BasicColumns.CREATED_AT + "=" + this.createdAt + " " + DirectMessageInfo.SENDER_ID + "="
                + this.senderId + " " + DirectMessageInfo.RECIPIENT_ID + "=" + this.recipientId + " ";
    }

    @Override
    public void writeToParcel(final Parcel dest, final int flags) {
        dest.writeString(this.id);
        dest.writeString(this.ownerId);
        dest.writeLong(this.createdAt.getTime());
        dest.writeInt(this.type);

        dest.writeString(this.senderId);
        dest.writeString(this.recipientId);
        dest.writeString(this.text);

        dest.writeString(this.senderScreenName);
        dest.writeString(this.recipientScreenName);
        dest.writeString(this.senderProfileImageUrl);
        dest.writeString(this.recipientProfileImageUrl);

        dest.writeString(this.threadUserId);
        dest.writeString(this.threadUserName);

        dest.writeInt(this.isRead ? 1 : 0);

    }

}