Skip to content

Instantly share code, notes, and snippets.

@tranngoclam
Created September 27, 2016 16:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tranngoclam/287bc72671bda7e4b327dcad94e4d7d6 to your computer and use it in GitHub Desktop.
Save tranngoclam/287bc72671bda7e4b327dcad94e4d7d6 to your computer and use it in GitHub Desktop.
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