package com.robonobo.remote.service;
import java.io.IOException;
import java.util.*;
import com.google.protobuf.InvalidProtocolBufferException;
import com.robonobo.common.exceptions.SeekInnerCalmException;
import com.robonobo.core.api.model.Library;
import com.robonobo.core.api.model.Playlist;
import com.robonobo.core.api.proto.CoreApi.FriendRequestMsg;
import com.robonobo.core.api.proto.CoreApi.InviteMsg;
import com.robonobo.core.api.proto.CoreApi.PlaylistMsg;
import com.robonobo.core.api.proto.CoreApi.StreamMsg;
import com.robonobo.core.api.proto.CoreApi.UserConfigMsg;
import com.robonobo.core.api.proto.CoreApi.UserMsg;
import com.robonobo.midas.model.*;
/** The client end of a remote midas service
*
* @author macavity */
public class RemoteMidasFacade extends JbossRemotingFacade implements MidasService {
/** @param url
* The jboss-remoting url to connect
* @param secret
* The sekrit string that must be passed with all calls */
public RemoteMidasFacade(String url, String secret) throws Exception {
super(url, "midas", secret);
}
public void deletePlaylist(MidasPlaylist playlist) {
invoke("deletePlaylist", playlist.toMsg().toByteArray(), null);
}
public void deleteStream(MidasStream stream) {
invoke("deleteStream", stream.toMsg().toByteArray(), null);
}
public MidasPlaylist getPlaylistById(long playlistId) {
byte[] arr = (byte[]) invoke("getPlaylistById", playlistId, null);
return playlistFromByteArr(arr);
}
@Override
public MidasPlaylist getPlaylistByUserIdAndTitle(long uid, String title) {
byte[] arr = (byte[]) invoke("getPlaylistByUserIdAndTitle", uid, Arrays.asList(title));
return playlistFromByteArr(arr);
}
@Override
public MidasPlaylist newPlaylist(MidasPlaylist playlist) {
// Don't do newPlaylist remotely
throw new SeekInnerCalmException();
}
public MidasStream getStreamById(String streamId) {
byte[] arr = (byte[]) invoke("getStreamById", streamId, null);
return streamFromByteArr(arr);
}
public MidasUser getUserAsVisibleBy(MidasUser target, MidasUser requestor) {
byte[] arr = (byte[]) invoke("getUserAsVisibleBy", target.toMsg(false).toByteArray(), Arrays.asList(requestor.toMsg(false).toByteArray()));
return userFromByteArr(arr);
}
public MidasUser getUserByEmail(String email) {
byte[] arr = (byte[]) invoke("getUserByEmail", email, null);
return userFromByteArr(arr);
}
public MidasUser getUserById(long userId) {
byte[] arr = (byte[]) invoke("getUserById", userId, null);
return userFromByteArr(arr);
}
public List<MidasUser> getAllUsers() {
// Arrrrrrrrrrr!
byte[][] arrOfArrs = (byte[][]) invoke("getAllUsers", null, null);
List<MidasUser> result = new ArrayList<MidasUser>(arrOfArrs.length);
for (byte[] arr : arrOfArrs) {
result.add(userFromByteArr(arr));
}
return result;
}
public MidasUser createUser(MidasUser user) {
byte[] arr = (byte[]) invoke("createUser", user.toMsg(true).toByteArray(), null);
return userFromByteArr(arr);
}
public void deleteUser(long userId) {
invoke("deleteUser", userId, null);
}
public void savePlaylist(MidasPlaylist playlist) {
invoke("savePlaylist", playlist.toMsg().toByteArray(), null);
}
public void saveStream(MidasStream stream) {
invoke("saveStream", stream.toMsg().toByteArray(), null);
}
public void saveUser(MidasUser user) {
invoke("saveUser", user.toMsg(true).toByteArray(), null);
}
public Long countUsers() {
return (Long) invoke("countUsers", null, null);
}
public MidasFriendRequest createOrUpdateFriendRequest(MidasUser requestor, MidasUser requestee, MidasPlaylist pl) {
byte[] arr = (byte[]) invoke("createOrUpdateFriendRequest",
requestor.toMsg(false).toByteArray(),
Arrays.asList(requestee.toMsg(false).toByteArray(), pl.toMsg().toByteArray()));
if (arr == null)
return null;
return friendReqFromByteArr(arr);
}
public MidasFriendRequest getFriendRequest(String requestCode) {
byte[] arr = (byte[]) invoke("getFriendRequest", requestCode, null);
if (arr == null)
return null;
return friendReqFromByteArr(arr);
}
public String acceptFriendRequest(MidasFriendRequest fr) {
return (String) invoke("acceptFriendRequest", fr.toMsg().toByteArray(), null);
}
public List<MidasFriendRequest> getPendingFriendRequests(long userId) {
byte[][] arrOfArrs = (byte[][]) invoke("getPendingFriendRequests", userId, null);
List<MidasFriendRequest> result = new ArrayList<MidasFriendRequest>(arrOfArrs.length);
for (byte[] arr : arrOfArrs) {
result.add(friendReqFromByteArr(arr));
}
return result;
}
public void ignoreFriendRequest(MidasFriendRequest request) {
invoke("ignoreFriendRequest", request.toMsg().toByteArray(), null);
}
public MidasInvite createOrUpdateInvite(String email, MidasUser friend, MidasPlaylist pl) {
byte[] arr = (byte[]) invoke("createOrUpdateInvite", email, Arrays.asList(friend.toMsg(false).toByteArray(), pl.toMsg().toByteArray()));
if (arr == null)
return null;
return inviteFromByteArr(arr);
}
public void inviteAccepted(long acceptedUserId, String inviteCode) {
invoke("inviteAccepted", acceptedUserId, Arrays.asList(inviteCode));
}
public MidasInvite getInvite(String inviteCode) {
byte[] arr = (byte[]) invoke("getInvite", inviteCode, null);
if (arr == null)
return null;
return inviteFromByteArr(arr);
}
public MidasInvite getInviteByEmail(String email) {
byte[] arr = (byte[]) invoke("getInviteByEmail", email, null);
if (arr == null)
return null;
return inviteFromByteArr(arr);
}
@Override
public Library getLibrary(MidasUser u, Date since) {
// We don't do library remoting yet
throw new SeekInnerCalmException();
}
@Override
public void putLibrary(Library lib) {
// We don't do library remoting yet
throw new SeekInnerCalmException();
}
@Override
public MidasUserConfig getUserConfig(MidasUser u) {
byte[] arr = (byte[]) invoke("getUserConfig", u.getUserId(), null);
return userCfgFromByteArr(arr);
}
@Override
public void putUserConfig(MidasUserConfig config) {
invoke("putUserConfig", config.toMsg().toByteArray(), null);
}
@Override
public void addFriends(long userId, List<Long> friendIds, List<String> friendEmails) {
invoke("addFriends", userId, Arrays.asList(friendIds.toArray(), friendEmails.toArray()));
}
@Override
public String requestAccountTopUp(long userId) {
byte[] arr = (byte[]) invoke("requestTopUp", userId, null);
return new String(arr);
}
private MidasPlaylist playlistFromByteArr(byte[] arr) {
if (arr == null)
return null;
PlaylistMsg msg;
try {
msg = PlaylistMsg.newBuilder().mergeFrom(arr).build();
} catch (InvalidProtocolBufferException e) {
return null;
}
return new MidasPlaylist(msg);
}
private MidasUser userFromByteArr(byte[] arr) {
if (arr == null)
return null;
UserMsg msg;
try {
msg = UserMsg.newBuilder().mergeFrom(arr).build();
} catch (InvalidProtocolBufferException e) {
return null;
}
return new MidasUser(msg);
}
private MidasUserConfig userCfgFromByteArr(byte[] arr) {
if (arr == null)
return null;
UserConfigMsg msg;
try {
msg = UserConfigMsg.newBuilder().mergeFrom(arr).build();
} catch (InvalidProtocolBufferException e) {
return null;
}
return new MidasUserConfig(msg);
}
private MidasStream streamFromByteArr(byte[] arr) {
if (arr == null)
return null;
StreamMsg msg;
try {
msg = StreamMsg.newBuilder().mergeFrom(arr).build();
} catch (InvalidProtocolBufferException e) {
return null;
}
return new MidasStream(msg);
}
private MidasInvite inviteFromByteArr(byte[] arr) {
InviteMsg msg;
try {
msg = InviteMsg.newBuilder().mergeFrom(arr).build();
} catch (InvalidProtocolBufferException e) {
return null;
}
return new MidasInvite(msg);
}
private MidasFriendRequest friendReqFromByteArr(byte[] arr) {
FriendRequestMsg msg;
try {
msg = FriendRequestMsg.newBuilder().mergeFrom(arr).build();
} catch (InvalidProtocolBufferException e) {
return null;
}
return new MidasFriendRequest(msg);
}
public List<MidasPlaylist> getRecentPlaylists(long maxAgeMs) {
return null;
}
public void deleteComment(MidasComment c) {
// No comments via remote
}
public void saveComment(MidasComment c) {
// No comments via remote
}
public MidasComment newCommentForLibrary(MidasComment comment, long userId) {
// No comments via remote
return null;
}
public MidasComment newCommentForPlaylist(MidasComment comment, long playlistId) {
// No comments via remote
return null;
}
public List<MidasComment> getCommentsForLibrary(long uid, Date since) {
// No comments via remote
return null;
}
public List<MidasComment> getCommentsForPlaylist(long plId, Date since) {
// No comments via remote
return null;
}
public MidasComment getComment(long commentId) {
return null;
}
public void lovesChanged(MidasUser u, Playlist oldP, Playlist newP) throws IOException {
// No loves via remote
}
}