package com.instructure.canvasapi.api;
import com.instructure.canvasapi.model.CanvasContext;
import com.instructure.canvasapi.model.Course;
import com.instructure.canvasapi.model.Section;
import com.instructure.canvasapi.model.Submission;
import com.instructure.canvasapi.utilities.APIHelpers;
import com.instructure.canvasapi.utilities.CanvasCallback;
import java.util.Date;
import retrofit.Callback;
import retrofit.http.Body;
import retrofit.http.GET;
import retrofit.http.PUT;
import retrofit.http.Path;
import retrofit.http.Query;
/**
*
* Copyright (c) 2015 Instructure. All rights reserved.
*/
public class SectionAPI extends BuildInterfaceAPI {
interface SectionsInterface {
@PUT("{courseid}/sections/{sectionid}")
void updateSection(@Path("courseid") long courseID,
@Path("sectionid") long sectionID,
@Query("course_section[name]") String name,
@Query("course_section[start_at]") String startAt,
@Query("course_section[end_at]") String endAt,
@Body String body,
CanvasCallback<Section> callback
);
@GET("/{courseid}/sections")
void getFirstPageSectionsList(@Path("courseid") long courseID, Callback<Section[]> callback);
@GET("/{courseid}/sections?include[]=students&include[]=avatar_url")
void getCourseSectionsWithStudents(@Path("courseid") long courseID, Callback<Section[]> callback);
@GET("/{next}")
void getNextPageSectionsList(@Path(value = "next", encode = false) String nextURL, Callback<Section[]> callback);
@GET("/courses/{courseid}/sections/{sectionid}")
void getSingleSection(@Path("courseid") long courseID, @Path("sectionid") long sectionID, Callback<Section> callback);
@GET("/{section_id}/assignments/{assignment_id}/submissions")
void getAssignmentSubmissionsForSection(@Path("section_id") long section_id, @Path("assignment_id") long assignment_id, Callback<Submission[]> callback);
}
/////////////////////////////////////////////////////////////////////////
// API Calls
/////////////////////////////////////////////////////////////////////////
public static void getFirstPageSectionsList(Course course, CanvasCallback<Section[]> callback) {
if (APIHelpers.paramIsNull(callback, course)) { return; }
buildCacheInterface(SectionsInterface.class, callback, course).getFirstPageSectionsList(course.getId(), callback);
buildInterface(SectionsInterface.class, callback, course).getFirstPageSectionsList(course.getId(), callback);
}
public static void getCourseSectionsWithStudents(Course course, CanvasCallback<Section[]> callback){
if (APIHelpers.paramIsNull(callback, course)) { return; }
buildCacheInterface(SectionsInterface.class, callback, course).getCourseSectionsWithStudents(course.getId(), callback);
buildInterface(SectionsInterface.class, callback, course).getCourseSectionsWithStudents(course.getId(), callback);
}
public static void getNextPageSectionsList(String nextURL, CanvasCallback<Section[]> callback){
if (APIHelpers.paramIsNull(callback, nextURL)) { return; }
callback.setIsNextPage(true);
buildCacheInterface(SectionsInterface.class, callback, false).getNextPageSectionsList(nextURL, callback);
buildInterface(SectionsInterface.class, callback, false).getNextPageSectionsList(nextURL, callback);
}
public static void getAssignmentSubmissionsForSection(CanvasContext canvasContext, long assignment_id, final CanvasCallback<Submission[]> callback){
if(APIHelpers.paramIsNull(callback, canvasContext)){return;}
buildCacheInterface(SectionsInterface.class, callback, canvasContext).getAssignmentSubmissionsForSection(canvasContext.getId(), assignment_id, callback);
buildInterface(SectionsInterface.class, callback, canvasContext).getAssignmentSubmissionsForSection(canvasContext.getId(), assignment_id, callback);
}
/**
*
* @param newSectionName (Optional)
* @param newStartAt (Optional)
* @param newEndAt (Optional)
* @param course (Required)
* @param section (Required)
* @param callback (Required)
*/
public static void updateSection(String newSectionName, Date newStartAt, Date newEndAt, Course course, Section section, CanvasCallback<Section> callback){
if(APIHelpers.paramIsNull(callback, course, section)){return;}
String startAtString = APIHelpers.dateToString(newStartAt);
String endAtString = APIHelpers.dateToString(newEndAt);
buildInterface(SectionsInterface.class, callback,course).updateSection(course.getId(), section.getId(), newSectionName, startAtString, endAtString, "", callback);
}
public static void getSingleSection(long courseID, long sectionID, CanvasCallback<Section> callback){
if (APIHelpers.paramIsNull(callback)) { return; }
buildCacheInterface(SectionsInterface.class, callback, null).getSingleSection(courseID, sectionID, callback);
buildInterface(SectionsInterface.class, callback, null).getSingleSection(courseID, sectionID, callback);
}
}