Created
September 27, 2016 16:24
-
-
Save tranngoclam/287bc72671bda7e4b327dcad94e4d7d6 to your computer and use it in GitHub Desktop.
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 characters
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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment