package com.instructure.canvasapi.api; import com.instructure.canvasapi.model.AccountDomain; import com.instructure.canvasapi.utilities.APIHelpers; import com.instructure.canvasapi.utilities.CanvasCallback; import com.instructure.canvasapi.utilities.ExhaustiveBridgeCallback; import retrofit.http.GET; import retrofit.http.Path; import retrofit.http.Query; /** * Copyright (c) 2015 Instructure. All rights reserved. */ public class AccountDomainAPI extends BuildInterfaceAPI { private static final String DEFAULT_DOMAIN = "canvas.instructure.com"; public interface AccountDomainInterface { @GET("/accounts/search") void getFirstPageAccountDomains(CanvasCallback<AccountDomain[]> callback); @GET("/{next}") void getNextPageAccountDomains(@Path(value = "next", encode = false) String nextURL, CanvasCallback<AccountDomain[]> callback); @GET("/accounts/search") void searchAccountDomains(@Query("name") String campusName, @Query("domain") String domain, @Query("latitude") float latitude, @Query("longitude") float longitude, CanvasCallback<AccountDomain[]> callback); } public static void searchAccountDomains(String campusName, String domain, float latitude, float longitude, final CanvasCallback<AccountDomain[]> callback) { if (APIHelpers.paramIsNull(campusName, domain, callback)) { return; } APIHelpers.setDomain(callback.getContext(), DEFAULT_DOMAIN); buildInterface(AccountDomainInterface.class, callback).searchAccountDomains(campusName, domain, latitude, longitude, callback); } public static void getFirstPageAccountDomains(CanvasCallback<AccountDomain[]> callback) { if (APIHelpers.paramIsNull(callback)) return; APIHelpers.setDomain(callback.getContext(), DEFAULT_DOMAIN); buildCacheInterface(AccountDomainInterface.class, callback).getFirstPageAccountDomains(callback); buildInterface(AccountDomainInterface.class, callback).getFirstPageAccountDomains(callback); } public static void getNextPageAccountDomains(CanvasCallback<AccountDomain[]> callback, String nextURL) { if (APIHelpers.paramIsNull(callback, nextURL)) return; callback.setIsNextPage(true); buildCacheInterface(AccountDomainInterface.class, callback, false).getNextPageAccountDomains(nextURL, callback); buildInterface(AccountDomainInterface.class, callback, false).getNextPageAccountDomains(nextURL, callback); } public static void getNextPageAccountDomainsChained(CanvasCallback<AccountDomain[]> callback, String nextURL, boolean isCached) { if (APIHelpers.paramIsNull(callback, nextURL)) return; callback.setIsNextPage(true); String protocol = "https://"; if (isCached) { buildCacheGenericInterface(AccountDomainInterface.class, callback.getContext(), protocol + DEFAULT_DOMAIN, false, true).getNextPageAccountDomains(nextURL, callback); } else { buildGenericInterface(AccountDomainInterface.class, callback.getContext(), protocol + DEFAULT_DOMAIN, false, true).getNextPageAccountDomains(nextURL, callback); } } public static void getAllAccountDomains(final CanvasCallback<AccountDomain[]> callback) { if (APIHelpers.paramIsNull(callback)) return; CanvasCallback<AccountDomain[]> bridge = new ExhaustiveBridgeCallback<>(AccountDomain.class, callback, new ExhaustiveBridgeCallback.ExhaustiveBridgeEvents() { @Override public void performApiCallWithExhaustiveCallback(CanvasCallback bridgeCallback, String nextURL, boolean isCached) { if(callback.isCancelled()) { return; } AccountDomainAPI.getNextPageAccountDomainsChained(bridgeCallback, nextURL, isCached); } }); String protocol = "https://"; buildCacheGenericInterface(AccountDomainInterface.class, callback.getContext(), protocol + DEFAULT_DOMAIN, true, true).getFirstPageAccountDomains(bridge); buildGenericInterface(AccountDomainInterface.class, callback.getContext(), protocol + DEFAULT_DOMAIN, true, true).getFirstPageAccountDomains(bridge); } }