package com.instructure.canvasapi.api; import com.instructure.canvasapi.model.Alert; import com.instructure.canvasapi.utilities.APIHelpers; import com.instructure.canvasapi.utilities.CanvasCallback; import com.instructure.canvasapi.utilities.ExhaustiveBridgeCallback; import retrofit.Callback; import retrofit.client.Response; import retrofit.http.Field; import retrofit.http.FormUrlEncoded; import retrofit.http.GET; import retrofit.http.POST; import retrofit.http.Path; /** * Copyright (c) 2016 Instructure. All rights reserved. */ public class AlertAPI extends BuildInterfaceAPI { public static final String AIRWOLF_DOMAIN_AMERICA = "https://airwolf-iad-prod.instructure.com/"; public static final String AIRWOLF_DOMAIN_DUBLIN = "https://airwolf-dub-prod.instructure.com/"; public static final String AIRWOLF_DOMAIN_FRANCE = "https://airwolf-fra-prod.instructure.com/"; public static final String AIRWOLF_DOMAIN_SYDNEY = "https://airwolf-syd-prod.instructure.com/"; public static final String AIRWOLF_DOMAIN_SINGAPORE = "https://airwolf-sin-prod.instructure.com/"; public static final String[] AIRWOLF_DOMAIN_LIST = { AIRWOLF_DOMAIN_AMERICA, AIRWOLF_DOMAIN_DUBLIN, AIRWOLF_DOMAIN_FRANCE, AIRWOLF_DOMAIN_SYDNEY, AIRWOLF_DOMAIN_SINGAPORE }; public static final String AIRWOLF_DOMAIN = "https://airwolf-iad-prod.instructure.com/"; interface AlertInterface { @GET("/alerts/student/{parentId}/{studentId}") void getFirstPageOfAlertsForStudent(@Path("parentId") String parentId, @Path("studentId") String studentId, Callback<Alert[]> callback); @GET("/{next}") void getNextPageOfAlertsForStudent(@Path(value = "next", encode = false) String nextURL, CanvasCallback<Alert[]> callback); @FormUrlEncoded @POST("/alert/{parentId}/{alertId}") void markAlertAsRead(@Path("parentId") String parentId, @Path("alertId") String alertId, @Field("read") String isRead, CanvasCallback<Response> callback); @FormUrlEncoded @POST("/alert/{parentId}/{alertId}") void markAlertAsDismissed(@Path("parentId") String parentId, @Path("alertId") String alertId, @Field("dismissed") String isDismissed, CanvasCallback<Response> callback); } ///////////////////////////////////////////////////////////////////////// // API Calls ///////////////////////////////////////////////////////////////////////// public static void getAllAlertsForStudent(String parentId, String studentId, final CanvasCallback<Alert[]> callback){ if(APIHelpers.paramIsNull(callback)) { return; } CanvasCallback<Alert[]> bridge = new ExhaustiveBridgeCallback<>(Alert.class, callback, new ExhaustiveBridgeCallback.ExhaustiveBridgeEvents() { @Override public void performApiCallWithExhaustiveCallback(CanvasCallback bridgeCallback, String nextURL, boolean isCached) { if(callback.isCancelled()) { return; } AlertAPI.getNextPageAlertsChained(bridgeCallback, nextURL, isCached); } }); buildCacheInterface(AlertInterface.class, APIHelpers.getAirwolfDomain(callback.getContext()), callback).getFirstPageOfAlertsForStudent(parentId, studentId, bridge); buildInterface(AlertInterface.class, APIHelpers.getAirwolfDomain(callback.getContext()), callback).getFirstPageOfAlertsForStudent(parentId, studentId, bridge); } public static void getNextPageAlertsChained(CanvasCallback<Alert[]> callback, String nextURL, boolean isCached) { if (APIHelpers.paramIsNull(callback, nextURL)) return; callback.setIsNextPage(true); if (isCached) { buildCacheInterface(AlertInterface.class, APIHelpers.getAirwolfDomain(callback.getContext()), callback, false).getNextPageOfAlertsForStudent(nextURL, callback); } else { buildInterface(AlertInterface.class, APIHelpers.getAirwolfDomain(callback.getContext()), callback, false).getNextPageOfAlertsForStudent(nextURL, callback); } } public static void markAlertAsRead(String parentId, String alertId, CanvasCallback<Response> callback) { if (APIHelpers.paramIsNull(callback)) return; buildInterface(AlertInterface.class, APIHelpers.getAirwolfDomain(callback.getContext()), callback, false).markAlertAsRead(parentId, alertId, "true", callback); } public static void markAlertAsDismissed(String parentId, String alertId, CanvasCallback<Response> callback) { if (APIHelpers.paramIsNull(callback)) return; buildInterface(AlertInterface.class, APIHelpers.getAirwolfDomain(callback.getContext()), callback, false).markAlertAsDismissed(parentId, alertId, "true", callback); } }