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

Java tutorial

Introduction

Here is the source code for com.fanfou.app.opensource.api.bean.Status.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 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.StatusInfo;
import com.fanfou.app.opensource.db.Contents.UserInfo;
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.PatternsHelper;
import com.fanfou.app.opensource.util.StringHelper;

/**
 * @author mcxiaoke
 * @version 1.0 2011.04.30
 * @version 1.1 2011.05.01
 * @version 1.2 2011.05.02
 * @version 1.3 2011.06.03
 * @version 1.4 2011.07.21
 * @version 1.5 2011.10.19
 * @version 1.6 2011.10.21
 * @version 1.7 2011.11.04
 * @version 2.0 2011.11.10
 * @version 2.1 2011.11.11
 * @version 2.2 2011.12.01
 * @version 2.3 2011.12.16
 * @version 2.4 2011.12.19
 * @version 3.0 2011.12.21
 * 
 */
public class Status implements Storable<Status> {

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

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

    public String id;
    public String ownerId;
    public Date createdAt;

    public String text;
    public String simpleText;
    public String source;

    public String inReplyToStatusId;
    public String inReplyToUserId;
    public String inReplyToScreenName;

    public String photoImageUrl;
    public String photoThumbUrl;
    public String photoLargeUrl;

    public String userId;
    public String userScreenName;
    public String userProfileImageUrl;

    public boolean truncated;
    public boolean favorited;
    public boolean self;

    public boolean isRead;
    public boolean isThread;
    public boolean hasPhoto;
    public boolean special;

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

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

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

    public static Status parse(final Cursor c) {
        if (c == null) {
            return null;
        }
        final Status s = new Status();

        s.id = ApiParser.parseString(c, BasicColumns.ID);
        s.ownerId = ApiParser.parseString(c, BasicColumns.OWNER_ID);
        s.createdAt = ApiParser.parseDate(c, BasicColumns.CREATED_AT);

        s.text = ApiParser.parseString(c, StatusInfo.TEXT);
        s.simpleText = ApiParser.parseString(c, StatusInfo.SIMPLE_TEXT);
        s.source = ApiParser.parseString(c, StatusInfo.SOURCE);

        s.inReplyToStatusId = ApiParser.parseString(c, StatusInfo.IN_REPLY_TO_STATUS_ID);
        s.inReplyToUserId = ApiParser.parseString(c, StatusInfo.IN_REPLY_TO_USER_ID);
        s.inReplyToScreenName = ApiParser.parseString(c, StatusInfo.IN_REPLY_TO_SCREEN_NAME);

        s.photoImageUrl = ApiParser.parseString(c, StatusInfo.PHOTO_IMAGE_URL);
        s.photoLargeUrl = ApiParser.parseString(c, StatusInfo.PHOTO_LARGE_URL);
        s.photoThumbUrl = ApiParser.parseString(c, StatusInfo.PHOTO_THUMB_URL);

        s.userId = ApiParser.parseString(c, StatusInfo.USER_ID);
        s.userScreenName = ApiParser.parseString(c, StatusInfo.USER_SCREEN_NAME);
        s.userProfileImageUrl = ApiParser.parseString(c, StatusInfo.USER_PROFILE_IMAGE_URL);

        s.truncated = ApiParser.parseBoolean(c, StatusInfo.TRUNCATED);
        s.favorited = ApiParser.parseBoolean(c, StatusInfo.FAVORITED);
        s.self = ApiParser.parseBoolean(c, StatusInfo.IS_SELF);

        s.isRead = ApiParser.parseBoolean(c, StatusInfo.IS_READ);
        s.isThread = ApiParser.parseBoolean(c, StatusInfo.IS_THREAD);
        s.hasPhoto = ApiParser.parseBoolean(c, StatusInfo.HAS_PHOTO);
        s.special = ApiParser.parseBoolean(c, StatusInfo.SPECIAL);

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

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

    }

    public static Status parse(final JSONObject o) throws ApiException {
        return Status.parse(o, Constants.TYPE_NONE);
    }

    public static Status parse(final JSONObject o, final int type) throws ApiException {
        if (o == null) {
            return null;
        }
        try {
            final Status s = new Status();

            s.id = o.getString(BasicColumns.ID);
            s.ownerId = AppContext.getUserId();
            s.createdAt = ApiParser.date(o.getString(BasicColumns.CREATED_AT));

            s.text = o.getString(StatusInfo.TEXT);
            s.simpleText = PatternsHelper.getSimpifiedText(s.text);
            s.source = ApiParser.parseSource(o.getString(StatusInfo.SOURCE));

            if (o.has(StatusInfo.IN_REPLY_TO_STATUS_ID)) {
                s.inReplyToStatusId = o.getString(StatusInfo.IN_REPLY_TO_STATUS_ID);
                s.inReplyToUserId = o.getString(StatusInfo.IN_REPLY_TO_USER_ID);
                s.inReplyToScreenName = o.getString(StatusInfo.IN_REPLY_TO_SCREEN_NAME);
                if (!TextUtils.isEmpty(s.inReplyToStatusId)) {
                    s.isThread = true;
                }
            }

            s.favorited = o.getBoolean(StatusInfo.FAVORITED);
            s.truncated = o.getBoolean(StatusInfo.TRUNCATED);
            s.self = o.getBoolean(StatusInfo.IS_SELF);

            s.isRead = false;
            s.special = false;

            if (o.has("photo")) {
                final JSONObject po = o.getJSONObject("photo");
                s.photo = Photo.parse(po);
                s.photoImageUrl = s.photo.imageUrl;
                s.photoLargeUrl = s.photo.largeUrl;
                s.photoThumbUrl = s.photo.thumbUrl;
                s.hasPhoto = true;
            }

            if (o.has("user")) {
                final JSONObject uo = o.getJSONObject("user");
                s.userId = uo.getString(BasicColumns.ID);
                s.userScreenName = uo.getString(UserInfo.SCREEN_NAME);
                s.userProfileImageUrl = uo.getString(UserInfo.PROFILE_IMAGE_URL);
                s.user = User.parse(uo);
            }

            s.type = type;

            return s;
        } catch (final JSONException e) {
            if (AppContext.DEBUG) {
                e.printStackTrace();
            }
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
    }

    public static Status parse(final SimpleResponse response) throws ApiException {
        JSONObject o = null;
        try {
            o = response.getJSONObject();
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return Status.parse(o);
    }

    public static Status parse(final SimpleResponse response, final int type) throws ApiException {
        try {
            return Status.parse(response.getJSONObject(), type);
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Status parse(final String content) throws ApiException {
        return Status.parse(content, Constants.TYPE_NONE);
    }

    public static Status parse(final String content, final int type) throws ApiException {
        try {
            final JSONObject o = new JSONObject(content);
            return Status.parse(o, type);
        } catch (final JSONException e) {
            if (AppContext.DEBUG) {
                e.printStackTrace();
            }
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
    }

    public static ArrayList<Status> parseStatuses(final JSONArray a, final int type) throws ApiException {
        if (a == null) {
            return null;
        }
        if (AppContext.DEBUG) {
            Status.log("parseStatuses jsonarray.size=" + a.length());
        }
        try {
            final ArrayList<Status> statuses = new ArrayList<Status>();
            for (int i = 0; i < a.length(); i++) {
                final JSONObject o = a.getJSONObject(i);
                final Status s = Status.parse(o, type);
                statuses.add(s);
            }
            return statuses;
        } catch (final JSONException e) {
            if (AppContext.DEBUG) {
                e.printStackTrace();
            }
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
    }

    public static ArrayList<Status> parseStatuses(final SimpleResponse r, final int type) throws ApiException {
        if (AppContext.DEBUG) {
            Status.log("parseStatuses response");
        }
        try {
            return Status.parseStatuses(r.getJSONArray(), type);
        } catch (final IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static ArrayList<Status> parseStatuses(final String content, final int type) throws ApiException {
        if (AppContext.DEBUG) {
            Status.log("parseStatuses content");
        }
        JSONArray a;
        try {
            a = new JSONArray(content);
        } catch (final JSONException e) {
            if (AppContext.DEBUG) {
                e.printStackTrace();
            }
            throw new ApiException(ResponseCode.ERROR_JSON_EXCEPTION, e.getMessage(), e);
        }
        return Status.parseStatuses(a, type);
    }

    public int type;

    public User user;

    public Photo photo;

    public Status() {
    }

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

        this.text = in.readString();
        this.simpleText = in.readString();
        this.source = in.readString();

        this.inReplyToStatusId = in.readString();
        this.inReplyToUserId = in.readString();
        this.inReplyToScreenName = in.readString();

        this.photoImageUrl = in.readString();
        this.photoLargeUrl = in.readString();
        this.photoThumbUrl = in.readString();

        this.userId = in.readString();
        this.userScreenName = in.readString();
        this.userProfileImageUrl = in.readString();

        this.truncated = in.readInt() == 0 ? false : true;
        this.favorited = in.readInt() == 0 ? false : true;
        this.self = in.readInt() == 0 ? false : true;

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

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

    }

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

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

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

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

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

    public Status readFromParcel(final Parcel source) {
        return new Status(source);
    }

    @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(StatusInfo.TEXT, this.text);
        cv.put(StatusInfo.SOURCE, this.source);
        cv.put(StatusInfo.SIMPLE_TEXT, this.simpleText);

        cv.put(StatusInfo.IN_REPLY_TO_STATUS_ID, this.inReplyToStatusId);
        cv.put(StatusInfo.IN_REPLY_TO_USER_ID, this.inReplyToUserId);
        cv.put(StatusInfo.IN_REPLY_TO_SCREEN_NAME, this.inReplyToScreenName);

        cv.put(StatusInfo.PHOTO_IMAGE_URL, this.photoImageUrl);
        cv.put(StatusInfo.PHOTO_THUMB_URL, this.photoThumbUrl);
        cv.put(StatusInfo.PHOTO_LARGE_URL, this.photoLargeUrl);

        cv.put(StatusInfo.USER_ID, this.userId);
        cv.put(StatusInfo.USER_SCREEN_NAME, this.userScreenName);
        cv.put(StatusInfo.USER_PROFILE_IMAGE_URL, this.userProfileImageUrl);

        cv.put(StatusInfo.TRUNCATED, this.truncated);
        cv.put(StatusInfo.FAVORITED, this.favorited);
        cv.put(StatusInfo.IS_SELF, this.self);

        cv.put(StatusInfo.IS_READ, this.isRead);
        cv.put(StatusInfo.IS_THREAD, this.isThread);
        cv.put(StatusInfo.HAS_PHOTO, this.hasPhoto);
        cv.put(StatusInfo.SPECIAL, this.special);

        cv.put(BasicColumns.TYPE, this.type);

        return cv;
    }

    @Override
    public String toString() {
        // return toContentValues().toString();
        return "[Status] " + BasicColumns.ID + "=" + this.id + " " + StatusInfo.TEXT + "=" + this.text + " "
                + BasicColumns.CREATED_AT + "+" + this.createdAt + " "
                // +StatusInfo.SOURCE+"="+this.source+" "
                // +StatusInfo.TRUNCATED+"="+this.truncated+" "
                // +StatusInfo.IN_REPLY_TO_STATUS_ID+"="+this.inReplyToStatusId+" "
                // +StatusInfo.IN_REPLY_TO_USER_ID+"="+this.inReplyToUserId+" "
                // +StatusInfo.FAVORITED+"="+this.favorited+" "
                // +StatusInfo.IN_REPLY_TO_SCREEN_NAME+"="+this.inReplyToScreenName+" "
                // +StatusInfo.PHOTO_IMAGE_URL+"="+this.photoImageUrl+" "
                // +StatusInfo.PHOTO_LARGE_URL+"="+this.photoLargeUrl+" "
                // +StatusInfo.PHOTO_THUMB_URL+"="+this.photoThumbUrl+" "
                + StatusInfo.USER_ID + "=" + this.userId + " ";
        // +StatusInfo.USER_SCREEN_NAME+"="+this.userScreenName+" "
        // +StatusInfo.READ+"="+this.read+" "
        // +StatusInfo.TYPE+"="+this.type+" ";
    }

    @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.text);
        dest.writeString(this.simpleText);
        dest.writeString(this.source);

        dest.writeString(this.inReplyToStatusId);
        dest.writeString(this.inReplyToUserId);
        dest.writeString(this.inReplyToScreenName);

        dest.writeString(this.photoImageUrl);
        dest.writeString(this.photoLargeUrl);
        dest.writeString(this.photoThumbUrl);

        dest.writeString(this.userId);
        dest.writeString(this.userScreenName);
        dest.writeString(this.userProfileImageUrl);

        dest.writeInt(this.truncated ? 1 : 0);
        dest.writeInt(this.favorited ? 1 : 0);
        dest.writeInt(this.self ? 1 : 0);

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

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

    }

}