package com.robonobo.core.api.model; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import com.robonobo.common.exceptions.SeekInnerCalmException; import com.robonobo.core.api.proto.CoreApi.PlaylistMsg; public class Playlist implements Comparable<Playlist> { public static final String VIS_ALL = "all"; public static final String VIS_FRIENDS = "friends"; public static final String VIS_ME = "me"; String title; Date updated; List<String> streamIds = new ArrayList<String>(); String description; long playlistId; String visibility = VIS_FRIENDS; Set<Long> ownerIds = new HashSet<Long>(); public Playlist() { } public Playlist(PlaylistMsg msg) { playlistId = msg.getId(); title = msg.getTitle(); updated = new Date(msg.getUpdatedDate()); description = msg.getDescription(); String vis = msg.getVisibility(); if((!vis.equals(VIS_ALL)) && (!vis.equals(VIS_FRIENDS)) && (!vis.equals(VIS_ME))) throw new SeekInnerCalmException("invalid visibility: "+vis); visibility = vis; streamIds.addAll(msg.getStreamIdList()); ownerIds.addAll(msg.getOwnerIdList()); } public PlaylistMsg toMsg() { PlaylistMsg.Builder b = PlaylistMsg.newBuilder(); b.setId(playlistId); b.setTitle(title); if(updated != null) b.setUpdatedDate(updated.getTime()); if(description != null) b.setDescription(description); b.setVisibility(visibility); b.addAllStreamId(streamIds); b.addAllOwnerId(ownerIds); return b.build(); } public void copyFrom(Playlist p) { title = p.title; description = p.description; playlistId = p.playlistId; updated = p.updated; visibility = p.visibility; streamIds.clear(); streamIds.addAll(p.getStreamIds()); } public boolean equals(Object obj) { if(obj == null) return false; if(!(obj instanceof Playlist)) return false; Playlist p = (Playlist) obj; return playlistId == p.getPlaylistId(); } @Override public int compareTo(Playlist o) { return title.toLowerCase().compareTo(o.getTitle().toLowerCase()); } public long getPlaylistId() { return playlistId; } public String getDescription() { return description; } public String getTitle() { return title; } public Date getUpdated() { return updated; } public int hashCode() { return (int) (getClass().getName().hashCode() ^ getPlaylistId()); } public void setPlaylistId(long playlistId) { this.playlistId = playlistId; } public void setDescription(String description) { this.description = description; } public void setTitle(String title) { this.title = title; } public void setUpdated(Date updated) { this.updated = updated; } public String toString() { StringBuffer sb = new StringBuffer("[Playlist:id=").append(playlistId).append(",title=").append(title).append(",streams=("); int i = 0; for (String s : streamIds) { if(i++ > 0) sb.append(","); sb.append(s); } sb.append(")]"); return sb.toString(); } public List<String> getStreamIds() { return streamIds; } public void setStreamIds(List<String> streamIds) { this.streamIds = streamIds; } public String getVisibility() { return visibility; } public void setVisibility(String visibility) { this.visibility = visibility; } public Set<Long> getOwnerIds() { return ownerIds; } public void setOwnerIds(Set<Long> ownerIds) { this.ownerIds = ownerIds; } }