Created
September 27, 2016 16:24
-
-
Save tranngoclam/287bc72671bda7e4b327dcad94e4d7d6 to your computer and use it in GitHub Desktop.
Revisions
-
tranngoclam created this gist
Sep 27, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,117 @@ package net.lamtran.rxjava2.bill; import android.text.TextUtils; import java.util.List; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; /** * Created by lam on 9/27/16. */ public class QueryBillViewModel { private BillSharedData billSharedData; private String customerCode; private QueryBillUseCase mQueryBillUseCase; private QueryBillRequest mRequest; private List<Provider> providers; private Provider selectedProvider; private Service selectedService; private List<Service> services; public Observable<QueryBillRequest> buildRequest(RecentTransaction item) { return Observable.just(new QueryBillRequest.Builder()) .flatMap(builder -> Observable.from(services) .filter(service -> TextUtils.equals(service.serviceId, item.serviceId)) .doOnNext(service -> { billSharedData.service = service; builder.setServiceId(service.serviceId); }) .flatMap(service -> Observable.from(service.providers) .filter(provider -> TextUtils.equals(provider.providerId, item.providerId)) .doOnNext(provider -> { billSharedData.provider = provider; billSharedData.customerCode = item.customerId; builder.setProviderId(provider.providerId); builder.setCustomerId(item.customerId); })) .flatMap(provider -> Observable.just(builder.build()))); } public void query(QueryBillRequest queryBillRequest) { Observable.just(queryBillRequest) .flatMap(request -> { if (request.equals(mRequest)) { return Observable.just(request); } else { billSharedData.service = selectedService; billSharedData.provider = selectedProvider; billSharedData.customerCode = customerCode; QueryBillRequest billRequest = new QueryBillRequest.Builder() .setServiceId(selectedService.serviceId) .setProviderId(selectedProvider.providerId) .setCustomerId(customerCode) .build(); return Observable.just(billRequest); } }) .doOnNext(request -> { mQueryBillUseCase.setRequest(request); billSharedData.queryBillRequest = request; }) .flatMap(request -> mQueryBillUseCase.execute()) .doOnNext(response -> billSharedData.queryBillResponse = response) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(response -> { }, throwable -> { }); } private static class BillSharedData { public String customerCode; public Provider provider; public QueryBillRequest queryBillRequest; public QueryBillResponse queryBillResponse; public Service service; } private static class Provider { public String providerId; } private static class RecentTransaction { public String customerId; public String providerId; public String serviceId; } private static class Service { public List<Provider> providers; public String serviceId; } }