package vandy.mooc.model.mediator.webdata;
import java.util.Collection;
import retrofit.client.Response;
import retrofit.http.Body;
import retrofit.http.GET;
import retrofit.http.Multipart;
import retrofit.http.POST;
import retrofit.http.Part;
import retrofit.http.Path;
import retrofit.http.Streaming;
import retrofit.mime.TypedFile;
/**
* This interface defines an API for a VideoSvc. The
* interface is used to provide a contract for client/server
* interactions. The interface is annotated with Retrofit
* annotations so that clients can automatically convert the
*
*
* @author jules
*
*/
public interface VideoSvcApi {
public static final String DATA_PARAMETER = "data";
public static final String ID_PARAMETER = "id";
public static final String TOKEN_PATH = "/oauth/token";
// The path where we expect the VideoSvc to live
public static final String VIDEO_SVC_PATH = "/video";
// The path where we expect the VideoSvc to live
public static final String VIDEO_DATA_PATH = VIDEO_SVC_PATH + "/{"+VideoSvcApi.ID_PARAMETER+"}/data";
@GET(VIDEO_SVC_PATH)
public Collection<Video> getVideoList();
@GET(VIDEO_SVC_PATH + "/{id}")
public Video getVideoById(@Path("id") long id);
@POST(VIDEO_SVC_PATH)
public Video addVideo(@Body Video v);
@POST(VIDEO_SVC_PATH+"/{id}/rating/{rating}")
public AverageVideoRating rateVideo(@Path("id") long id, @Path("rating") int rating);
@GET(VIDEO_SVC_PATH+"/{id}/rating")
public AverageVideoRating getVideoRating(@Path("id") long id);
@Multipart
@POST(VIDEO_DATA_PATH)
public VideoStatus setVideoData(@Path(ID_PARAMETER) long id, @Part(DATA_PARAMETER) TypedFile videoData);
/**
* This method uses Retrofit's @Streaming annotation to indicate that the
* method is going to access a large stream of data (e.g., the mpeg video
* data on the server). The client can access this stream of data by obtaining
* an InputStream from the Response as shown below:
*
* VideoSvcApi client = ... // use retrofit to create the client
* Response response = client.getData(someVideoId);
* InputStream videoDataStream = response.getBody().in();
*
* @param id
* @return
*/
@Streaming
@GET(VIDEO_DATA_PATH)
Response getVideoData(@Path(ID_PARAMETER) long id);
}