/*
* Licensed Materials - Property of IBM
* © Copyright IBM Corporation 2015. All Rights Reserved.
*/
package com.ibm.mil.readyapps.telco.baseplan;
import android.util.Log;
import com.ibm.mil.cafejava.CafeJava;
import com.ibm.mil.cafejava.JavaProcedureInvoker;
import com.ibm.mil.readyapps.telco.analytics.AnalyticsCnsts;
import com.ibm.mil.readyapps.telco.analytics.OperationalAnalyticsReporter;
import com.worklight.wlclient.api.WLResponse;
import rx.Observable;
import rx.functions.Action1;
import rx.subjects.PublishSubject;
/**
* Implementation of BasePlanModel for updating BasePlan POJO
* and emitting streams upon updating so subscribers are notified
* of changes.
*/
public class BasePlanModelImpl implements BasePlanModel {
private static final BasePlan basePlan = new BasePlan();
private static final PublishSubject<BasePlan> basePlanStream = PublishSubject.create();
/**
* Get the stream for subscribing to updates.
*
* @return the stream for base plan
*/
@Override
public Observable<BasePlan> getBasePlanStream() {
return Observable.merge(Observable.just(basePlan), basePlanStream);
}
/**
* Update the base cost of the user's plan and
* emit stream to all subscribers.
*
* @param changeAmount the cost to update by
*/
@Override
public void updateBaseCost(double changeAmount) {
if (changeAmount >= 0) {
OperationalAnalyticsReporter.planChangeAccepted(AnalyticsCnsts.BASE_INCREASE, changeAmount);
} else {
OperationalAnalyticsReporter.planChangeAccepted(AnalyticsCnsts.BASE_DECREASE, changeAmount);
}
basePlan.setBaseCost(basePlan.getBaseCost() + changeAmount);
updateBasePlanMFP();
basePlanStream.onNext(basePlan);
}
/**
* Update the additional cost for this cycle of user's plan
* and emit stream to all subscribers.
*
* @param changeAmount cost to update by
*/
@Override
public void updateAddonCost(double changeAmount) {
OperationalAnalyticsReporter.planChangeAccepted(AnalyticsCnsts.ADDON, changeAmount);
basePlan.setAddonCost(basePlan.getAddonCost() + changeAmount);
updateBasePlanMFP();
basePlanStream.onNext(basePlan);
}
/**
* Helper method for deciding which section of cost to update
* (base or addon) based on arguments passed in.
*
* @param changeAmount the cost to update by
* @param affectsBaseCost whether or not this cost update should affect base
*/
@Override
public void updateCost(double changeAmount, boolean affectsBaseCost) {
if (affectsBaseCost) {
updateBaseCost(changeAmount);
} else {
updateAddonCost(changeAmount);
}
}
private void updateBasePlanMFP() {
CafeJava.invokeProcedure(new JavaProcedureInvoker.Builder("TelcoUserAdapter", "users/user1")
.httpMethod(JavaProcedureInvoker.PUT).build())
.subscribe(new Action1<WLResponse>() {
@Override
public void call(WLResponse wlResponse) {
Log.i("TEST", BasePlanModelImpl.class.getName() + " " + wlResponse
.getResponseText());
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
Log.i("TEST", "UPDATE FAILED");
}
});
}
}