de.jetwick.data.JUser.java Source code

Java tutorial

Introduction

Here is the source code for de.jetwick.data.JUser.java

Source

/**
 * Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
 *
 * 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 de.jetwick.data;

import de.jetwick.es.SavedSearch;
import de.jetwick.tw.TwitterSearch;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import twitter4j.Status;
import twitter4j.Tweet;
import twitter4j.User;

/**
 *
 * @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
 */
public class JUser implements DbObject, Serializable {

    private static final long serialVersionUID = 1L;
    public static int OUT_OF_DATE_DAYS = 7;
    public static int DISPLAY_TWEETS = 2;
    public static final String UPDATE_AT = "updateAt";
    public static final String OWN_TWEETS = "ownTweets";
    public static final String SCREEN_NAME = "screenName";
    public static String ROLE_ADMIN = "admin";
    public static String ROLE_USER = "user";
    //public static String MODE_SMART = "smartread";
    private Collection<JTweet> ownTweets = new LinkedHashSet<JTweet>(8);
    private Map<Long, SavedSearch> savedSearches = new LinkedHashMap<Long, SavedSearch>();
    private Date lastFriendsUpdate;
    private Collection<String> friends;
    private String realName;
    // we don't need an index here -> already via uniqueconstraint
    private String screenName;
    private Long twitterId;
    private String profileImageUrl;
    private String webUrl;
    private String location;
    private Set<String> langs = new LinkedHashSet<String>(4);
    private String description;
    private Date createdAt;
    private Date twitterCreatedAt;
    private Date lastVisit;
    private int followersCount = 0;
    private int friendsCount = 0;
    private Set<String> tags = new LinkedHashSet<String>(4);
    private Map<String, Date> topics = new LinkedHashMap<String, Date>(4);
    private String twitterTokenSecret;
    private String twitterToken;
    private String role = ROLE_USER;
    private String email;
    private String mode;
    private boolean weekFallback = true;
    private boolean isProtected = false;
    private boolean active = true;

    public JUser() {
        setCreatedAt(new Date());
    }

    public JUser(String name) {
        this();
        this.screenName = name.toLowerCase();
        if (screenName.trim().length() == 0)
            throw new IllegalArgumentException("Screenname must not be empty!");
    }

    public JUser(User u) {
        this(u.getScreenName());
        updateFieldsBy(u);
    }

    @Override
    public String getId() {
        return getScreenName();
    }

    public boolean isActive() {
        return active;
    }

    public JUser setActive(boolean active) {
        this.active = active;
        return this;
    }

    public void setWeekFallback(boolean weekFallback) {
        this.weekFallback = weekFallback;
    }

    public boolean isWeekFallback() {
        return weekFallback;
    }

    public JUser setMode(String mode) {
        this.mode = mode;
        return this;
    }

    public String getMode() {
        return mode;
    }

    public Date getLastVisit() {
        return lastVisit;
    }

    public JUser setLastVisit(Date lastVisit) {
        this.lastVisit = lastVisit;
        return this;
    }

    public Collection<String> getTags() {
        return tags;
    }

    public void addTag(String tag) {
        tags.add(tag);
    }

    public String getTwitterToken() {
        return twitterToken;
    }

    public JUser setTwitterToken(String twitterToken) {
        this.twitterToken = twitterToken;
        return this;
    }

    public String getTwitterTokenSecret() {
        return twitterTokenSecret;
    }

    public JUser setTwitterTokenSecret(String twitterTokenSecret) {
        this.twitterTokenSecret = twitterTokenSecret;
        return this;
    }

    /**
     * This method refreshes the properties of this user by the specified
     * Twitter4j user
     * @param user
     */
    public Status updateFieldsBy(User user) {
        twitterId = user.getId();
        setProtected(user.isProtected());
        setTwitterCreatedAt(user.getCreatedAt());
        setDescription(user.getDescription());
        addLanguage(user.getLang());
        setLocation(TwitterSearch.toStandardLocation(user.getLocation()));
        setRealName(user.getName());

        // user.getFollowersCount();
        // user.getFriendsCount();
        // user.getTimeZone()

        if (user.getProfileImageURL() != null)
            setProfileImageUrl(user.getProfileImageURL().toString());

        if (user.getURL() != null)
            setWebUrl(user.getURL().toString());

        setFollowersCount(user.getFollowersCount());
        setFriendsCount(user.getFriendsCount());
        return user.getStatus();
    }

    public void setFollowersCount(int followersCount) {
        this.followersCount = followersCount;
    }

    public void setFriendsCount(int friendsCount) {
        this.friendsCount = friendsCount;
    }

    public int getFollowersCount() {
        return followersCount;
    }

    public int getFriendsCount() {
        return friendsCount;
    }

    public void setTwitterCreatedAt(Date twitterCreatedAt) {
        this.twitterCreatedAt = twitterCreatedAt;
    }

    public Date getTwitterCreatedAt() {
        return twitterCreatedAt;
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public JUser setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
        return this;
    }

    public String getEmail() {
        return email;
    }

    public JUser setEmail(String email) {
        this.email = email;
        return this;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getRole() {
        return role;
    }

    public void addLanguage(String lang) {
        langs.add(lang);
    }

    public Collection<String> getLanguages() {
        return langs;
    }

    public boolean isAdmin() {
        return ROLE_ADMIN.equals(role);
    }

    public Long getTwitterId() {
        return twitterId;
    }

    public void setTwitterId(long id) {
        this.twitterId = id;
    }

    public String getScreenName() {
        return screenName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getLocation() {
        return location;
    }

    public JUser setLocation(String location) {
        this.location = location;
        return this;
    }

    public String getProfileImageUrl() {
        return profileImageUrl;
    }

    public void setProfileImageUrl(String profileImageUrl) {
        this.profileImageUrl = profileImageUrl;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public String getWebUrl() {
        return webUrl;
    }

    public void setWebUrl(String webUrl) {
        this.webUrl = webUrl;
    }

    @Override
    public String toString() {
        return screenName;
    }

    public JUser init(Tweet tw) {
        setProfileImageUrl(tw.getProfileImageUrl());
        setLocation(TwitterSearch.toStandardLocation(tw.getLocation()));
        return this;
    }

    public void addSavedSearch(SavedSearch ss) {
        savedSearches.put(ss.getId(), ss);
    }

    public boolean removeSavedSearch(long ssId) {
        return savedSearches.remove(ssId) != null;
    }

    public SavedSearch getSavedSearch(long id) {
        return savedSearches.get(id);
    }

    public Collection<SavedSearch> getSavedSearches() {
        return savedSearches.values();
    }

    public void addOwnTweet(JTweet tw) {
        addOwnTweet(tw, true);
    }

    public void addOwnTweet(JTweet tw, boolean reverse) {
        ownTweets.add(tw);
        //        dirtyOwnTweets = true;

        if (reverse)
            tw.setFromUser(this, false);
    }

    @Override
    public JUser setVersion(long v) {
        //        this.version = v;
        return this;
    }

    @Override
    public long getVersion() {
        return 0;
    }

    public Collection<JTweet> getOwnTweets() {
        //        if (dirtyOwnTweets) {
        //            SolrTweet.deduplicate(ownTweets);
        //            dirtyOwnTweets = false;
        //        }
        return Collections.unmodifiableCollection(ownTweets);
    }

    public JUser updateTopic(String topic, Date date) {
        topics.put(topic, date);
        return this;
    }

    public JUser setTopics(List<String> topicList) {
        Map<String, Date> oldTopics = topics;
        topics = new LinkedHashMap<String, Date>(topics.size());
        for (String topic : topicList) {
            Date date = oldTopics.get(topic);
            topics.put(topic, date);
        }

        return this;
    }

    public Collection<String> getTopics() {
        return topics.keySet();
    }

    public Map<String, Date> getTopicsMap() {
        return topics;
    }

    public Collection<String> getFriends() {
        if (friends == null)
            return Collections.EMPTY_LIST;
        return friends;
    }

    public JUser setFriends(Collection<String> friends) {
        this.friends = friends;
        return this;
    }

    public Date getLastFriendsUpdate() {
        return lastFriendsUpdate;
    }

    public void setLastFriendsUpdate(Date lastFriendsUpdate) {
        this.lastFriendsUpdate = lastFriendsUpdate;
    }

    public void setProtected(boolean aProtected) {
        isProtected = aProtected;
    }

    public boolean isProtected() {
        return isProtected;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        final JUser other = (JUser) obj;
        if ((this.screenName == null) ? (other.screenName != null) : !this.screenName.equals(other.screenName))
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 61 * hash + (this.screenName != null ? this.screenName.hashCode() : 0);
        return hash;
    }
}