com.javielinux.infos.InfoTweet.java Source code

Java tutorial

Introduction

Here is the source code for com.javielinux.infos.InfoTweet.java

Source

/*
 * Copyright 2012 Javier Prez Pacheco and Francisco Daz Rodriguez
 * TweetTopics 2.0
 * javielinux@gmail.com
 *
 * 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.javielinux.infos;

import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import com.android.dataframework.Entity;
import com.javielinux.utils.LinksUtils;
import com.javielinux.utils.TweetTopicsUtils;
import com.javielinux.utils.Utils;
import com.javielinux.utils.Utils.URLContent;
import twitter4j.Status;
import twitter4j.User;

import java.util.ArrayList;
import java.util.Date;

public class InfoTweet implements Parcelable {

    public static final String START_URL_TWITTER = "http://twitter.com/#!/";
    public static final String PREFIX_URL_TWITTER = "/status/";

    public static final int FROM_TWEETS = 0;
    public static final int FROM_STATUS = 1;
    public static final int FROM_USER = 2;
    public static final int FROM_SAVED_TWEET = 3;

    private int mTypeFrom = FROM_TWEETS;

    private long idDB = 0;
    private long id = 0;
    private String urlAvatar = "";
    private ArrayList<URLContent> urls = null;
    private String text = "";
    private String textURLs = "";
    private String textFinal = "";
    private String textHTMLFinal = "";
    private String username = "";
    private String fullname = "";
    private long userId = 0;
    private String source = "";
    private String toUsername = "";
    private long toUserId = 0;
    private Date createAt = null;
    private long toReplyId = 0;
    private double latitude = 0;
    private double longitude = 0;
    private boolean favorited = false;

    private boolean moreTweetDown = false;

    private int typeTweet = -1;

    private boolean retweet = false;
    private boolean lastRead = false;
    private boolean read = true;

    private String urlAvatarRetweet = "";
    private String textRetweet = "";
    private String usernameRetweet = "";
    private String fullnameRetweet = "";
    private String sourceRetweet = "";

    private String urlTweet = "";

    private String bestLink = "";
    private int linksCount = 0;

    //   public InfoTweet(Tweet tweet) {
    //        urls = new ArrayList<URLContent>();
    ////        if (tweet.getURLEntities()!=null) {
    ////            for (URLEntity urlEntity : tweet.getURLEntities()) {
    ////                URLContent urlContent = new URLContent();
    ////                urlContent.normal = urlEntity.getURL().toString();
    ////                urlContent.display = urlEntity.getDisplayURL();
    ////                urlContent.expanded = urlEntity.getExpandedURL().toString();
    ////            }
    ////        }
    ////        if (tweet.getMediaEntities()!=null) {
    ////            for (MediaEntity mediaEntity : tweet.getMediaEntities()) {
    ////                URLContent urlContent = new URLContent();
    ////                urlContent.normal = mediaEntity.getURL().toString();
    ////                urlContent.display = mediaEntity.getDisplayURL();
    ////                urlContent.expanded = mediaEntity.getExpandedURL().toString();
    ////                urlContent.linkMediaThumb = mediaEntity.getMediaURL().toString() + ":thumb";
    ////                urlContent.linkMediaLarge = mediaEntity.getMediaURL().toString() + ":medium";
    ////            }
    ////        }
    //      mTypeFrom = FROM_TWEETS;
    //      id = tweet.getId();
    //      urlAvatar = tweet.getProfileImageUrl();
    //      userId = tweet.getFromUserId();
    //      text = tweet.getText();
    //      username = tweet.getFromUser();
    //      fullname = tweet.getFromUser();
    //      source = tweet.getSource();
    //      toUsername = tweet.getToUser();
    //      toUserId = tweet.getToUserId();
    //      createAt = tweet.getCreatedAt();
    //      if (tweet.getGeoLocation()!=null) {
    //         latitude = tweet.getGeoLocation().getLatitude();
    //         longitude = tweet.getGeoLocation().getLongitude();
    //      }
    //
    //      urlTweet = START_URL_TWITTER + username.toLowerCase() + "/status/" + id;
    //        calculateLinks();
    //   }

    public InfoTweet(Status status) {
        urls = new ArrayList<URLContent>();
        mTypeFrom = FROM_STATUS;
        id = status.getId();
        urlAvatar = status.getUser().getProfileImageURL().toString();
        userId = status.getUser().getId();
        text = status.getText();
        username = status.getUser().getScreenName();
        fullname = status.getUser().getName();
        source = status.getSource();
        toUsername = status.getInReplyToScreenName();
        toUserId = status.getInReplyToUserId();
        createAt = status.getCreatedAt();
        toReplyId = status.getInReplyToStatusId();
        favorited = status.isFavorited();
        if (status.getGeoLocation() != null) {
            latitude = status.getGeoLocation().getLatitude();
            longitude = status.getGeoLocation().getLongitude();
        }
        if (status.getRetweetedStatus() != null) {
            retweet = true;
            urlAvatarRetweet = status.getRetweetedStatus().getUser().getProfileImageURL().toString();
            textRetweet = status.getRetweetedStatus().getText();
            usernameRetweet = status.getRetweetedStatus().getUser().getScreenName();
            fullnameRetweet = status.getRetweetedStatus().getUser().getName();
            sourceRetweet = status.getRetweetedStatus().getSource();
        }

        urlTweet = "http://twitter.com/#!/" + username.toLowerCase() + PREFIX_URL_TWITTER + id;

        calculateLinks();
    }

    public InfoTweet(Entity entity) {
        if (entity.getTable().equals("tweets")) {
            mTypeFrom = FROM_TWEETS;
        } else if (entity.getTable().equals("saved_tweets")) {
            mTypeFrom = FROM_SAVED_TWEET;
        } else {
            mTypeFrom = FROM_STATUS;
            toReplyId = entity.getLong("reply_tweet_id");
            favorited = entity.getInt("is_favorite") == 1 ? true : false;
            typeTweet = entity.getInt("type_id");
            moreTweetDown = (entity.getInt("has_more_tweets_down") == 1);
        }
        idDB = entity.getId();
        id = entity.getLong("tweet_id");
        urlAvatar = entity.getString("url_avatar");
        userId = entity.getLong("user_id");
        text = entity.getString("text");
        if (entity.isAttribute("text_urls")) {
            textURLs = entity.getString("text_urls");
            if (urls == null)
                urls = Utils.urls2content(entity.getString("text_urls"));
        }
        username = entity.getString("username");
        fullname = entity.getString("fullname");
        source = entity.getString("source");
        toUsername = entity.getString("to_username");
        toUserId = entity.getLong("to_user_id");
        createAt = new Date();
        createAt.setTime(entity.getLong("date"));
        latitude = entity.getDouble("latitude");
        longitude = entity.getDouble("longitude");
        if (entity.getTable().equals("tweets_user")) {
            retweet = entity.getInt("is_retweet") == 1 ? true : false;
            if (retweet) {
                urlAvatarRetweet = entity.getString("retweet_url_avatar");
                textRetweet = entity.getString("text");
                usernameRetweet = entity.getString("retweet_username");
            }
        }

        urlTweet = "http://twitter.com/#!/" + username.toLowerCase() + "/status/" + id;

        calculateLinks();
    }

    public InfoTweet(User user) {
        urls = new ArrayList<URLContent>();
        mTypeFrom = FROM_USER;

        urlAvatar = user.getProfileImageURL().toString();
        userId = user.getId();
        username = user.getScreenName();
        fullname = user.getName();
        try {
            id = user.getStatus().getId();
            text = user.getStatus().getText();
            source = user.getStatus().getSource();
            toUsername = user.getStatus().getInReplyToScreenName();
            toUserId = user.getStatus().getInReplyToUserId();
            createAt = user.getStatus().getCreatedAt();
            toReplyId = user.getStatus().getInReplyToStatusId();
            if (user.getStatus().getGeoLocation() != null) {
                latitude = user.getStatus().getGeoLocation().getLatitude();
                longitude = user.getStatus().getGeoLocation().getLongitude();
            }
        } catch (Exception e) {
        }

        calculateLinks();
    }

    private void calculateLinks() {
        ArrayList<String> links = LinksUtils.pullLinks(getText(), getContentURLs());
        linksCount = links.size();
        bestLink = searchLink(links);
    }

    private String searchLink(ArrayList<String> links) {
        if (links.size() > 0) {
            // primero buscamos un link con imagen

            for (String link : links) {
                if (!link.startsWith("@") || !link.startsWith("#")) {
                    if (LinksUtils.isLinkImage(link)) {
                        return link;
                    }
                }
            }

            // si no un link normal

            for (String link : links) {
                if (!link.startsWith("@") || !link.startsWith("#")) {
                    return link;
                }
            }

            // si no un usuario

            for (String link : links) {
                if (link.startsWith("@")) {
                    return link;
                }
            }

            // si no un hashtag

            for (String link : links) {
                if (link.startsWith("#")) {
                    return link;
                }
            }

        }
        return "";
    }

    public long getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String name) {
        username = name;
    }

    public String getText() {
        return text;
    }

    public long getUserId() {
        return userId;
    }

    public String getSource() {
        return source;
    }

    public String getToUsername() {
        return toUsername;
    }

    public long getToUserId() {
        return toUserId;
    }

    public Date getDate() {
        return createAt;
    }

    public String getUrlAvatar() {
        return urlAvatar;
    }

    public long getIdDB() {
        return idDB;
    }

    public int getTypeFrom() {
        return mTypeFrom;
    }

    public long getToReplyId() {
        return toReplyId;
    }

    public String getFullname() {
        return fullname;
    }

    public double getLatitude() {
        return latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public boolean hasLocation() {
        if (latitude != 0) {
            return true;
        }
        return false;
    }

    public boolean isFavorited() {
        return favorited;
    }

    public void setFavorited(boolean favorited) {
        this.favorited = favorited;
    }

    public boolean isRetweet() {
        return retweet;
    }

    public String getUrlAvatarRetweet() {
        return urlAvatarRetweet;
    }

    public String getTextRetweet() {
        return textRetweet;
    }

    public String getFullnameRetweet() {
        return fullnameRetweet;
    }

    public String getUsernameRetweet() {
        return usernameRetweet;
    }

    public String getSourceRetweet() {
        return sourceRetweet;
    }

    public String getUrlTweet() {
        return urlTweet;
    }

    public String getTextHTMLFinal() {
        return textHTMLFinal;
    }

    public void setTextHTMLFinal(String textHTMLFinal) {
        this.textHTMLFinal = textHTMLFinal;
    }

    public String getTextFinal() {
        return textFinal;
    }

    public void setTextFinal(String textFinal) {
        this.textFinal = textFinal;
    }

    public String getTextURLs() {
        return textURLs;
    }

    public ArrayList<URLContent> getContentURLs() {
        return urls;
    }

    public String getTime(Context context) {
        try {
            return Utils.timeFromTweet(context, createAt);

            /*if (type == TYPE_ENTITY) {
            Date d = new Date();
            d.setTime(mEntity.getLong("date"));
            return Utils.timeFromTweet(cnt, d);
            } else if (type == TYPE_TWEET) {
            return Utils.timeFromTweet(cnt, mTweet.getCreatedAt());
            } else if (type == TYPE_STATUS) {
            return Utils.timeFromTweet(cnt, mStatus.getCreatedAt());
            } else if (type == TYPE_DIRECTMESSAGE) {
            return Utils.timeFromTweet(cnt, mDirect.getCreatedAt());
            } else if (type == TYPE_USER) {
            return Utils.timeFromTweet(cnt, mUser.getStatus().getCreatedAt());
            }*/
        } catch (Exception e) {

        }
        return "";
    }

    public boolean hasConversation() {

        if (toReplyId > 0)
            return true;

        return false;
    }

    public boolean hasGeoLocation() {
        if (latitude != 0) {
            return true;
        }

        return false;
    }

    public long getRetweetCount() {
        //TODO: Revisar getRetweetCount
        return 0;
    }

    public void setLastRead(boolean lastRead) {
        this.lastRead = lastRead;
    }

    public boolean isLastRead() {
        return lastRead;
    }

    public void setRead(boolean read) {
        this.read = read;
    }

    public boolean isRead() {
        return read;
    }

    public boolean isDm() {
        return (typeTweet == TweetTopicsUtils.TWEET_TYPE_DIRECTMESSAGES
                || typeTweet == TweetTopicsUtils.TWEET_TYPE_SENT_DIRECTMESSAGES);
    }

    public boolean isTimeline() {
        return (typeTweet == TweetTopicsUtils.TWEET_TYPE_TIMELINE);
    }

    public boolean isMention() {
        return (typeTweet == TweetTopicsUtils.TWEET_TYPE_MENTIONS);
    }

    public boolean isSavedTweet() {
        return (mTypeFrom == FROM_SAVED_TWEET);
    }

    public String getBestLink() {
        return bestLink;
    }

    public int getLinksCount() {
        return linksCount;
    }

    @Override
    public boolean equals(Object other) {
        return (id == ((InfoTweet) other).getId());
    }

    /*
    Parcelable implement
     */

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {

        parcel.writeInt(mTypeFrom);
        parcel.writeLong(id);
        parcel.writeString(urlAvatar);
        parcel.writeLong(userId);
        parcel.writeString(text);
        parcel.writeString(username);
        parcel.writeString(fullname);
        parcel.writeString(source);
        parcel.writeString(toUsername);
        parcel.writeLong(toUserId);
        parcel.writeLong(createAt.getTime());
        parcel.writeLong(toReplyId);
        parcel.writeInt(favorited ? 1 : 0);
        parcel.writeDouble(latitude);
        parcel.writeDouble(longitude);
        parcel.writeInt(retweet ? 1 : 0);
        parcel.writeString(urlAvatarRetweet);
        parcel.writeString(textRetweet);
        parcel.writeString(usernameRetweet);
        parcel.writeString(fullnameRetweet);
        parcel.writeString(sourceRetweet);
        parcel.writeString(urlTweet);
        parcel.writeString(textHTMLFinal);
        parcel.writeInt(typeTweet);
        parcel.writeInt(linksCount);
        parcel.writeString(bestLink);

        if (urls != null) {
            parcel.writeInt(urls.size());
            for (URLContent url : urls) {
                parcel.writeString(url.normal);
                parcel.writeString(url.display);
                parcel.writeString(url.expanded);
                parcel.writeString(url.linkMediaThumb);
                parcel.writeString(url.linkMediaLarge);
            }
        }
    }

    public static final Parcelable.Creator<InfoTweet> CREATOR = new Parcelable.Creator<InfoTweet>() {
        public InfoTweet createFromParcel(Parcel in) {
            return new InfoTweet(in);
        }

        public InfoTweet[] newArray(int size) {
            return new InfoTweet[size];
        }
    };

    private InfoTweet(Parcel in) {
        mTypeFrom = in.readInt();
        id = in.readLong();
        urlAvatar = in.readString();
        userId = in.readLong();
        text = in.readString();
        username = in.readString();
        fullname = in.readString();
        source = in.readString();
        toUsername = in.readString();
        toUserId = in.readLong();
        createAt = new Date(in.readLong());
        toReplyId = in.readLong();
        favorited = (in.readInt() == 1);
        latitude = in.readDouble();
        longitude = in.readDouble();
        retweet = (in.readInt() == 1);
        urlAvatarRetweet = in.readString();
        textRetweet = in.readString();
        usernameRetweet = in.readString();
        fullnameRetweet = in.readString();
        sourceRetweet = in.readString();
        urlTweet = in.readString();
        textHTMLFinal = in.readString();
        typeTweet = in.readInt();
        linksCount = in.readInt();
        bestLink = in.readString();

        int sizeUrls = in.readInt();
        urls = new ArrayList<URLContent>();
        for (int i = 0; i < sizeUrls; i++) {
            URLContent url = new URLContent();
            url.normal = in.readString();
            url.display = in.readString();
            url.expanded = in.readString();
            url.linkMediaThumb = in.readString();
            url.linkMediaLarge = in.readString();
            urls.add(url);
        }

        calculateLinks();

    }

    public boolean isMoreTweetDown() {
        return moreTweetDown;
    }

    public void setMoreTweetDown(boolean moreTweetDown) {
        this.moreTweetDown = moreTweetDown;
    }
}