package com.ushahidi.platform.mobile.app.presentation.presenter.post; import com.addhen.android.raiburari.domain.exception.DefaultErrorHandler; import com.addhen.android.raiburari.domain.exception.ErrorHandler; import com.addhen.android.raiburari.domain.usecase.DefaultSubscriber; import com.addhen.android.raiburari.presentation.presenter.Presenter; import com.ushahidi.platform.mobile.app.data.PrefsFactory; import com.ushahidi.platform.mobile.app.domain.entity.Post; import com.ushahidi.platform.mobile.app.domain.usecase.post.GetPostUsecase; import com.ushahidi.platform.mobile.app.presentation.exception.ErrorMessageFactory; import com.ushahidi.platform.mobile.app.presentation.model.mapper.PostModelDataMapper; import com.ushahidi.platform.mobile.app.presentation.view.post.DetailPostView; import javax.inject.Inject; import javax.inject.Named; /** * Presenter for fetching post details and presents it to the view * * @author Ushahidi Team <team@ushahidi.com> */ public class DetailPostPresenter implements Presenter { private final GetPostUsecase mGetPostUsecase; private final PrefsFactory mPrefsFactory; private final PostModelDataMapper mPostModelDataMapper; private DetailPostView mDetailPostView; /** * Default constructor * * @param getPostUsecase The get post use case * @param postModelDataMapper The post model data mapper * @param prefsFactory The preference factory */ @Inject public DetailPostPresenter(@Named("postGet") GetPostUsecase getPostUsecase, PostModelDataMapper postModelDataMapper, PrefsFactory prefsFactory) { mGetPostUsecase = getPostUsecase; mPostModelDataMapper = postModelDataMapper; mPrefsFactory = prefsFactory; } public void setView(DetailPostView detailPostView) { mDetailPostView = detailPostView; } public void getPostDetails(Long postId) { mGetPostUsecase.setGetPost(mPrefsFactory.getActiveDeploymentId().get(), postId); mGetPostUsecase.execute(new GetPostSubscriber()); } @Override public void resume() { // Do nothing } @Override public void pause() { // Do nothing } @Override public void destroy() { mGetPostUsecase.unsubscribe(); } private void showErrorMessage(ErrorHandler errorHandler) { String errorMessage = ErrorMessageFactory.create(mDetailPostView.getAppContext(), errorHandler.getException()); mDetailPostView.showError(errorMessage); } private class GetPostSubscriber extends DefaultSubscriber<Post> { @Override public void onStart() { mDetailPostView.showLoading(); } @Override public void onCompleted() { mDetailPostView.hideLoading(); } @Override public void onNext(Post post) { mDetailPostView.showPostModel(mPostModelDataMapper.map(post)); } @Override public void onError(Throwable e) { mDetailPostView.hideLoading(); showErrorMessage(new DefaultErrorHandler((Exception) e)); } } }