/* * Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez * TweetTopics 2.0 * javielinux@gmail.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.javielinux.api; import android.content.Context; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.util.Log; import com.javielinux.api.loaders.*; import com.javielinux.api.request.*; import com.javielinux.api.response.BaseResponse; import com.javielinux.api.response.ErrorResponse; import com.javielinux.utils.Utils; import java.util.concurrent.RejectedExecutionException; public class APILoader implements LoaderManager.LoaderCallbacks { private Context context; private APIDelegate delegate; private LoaderManager loaderManager; private BaseRequest baseRequest; public APILoader(Context context, LoaderManager loaderManager, APIDelegate apiDelegate) { this.context = context; this.loaderManager = loaderManager; this.delegate = apiDelegate; } public void execute(BaseRequest baseRequest) { this.baseRequest = baseRequest; try { if (loaderManager.getLoader(baseRequest.hashCode())==null) { Log.d(Utils.TAG, "initLoader: " + baseRequest.getClass().getName() + ": " + baseRequest.hashCode()); loaderManager.initLoader(baseRequest.hashCode(), null, this); } else { Log.d(Utils.TAG, "restartLoader: " + baseRequest.getClass().getName() + ": " + baseRequest.hashCode()); loaderManager.restartLoader(baseRequest.hashCode(), null, this); } } catch (IllegalStateException e) { e.printStackTrace(); } catch (RejectedExecutionException e) { e.printStackTrace(); } } @Override public Loader onCreateLoader(int i, Bundle bundle) { AsynchronousLoader<BaseResponse> loader = null; if (baseRequest instanceof CheckConversationRequest) { loader = new CheckConversationLoader(context, (CheckConversationRequest)baseRequest); } else if (baseRequest instanceof ConversationRequest) { loader = new ConversationLoader(context, (ConversationRequest)baseRequest); } else if (baseRequest instanceof DirectMessageRequest) { loader = new DirectMessageLoader(context, (DirectMessageRequest)baseRequest); } else if (baseRequest instanceof Export2HTMLRequest) { loader = new Export2HTMLLoader(context, (Export2HTMLRequest)baseRequest); } else if (baseRequest instanceof GetConversationRequest) { loader = new GetConversationLoader(context, (GetConversationRequest)baseRequest); } else if (baseRequest instanceof GetUserListRequest) { loader = new GetUserListLoader(context, (GetUserListRequest)baseRequest); } else if (baseRequest instanceof ImageUploadRequest) { loader = new ImageUploadLoader(context, (ImageUploadRequest)baseRequest); } else if (baseRequest instanceof ListUserTwitterRequest) { loader = new ListUserTwitterLoader(context, (ListUserTwitterRequest)baseRequest); } else if (baseRequest instanceof LoadImageAutoCompleteRequest) { loader = new LoadImageAutoCompleteLoader(context, (LoadImageAutoCompleteRequest)baseRequest); } else if (baseRequest instanceof LoadImageWidgetRequest) { loader = new LoadImageWidgetLoader(context, (LoadImageWidgetRequest)baseRequest); } else if (baseRequest instanceof LoadLinkRequest) { loader = new LoadLinkLoader(context, (LoadLinkRequest)baseRequest);; } else if (baseRequest instanceof LoadMoreRequest) { loader = new LoadMoreLoader(context, (LoadMoreRequest)baseRequest); } else if (baseRequest instanceof LoadMoreTweetDownRequest) { loader = new LoadMoreTweetDownLoader(context, (LoadMoreTweetDownRequest)baseRequest); } else if (baseRequest instanceof LoadTranslateTweetRequest) { loader = new LoadTranslateTweetLoader(context, (LoadTranslateTweetRequest)baseRequest); } else if (baseRequest instanceof LoadTypeStatusRequest) { loader = new LoadTypeStatusLoader(context, (LoadTypeStatusRequest)baseRequest); } else if (baseRequest instanceof LoadUserRequest) { loader = new LoadUserLoader(context, (LoadUserRequest)baseRequest); } else if (baseRequest instanceof PreparingLinkForSidebarRequest) { loader = new PreparingLinkForSidebarLoader(context, (PreparingLinkForSidebarRequest)baseRequest); } else if (baseRequest instanceof ProfileImageRequest) { loader = new ProfileImageLoader(context, (ProfileImageRequest)baseRequest); } else if (baseRequest instanceof RetweetStatusRequest) { loader = new RetweetStatusLoader(context, (RetweetStatusRequest)baseRequest); } else if (baseRequest instanceof SaveFirstTweetsRequest) { loader = new SaveFirstTweetsLoader(context, (SaveFirstTweetsRequest)baseRequest); } else if (baseRequest instanceof SearchRequest) { loader = new SearchLoader(context, (SearchRequest)baseRequest); } else if (baseRequest instanceof StatusRetweetersRequest) { loader = new StatusRetweetersLoader(context, (StatusRetweetersRequest)baseRequest); } else if (baseRequest instanceof TrendsRequest) { loader = new TrendsLoader(context, (TrendsRequest)baseRequest); } else if (baseRequest instanceof TrendsLocationRequest) { loader = new TrendsLocationLoader(context, (TrendsLocationRequest)baseRequest); } else if (baseRequest instanceof TwitterUserRequest) { loader = new TwitterUserLoader(context, (TwitterUserRequest)baseRequest); } else if (baseRequest instanceof UploadStatusRequest) { loader = new UploadStatusLoader(context, (UploadStatusRequest)baseRequest); } else if (baseRequest instanceof UploadTwitlongerRequest) { loader = new UploadTwitlongerLoader(context, (UploadTwitlongerRequest)baseRequest); } else if (baseRequest instanceof UserListsRequest) { loader = new UserListsLoader(context, (UserListsRequest)baseRequest); } else if (baseRequest instanceof TwitterUserDBRequest) { loader = new TwitterUserDBLoader(context, (TwitterUserDBRequest)baseRequest); } else if (baseRequest instanceof CheckFriendlyUserRequest) { loader = new CheckFriendlyUserLoader(context, (CheckFriendlyUserRequest)baseRequest); } else if (baseRequest instanceof ExecuteActionUserRequest) { loader = new ExecuteActionUserLoader(context, (ExecuteActionUserRequest)baseRequest); } else if (baseRequest instanceof GetGeolocationAddressRequest) { loader = new GetGeolocationAddressLoader(context, (GetGeolocationAddressRequest)baseRequest); } else if (baseRequest instanceof UserMentionsRequest) { loader = new UserMentionsLoader(context, (UserMentionsRequest)baseRequest); } else if (baseRequest instanceof SearchContentInDBRequest) { loader = new SearchContentInDBLoader(context, (SearchContentInDBRequest)baseRequest); } else if (baseRequest instanceof GetUserFriendshipMembersRequest) { loader = new GetUserFriendshipMembersLoader(context, (GetUserFriendshipMembersRequest)baseRequest); } else if (baseRequest instanceof CreateUserListsRequest) { loader = new CreateUserListsLoader(context, (CreateUserListsRequest)baseRequest); } return loader; } @Override public void onLoadFinished(Loader loader, Object o) { BaseResponse result = (BaseResponse) o; if (result.isError()) { delegate.onError((ErrorResponse)result); } else { Log.d(Utils.TAG, "onLoadFinished: " + o.getClass().getName()); delegate.onResults(result); } } @Override public void onLoaderReset(Loader loader) {} }