package com.robonobo.midas.client; import static com.robonobo.common.util.TextUtil.*; import java.io.Serializable; import java.util.Collection; import java.util.Date; import java.util.regex.Matcher; import com.robonobo.common.exceptions.SeekInnerCalmException; import com.robonobo.common.util.TextUtil; import com.robonobo.core.api.model.Comment; public class MidasClientConfig implements Serializable { private static final long serialVersionUID = 1L; private String baseUrl; public MidasClientConfig() { } public MidasClientConfig(String baseUrl) { if (!baseUrl.endsWith("/")) baseUrl = baseUrl + "/"; this.baseUrl = baseUrl; } public String getPlaylistUrl(long playlistId) { return baseUrl + "playlists/" + Long.toHexString(playlistId); } public String getSharePlaylistUrl(long playlistId, Collection<Long> friendIds, Collection<String> emails) { StringBuffer sb = new StringBuffer(baseUrl).append("share-playlist/share?plid="); sb.append(Long.toHexString(playlistId)); if (friendIds.size() > 0) { sb.append("&friendids="); boolean first = true; for (Long friendId : friendIds) { if (first) first = false; else sb.append(","); sb.append(Long.toHexString(friendId)); } } if (emails.size() > 0) { sb.append("&emails="); boolean first = true; for (String email : emails) { if (first) first = false; else sb.append(","); sb.append(urlEncode(email)); } } return sb.toString(); } public String getAddFriendsUrl(Collection<String> emails) { StringBuffer sb = new StringBuffer(baseUrl).append("add-friends?emails="); boolean first = true; for (String email : emails) { if (first) first = false; else sb.append(","); sb.append(urlEncode(email)); } return sb.toString(); } public String getPlaylistServiceUpdateUrl(String service, long playlistId, String msg) { return baseUrl + "playlists/" + Long.toHexString(playlistId) + "/post-update?service=" + service + "&msg=" + urlEncode(msg); } public String getStreamUrl(String streamId) { return baseUrl + "streams/" + streamId; } public String getUserUrl(String userEmail) { return baseUrl + "users/byemail/" + urlEncode(userEmail); } public String getUserUrl(long userId) { return baseUrl + "users/byid/" + Long.toHexString(userId); } public String getLibraryUrl(long userId, Date since) { String url = baseUrl + "library/" + Long.toHexString(userId); if (since != null) url += "?since=" + since.getTime(); return url; } public String getLibraryAddUrl(long userId) { return baseUrl + "library/" + Long.toHexString(userId) + "/add"; } public String getLibraryDelUrl(long userId) { return baseUrl + "library/" + Long.toHexString(userId) + "/del"; } public String getUserConfigUrl(long userId) { return baseUrl + "userconfig/" + Long.toHexString(userId); } public String getSearchQueryUrl(String query, int firstResult) { String result = baseUrl + "search?type=stream&q=" + TextUtil.urlEncode(query); if (firstResult > 0) result += "&start=" + String.valueOf(firstResult); return result; } public String getCommentByIdUrl(long commentId) { return baseUrl + "comment/byid/" + Long.toHexString(commentId); } public String getCommentByTypeUrl(String resourceId) { Matcher m = Comment.RESOURCE_ID_PAT.matcher(resourceId); if (!m.matches()) throw new SeekInnerCalmException(); String type = m.group(1); long id = Long.parseLong(m.group(2)); return baseUrl + "comment/" + type + "/" + Long.toHexString(id); } public String getAllCommentsUrl(String itemType, long itemId, Date since) { StringBuffer sb = new StringBuffer(baseUrl).append("comments/").append(itemType).append("/").append(Long.toHexString(itemId)); if (since != null) sb.append("?since=").append(since.getTime()); return sb.toString(); } }