aboutsummaryrefslogblamecommitdiff
path: root/src/main/java/com/juick/model/User.java
blob: b43257ed248a124f85695c207f257ab50a6b8341 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
                                 












                                                                           
                        
 
                                                     
                                            
                                                        
 
                                


                                                 
                            
                    
                         
                           
                      
                         
 
   
                       
                                                                   
                  
                                           
                        
                          
                            

                              
                               
                                       
                               
                                 
                    
                         
                             

                               
                                          
                   
                                   
                                     
                                            
     

                                       
                             
                                                                                              
     
                           
                                      






                                             



                                                       
                        

                               
     
                                 
     
                          

                                 
     
                                      
     
                             
                 
                                 
                        

                                              
                                 
     
                 
               
                                 
                        

                                              
                                 
     
 
                                
                 
                                     
                             
     
 
                                               
                                   
     

                               
                      

                                           
                             
     
                               
                      
     
                                             
     








                                                    
 
                 





                                                     

                 
                                  
                        
     
 

                                            
     
                                                       
     













                                                






                                                 
 
            
                 
                         

                                                




                                 






                                       
 
                 





                                               






















                                                    


                                         
 
/*
 * Copyright (C) 2008-2020, Juick
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.juick.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;

import javax.annotation.Nonnull;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.io.Serializable;
import java.net.URI;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author Ugnich Anton
 */
@XmlRootElement(name = "user", namespace = "http://juick.com/user")
@XmlAccessorType()
public class User implements Serializable {
    private int uid;
    private String name;
    private String avatar;
    private String fullName;
    private int messagesCount;
    private String authHash;
    private boolean banned;
    private String credentials;
    private List<ExternalToken> tokens;
    private List<User> read;
    private List<User> readers;
    private List<Integer> unread;
    private URI uri;
    private Instant seen;
    private boolean verified;
    private String country;
    private String url;
    private String description;
    private final List<TagStats> tagStats;

    public User() {
        tokens = new ArrayList<>();
        tagStats = new ArrayList<>();
        uri = URI.create(StringUtils.EMPTY);
    }

    @Override
    public boolean equals(Object obj) {
        return obj == this ||
                (obj instanceof User && ((User) obj).getUid() == this.getUid()
                        && ((User) obj).getUri().toString().equals(this.getUri().toString()));
    }

    @Override
    public int hashCode() {
        return Objects.hash(uid, uri);
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this)
                .append("uid", uid)
                .append("name", name)
                .append("fullName", fullName)
                .append("messagesCount", messagesCount)
                .append("banned", banned)
                .toString();
    }

    @JsonProperty("uid")
    @XmlAttribute(name = "uid")
    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    @JsonProperty("uname")
    @XmlAttribute(name = "uname")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @JsonProperty("fullname")
    @XmlTransient
    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    @XmlTransient
    @JsonIgnore
    public String getAuthHash() {
        return authHash;
    }

    public void setAuthHash(String authHash) {
        this.authHash = authHash;
    }

    @JsonProperty("unreadCount")
    @XmlTransient
    public Integer getUnreadCount() {
        return messagesCount;
    }

    public void setUnreadCount(Integer count) {
        this.messagesCount = count;
    }

    @XmlTransient
    public boolean isBanned() {
        return banned;
    }

    public void setBanned(boolean banned) {
        this.banned = banned;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatarUri) {
        this.avatar = avatarUri;
    }

    @XmlTransient
    @JsonIgnore
    public String getCredentials() {
        return credentials;
    }

    public void setCredentials(String credentials) {
        this.credentials = credentials;
    }

    @XmlTransient
    public int getMessagesCount() {
        return messagesCount;
    }

    public void setMessagesCount(int messagesCount) {
        this.messagesCount = messagesCount;
    }

    @XmlTransient
    @JsonIgnore
    public boolean isAnonymous() {
        return uid == 0;
    }

    @Nonnull
    public List<ExternalToken> getTokens() {
        return tokens;
    }

    public void setTokens(List<ExternalToken> tokens) {
        this.tokens = tokens;
    }

    public List<User> getRead() {
        return read;
    }
    public List<User> getReaders() {
        return readers;
    }

    public void setRead(List<User> read) {
        this.read = read;
    }

    public void setReaders(List<User> readers) {
        this.readers = readers;
    }

    public List<Integer> getUnread() {
        return unread;
    }

    public void setUnread(List<Integer> unread) {
        this.unread = unread;
    }

    @Nonnull
    @XmlTransient
    public URI getUri() {
        if (uri == null) {
            uri = URI.create(StringUtils.EMPTY);
        }
        return uri;
    }

    public void setUri(URI uri) {
        this.uri = uri;
    }

    public Instant getSeen() {
        return seen;
    }

    public void setSeen(Instant seen) {
        this.seen = seen;
    }

    @XmlTransient
    public boolean isVerified() {
        return verified;
    }

    public void setVerified(boolean verified) {
        this.verified = verified;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDescription() {
        return description;
    }

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

    public List<TagStats> getTagStats() {
        return tagStats;
    }
}