package com.getbase.android.db.loaders; import com.getbase.android.db.common.QueryData; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.ImmutableList; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.support.v4.content.Loader; public class TransformedLoaderBuilder<To> { private final QueryData queryData; private final ImmutableList<Uri> notificationUris; private final Function<Cursor, To> wrapperFunction; public TransformedLoaderBuilder(QueryData queryData, ImmutableList<Uri> notificationUris, Function<Cursor, To> wrapperFunction) { this.queryData = queryData; this.notificationUris = notificationUris; this.wrapperFunction = wrapperFunction; } public TransformedLoaderBuilder<To> addNotificationUri(Uri uri) { return new TransformedLoaderBuilder<>(queryData, ImmutableList.<Uri>builder().addAll(notificationUris).add(uri).build(), wrapperFunction); } public <NewTo> TransformedLoaderBuilder<NewTo> transform(Function<To, NewTo> wrapper) { return new TransformedLoaderBuilder<>(queryData, notificationUris, Functions.compose(wrapper, wrapperFunction)); } public Loader<To> build(Context context) { return new ComposedCursorLoader<>(context, queryData, notificationUris, wrapperFunction); } }