package com.joker.rxweather.presenter; import com.fernandocejas.frodo.annotation.RxLogSubscriber; import com.joker.rxweather.exception.ErrorHanding; import com.joker.rxweather.model.entities.AddressEntity; import com.joker.rxweather.model.entities.SearchEntity; import com.joker.rxweather.views.SearchView; import com.rxweather.domain.usercase.SearchUseCase; import com.rxweather.domain.usercase.UseCase; import rx.Observable; import rx.Subscriber; /** * Created by Administrator on 2015/11/4. */ public class SearchPresenterImp implements SearchPresenter<SearchView<Observable<SearchEntity>>> { private SearchView<Observable<SearchEntity>> searchView; private UseCase<SearchEntity, AddressEntity> searchCase; private AddressEntity addressEntity = new AddressEntity(); public SearchPresenterImp() { } @Override public void attachView(SearchView<Observable<SearchEntity>> view) { this.searchView = view; this.searchCase = new SearchUseCase(); } @Override public void search(String cityName) { SearchPresenterImp.this.showLoading(); this.searchCase.subscribe(new SearchSubscriber(), addressEntity.setCity(cityName)); } private void showLoading() { if (!searchView.isContent()) { this.searchView.showLoading(); } } private void showContent(SearchEntity searchEntity) { this.searchView.showSearchResult(Observable.just(searchEntity).cache()); } private void showError(int messageId) { this.searchView.showError(messageId); } @RxLogSubscriber public final class SearchSubscriber extends Subscriber<SearchEntity> { @Override public void onCompleted() { SearchPresenterImp.this.searchView.showContent(); } @Override public void onError(Throwable e) { SearchPresenterImp.this.showError(ErrorHanding.propagate(e)); } @Override public void onNext(SearchEntity searchEntity) { SearchPresenterImp.this.showContent(searchEntity); } } @Override public void detachView() { this.searchCase.unsubscribe(); } }