/* * 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 . */ package com.juick.model; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlTransient; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import javax.annotation.Nonnull; 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 tokens; private List read; private List readers; private List unread; private URI uri; private Instant seen; private boolean verified; private boolean service; private String country; private String url; private String description; private final List 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 getTokens() { return tokens; } public void setTokens(List tokens) { this.tokens = tokens; } public List getRead() { return read; } public List getReaders() { return readers; } public void setRead(List read) { this.read = read; } public void setReaders(List readers) { this.readers = readers; } public List getUnread() { return unread; } public void setUnread(List 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; } @XmlTransient public boolean isService() { return service; } public void setService(boolean service) { this.service = service; } 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 getTagStats() { return tagStats; } }