package com.instructure.canvasapi.api;
import com.instructure.canvasapi.model.CanvasContext;
import com.instructure.canvasapi.model.ModuleItem;
import com.instructure.canvasapi.model.ModuleObject;
import com.instructure.canvasapi.utilities.APIHelpers;
import com.instructure.canvasapi.utilities.CanvasCallback;
import com.instructure.canvasapi.utilities.ExhaustiveBridgeCallback;
import com.squareup.okhttp.Response;
import retrofit.Callback;
import retrofit.http.Body;
import retrofit.http.DELETE;
import retrofit.http.GET;
import retrofit.http.POST;
import retrofit.http.PUT;
import retrofit.http.Path;
/**
* Copyright (c) 2016 Instructure. All rights reserved.
*/
public class ModuleAPI extends BuildInterfaceAPI {
interface ModulesInterface {
@GET("/{context_id}/modules")
void getFirstPageModuleObjects(@Path("context_id") long context_id, Callback<ModuleObject[]> callback);
@GET("/{next}")
void getNextPageModuleObjectList(@Path(value = "next", encode = false) String nextURL, Callback<ModuleObject[]> callback);
@GET("/{context_id}/modules/{module_id}/items?include[]=content_details")
void getFirstPageModuleItems(@Path("context_id") long context_id, @Path("module_id") long moduleID, Callback<ModuleItem[]> callback);
@GET("/{next}?include[]=content_details")
void getNextPageModuleItemList(@Path(value = "next", encode = false) String nextURL, Callback<ModuleItem[]> callback);
@POST("/{context_id}/modules/{module_id}/items/{item_id}/mark_read")
void markModuleItemRead(@Path("context_id") long context_id, @Path("module_id") long module_id, @Path("item_id") long item_id, @Body String body, Callback<Response> callback);
@PUT("/{context_id}/modules/{module_id}/items/{item_id}/done")
void markModuleAsDone(@Path("context_id") long context_id, @Path("module_id") long module_id, @Path("item_id") long item_id, @Body String body, Callback<Response> callback);
@DELETE("/{context_id}/modules/{module_id}/items/{item_id}/done")
void markModuleAsNotDone(@Path("context_id") long context_id, @Path("module_id") long module_id, @Path("item_id") long item_id, Callback<Response> callback);
}
/////////////////////////////////////////////////////////////////////////
// API Calls
/////////////////////////////////////////////////////////////////////////
public static void getModuleItemsExhaustive(CanvasContext canvasContext, long moduleId, final CanvasCallback<ModuleItem[]> callback) {
if (APIHelpers.paramIsNull(canvasContext, callback)) { return; }
CanvasCallback<ModuleItem[]> bridge = new ExhaustiveBridgeCallback<>(ModuleItem.class, callback, new ExhaustiveBridgeCallback.ExhaustiveBridgeEvents() {
@Override
public void performApiCallWithExhaustiveCallback(CanvasCallback bridgeCallback, String nextURL, boolean isCached) {
if(callback.isCancelled()) { return; }
ModuleAPI.getNextPageModuleItemsChained(nextURL, bridgeCallback, isCached);
}
});
buildCacheInterface(ModulesInterface.class, callback, canvasContext).getFirstPageModuleItems(canvasContext.getId(), moduleId, bridge);
buildInterface(ModulesInterface.class, callback, canvasContext).getFirstPageModuleItems(canvasContext.getId(), moduleId, bridge);
}
public static void getFirstPageModuleObjects(CanvasContext canvasContext, CanvasCallback<ModuleObject[]> callback) {
if (APIHelpers.paramIsNull(callback, canvasContext)) { return; }
buildCacheInterface(ModulesInterface.class, callback, canvasContext).getFirstPageModuleObjects(canvasContext.getId(), callback);
buildInterface(ModulesInterface.class, callback, canvasContext).getFirstPageModuleObjects(canvasContext.getId(), callback);
}
public static void getNextPageModuleObjects(String nextURL, CanvasCallback<ModuleObject[]> callback){
if (APIHelpers.paramIsNull(callback, nextURL)) { return; }
callback.setIsNextPage(true);
buildCacheInterface(ModulesInterface.class, callback, false).getNextPageModuleObjectList(nextURL, callback);
buildInterface(ModulesInterface.class, callback, false).getNextPageModuleObjectList(nextURL, callback);
}
public static void getFirstPageModuleItems(CanvasContext canvasContext, long moduleId, CanvasCallback<ModuleItem[]> callback) {
if (APIHelpers.paramIsNull(callback)) { return; }
buildCacheInterface(ModulesInterface.class, callback, canvasContext).getFirstPageModuleItems(canvasContext.getId(), moduleId, callback);
buildInterface(ModulesInterface.class, callback, canvasContext).getFirstPageModuleItems(canvasContext.getId(), moduleId, callback);
}
public static void getNextPageModuleItems(String nextURL, CanvasCallback<ModuleItem[]> callback){
if (APIHelpers.paramIsNull(callback, nextURL)) { return; }
callback.setIsNextPage(true);
buildCacheInterface(ModulesInterface.class, callback, false).getNextPageModuleItemList(nextURL, callback);
buildInterface(ModulesInterface.class, callback, false).getNextPageModuleItemList(nextURL, callback);
}
public static void getNextPageModuleItemsChained(String nextURL, CanvasCallback<ModuleItem[]> callback, boolean isCached){
if (APIHelpers.paramIsNull(callback, nextURL)) { return; }
callback.setIsNextPage(true);
if (isCached) {
buildCacheInterface(ModulesInterface.class, callback, false).getNextPageModuleItemList(nextURL, callback);
} else {
buildInterface(ModulesInterface.class, callback, false).getNextPageModuleItemList(nextURL, callback);
}
}
public static void markModuleItemRead(CanvasContext canvasContext, long moduleId, long itemId, CanvasCallback<Response> callback){
if(APIHelpers.paramIsNull(callback, canvasContext)){
return;
}
buildInterface(ModulesInterface.class, callback, canvasContext).markModuleItemRead(canvasContext.getId(), moduleId, itemId, "", callback);
}
public static void markModuleAsDone(CanvasContext canvasContext, long moduleId, long itemId, CanvasCallback<Response> callback){
if(APIHelpers.paramIsNull(callback, canvasContext)){
return;
}
buildInterface(ModulesInterface.class, callback, canvasContext, false).markModuleAsDone(canvasContext.getId(), moduleId, itemId, "", callback);
}
public static void markModuleAsNotDone(CanvasContext canvasContext, long moduleId, long itemId, CanvasCallback<Response> callback){
if(APIHelpers.paramIsNull(callback, canvasContext)){
return;
}
buildInterface(ModulesInterface.class, callback, canvasContext, false).markModuleAsNotDone(canvasContext.getId(), moduleId, itemId, callback);
}
}