package co.smartreceipts.android.persistence.database.controllers.impl;
import android.support.annotation.NonNull;
import com.google.common.base.Preconditions;
import co.smartreceipts.android.persistence.database.controllers.TableController;
import co.smartreceipts.android.persistence.database.controllers.TableEventsListener;
import io.reactivex.Scheduler;
import io.reactivex.disposables.CompositeDisposable;
/**
* A temporary class to bridge our refactoring work and avoid breaking changes while we get this all in place
*/
@Deprecated
public class BridgingTableEventsListener<ModelType> {
private final TableController<ModelType> tableController;
private final TableEventsListener<ModelType> listener;
private final Scheduler observeOnScheduler;
private CompositeDisposable compositeDisposable;
public BridgingTableEventsListener(@NonNull TableController<ModelType> tableController, @NonNull TableEventsListener<ModelType> listener,
@NonNull Scheduler observeOnScheduler) {
this.tableController = Preconditions.checkNotNull(tableController);
this.listener = Preconditions.checkNotNull(listener);
this.observeOnScheduler = Preconditions.checkNotNull(observeOnScheduler);
}
public final void subscribe() {
compositeDisposable = new CompositeDisposable();
compositeDisposable.add(this.tableController.getStream()
.observeOn(observeOnScheduler)
.subscribe(modelTypeGetResult -> {
if (modelTypeGetResult.getThrowable() == null) {
listener.onGetSuccess(modelTypeGetResult.get());
} else {
listener.onGetFailure(modelTypeGetResult.getThrowable());
}
}));
compositeDisposable.add(this.tableController.insertStream()
.observeOn(observeOnScheduler)
.subscribe(modelTypeInsertResult -> {
if (modelTypeInsertResult.getThrowable() == null) {
listener.onInsertSuccess(modelTypeInsertResult.get(), modelTypeInsertResult.getDatabaseOperationMetadata());
} else {
listener.onInsertFailure(modelTypeInsertResult.get(), modelTypeInsertResult.getThrowable(), modelTypeInsertResult.getDatabaseOperationMetadata());
}
}));
compositeDisposable.add(this.tableController.updateStream()
.observeOn(observeOnScheduler)
.subscribe(modelTypeUpdateResult -> {
if (modelTypeUpdateResult.getThrowable() == null) {
listener.onUpdateSuccess(modelTypeUpdateResult.getOld(), modelTypeUpdateResult.getNew(), modelTypeUpdateResult.getDatabaseOperationMetadata());
} else {
listener.onUpdateFailure(modelTypeUpdateResult.getOld(), modelTypeUpdateResult.getThrowable(), modelTypeUpdateResult.getDatabaseOperationMetadata());
}
}));
compositeDisposable.add(this.tableController.deleteStream()
.observeOn(observeOnScheduler)
.subscribe(modelTypeDeleteResult -> {
if (modelTypeDeleteResult.getThrowable() == null) {
listener.onDeleteSuccess(modelTypeDeleteResult.get(), modelTypeDeleteResult.getDatabaseOperationMetadata());
} else {
listener.onDeleteFailure(modelTypeDeleteResult.get(), modelTypeDeleteResult.getThrowable(), modelTypeDeleteResult.getDatabaseOperationMetadata());
}
}));
}
public void unsubscribe() {
if (compositeDisposable != null) {
compositeDisposable.clear();
}
compositeDisposable = null;
}
}