blob: 64ba08adc9050980b8dd4f8359844874c31e5d6f [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.baku.toolkit.bind;
import android.app.Activity;
import io.v.baku.toolkit.BakuActivityTrait;
import io.v.baku.toolkit.ErrorReporters;
import io.v.baku.toolkit.VAndroidContextTrait;
import io.v.rx.syncbase.RxTable;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import rx.Subscription;
import rx.functions.Action1;
import rx.subscriptions.CompositeSubscription;
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
public abstract class BaseBuilder<T extends BaseBuilder<T>> {
@SuppressWarnings("unchecked")
protected final T mSelf = (T)this;
protected Activity mActivity;
protected RxTable mRxTable;
protected CompositeSubscription mSubscriptionParent;
protected Action1<Throwable> mOnError;
public T activity(final Activity activity) {
mActivity = activity;
return mSelf;
}
public T rxTable(final RxTable rxTable) {
mRxTable = rxTable;
return mSelf;
}
/**
* Sets the following properties from the given {@link BakuActivityTrait}:
* <ul>
* <li>{@link #activity(Activity)}</li>
* <li>{@link #rxTable(RxTable)}</li>
* <li>{@link #subscriptionParent(CompositeSubscription)}</li>
* <li>{@link #onError(Action1)}</li>
* </ul>
*/
public T activity(final BakuActivityTrait<?> trait) {
return activity(trait.getVAndroidContextTrait().getAndroidContext())
.rxTable(trait.getSyncbaseTable())
.subscriptionParent(trait.getSubscriptions())
.onError(trait::onSyncError);
}
/**
* Sets the following properties from the given {@link VAndroidContextTrait}:
* <ul>
* <li>{@link #activity(Activity)}</li>
* <li>{@link #onError(Action1)}</li>
* </ul>
*/
public T activity(final VAndroidContextTrait<? extends Activity> trait) {
return activity(trait.getAndroidContext())
.onError(ErrorReporters.getDefaultSyncErrorReporter(trait));
}
public T subscriptionParent(final CompositeSubscription subscriptionParent) {
mSubscriptionParent = subscriptionParent;
return mSelf;
}
protected Subscription subscribe(final Subscription subscription) {
if (mSubscriptionParent == null) {
mSubscriptionParent = new CompositeSubscription();
}
mSubscriptionParent.add(subscription);
return subscription;
}
public Subscription getSubscription() {
return mSubscriptionParent;
}
public T onError(final Action1<Throwable> onError) {
mOnError = onError;
return mSelf;
}
}