package com.robonobo.core.api.model; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.Set; import com.robonobo.core.api.proto.CoreApi.UserMsg; @SuppressWarnings("serial") public class User implements Serializable { long userId; String email; String password; String friendlyName; String description; String imgUrl; Date updated; int invitesLeft; Set<Long> friendIds = new HashSet<Long>(); Set<Long> playlistIds = new HashSet<Long>(); public User() { } public User(String email, String password) { this.email = email; this.password = password; } public User(User copyUser) { this(copyUser.getEmail(), copyUser.getPassword()); setUserId(copyUser.getUserId()); copyFrom(copyUser); } public User(UserMsg msg) { this(msg.getEmail(), msg.getPassword()); setUserId(msg.getId()); setFriendlyName(msg.getFriendlyName()); setDescription(msg.getDescription()); setImgUrl(msg.getImageUrl()); setUpdated(new Date(msg.getUpdatedDate())); setInvitesLeft(msg.getInvitesLeft()); friendIds.addAll(msg.getFriendIdList()); playlistIds.addAll(msg.getPlaylistIdList()); } public UserMsg toMsg(boolean incPassword) { UserMsg.Builder b = UserMsg.newBuilder(); b.setId(userId); b.setEmail(email); if(incPassword) b.setPassword(password); b.setFriendlyName(friendlyName); if(description != null) b.setDescription(description); if(imgUrl != null) b.setImageUrl(imgUrl); if(updated != null) b.setUpdatedDate(updated.getTime()); b.setInvitesLeft(invitesLeft); b.addAllFriendId(friendIds); b.addAllPlaylistId(playlistIds); return b.build(); } /** * Doesn't copy id and email, to do this use the User(User) ctor */ public void copyFrom(User copyUser) { setFriendlyName(copyUser.getFriendlyName()); setDescription(copyUser.getDescription()); setImgUrl(copyUser.getImgUrl()); setUpdated(copyUser.getUpdated()); setInvitesLeft(copyUser.getInvitesLeft()); friendIds.clear(); friendIds.addAll(copyUser.getFriendIds()); playlistIds.clear(); playlistIds.addAll(copyUser.getPlaylistIds()); } @Override public int hashCode() { return getClass().getName().hashCode() ^ (int)userId; } public boolean equals(Object obj) { return obj.getClass().equals(getClass()) && (obj.hashCode() == hashCode()); } public String getEmail() { return email; } public String getPassword() { return password; } public void setEmail(String email) { this.email = email; } public void setPassword(String password) { this.password = password; } public String getFriendlyName() { return friendlyName; } public void setFriendlyName(String friendlyName) { this.friendlyName = friendlyName; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Date getUpdated() { return updated; } public void setUpdated(Date updated) { this.updated = updated; } public String getImgUrl() { return imgUrl; } public void setImgUrl(String imgUrl) { this.imgUrl = imgUrl; } public long getUserId() { return userId; } public void setUserId(long userId) { this.userId = userId; } public Set<Long> getFriendIds() { return friendIds; } public void setFriendIds(Set<Long> friendIds) { this.friendIds = friendIds; } public Set<Long> getPlaylistIds() { return playlistIds; } public void setPlaylistIds(Set<Long> playlistIds) { this.playlistIds = playlistIds; } @Override public String toString() { return "User[id="+userId+",email="+email+"]"; } public int getInvitesLeft() { return invitesLeft; } public void setInvitesLeft(int invitesLeft) { this.invitesLeft = invitesLeft; } }