Skip to content

Instantly share code, notes, and snippets.

@ZakTaccardi
Last active January 10, 2017 19:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ZakTaccardi/3b455be24f5ca39684a82aec9a713eaa to your computer and use it in GitHub Desktop.
Save ZakTaccardi/3b455be24f5ca39684a82aec9a713eaa to your computer and use it in GitHub Desktop.
A controller that loads a shopping cart (think online shopping).
/**
* A controller that loads a shopping cart (think online shopping).
*/
public class CartControllerImpl implements CartController {
final CartModel model;
final TaxModel taxModel;
final CurrencyUnit currencyUnit;
final MoneyFormatter moneyFormatter;
final RxBus rxBus;
AtomicBoolean isLoading = new AtomicBoolean(false);
public CartControllerImpl(
CartModel model,
TaxModel taxModel,
CurrencyUnit currencyUnit,
MoneyFormatter moneyFormatter,
RxBus rxBus
) {
this.model = model;
this.taxModel = taxModel;
this.currencyUnit = currencyUnit;
this.moneyFormatter = moneyFormatter;
this.rxBus = rxBus;
}
@Override
public void load() {
//prevent repeating load calls when data is already loading
if (!isLoading.get()) {
isLoading.set(true);
model.getCart()
.withLatestFrom(taxModel.getTaxRate(), (entity, taxRate) ->
new Cart(
entity,
model,
currencyUnit,
moneyFormatter,
taxRate
)
)
.subscribe(new Subscriber<Cart>() {
@Override
public void onCompleted() {
isLoading.set(false);
}
@Override
public void onError(Throwable e) {
Timber.e(e, "Error loading cart");
isLoading.set(false);
}
@Override
public void onNext(Cart cart) {
rxBus.send(new CartLoadedEvent(cart));
}
});
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment