package com.getbase.android.db.loaders;
import com.getbase.android.db.provider.ProviderAction;
import com.getbase.android.db.provider.Query;
import com.google.common.base.Function;
import com.google.common.base.Functions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.support.v4.content.Loader;
import java.util.Collection;
import java.util.List;
public class CursorLoaderBuilder {
public static CursorLoaderBuilder forUri(Uri uri) {
return new CursorLoaderBuilder(uri);
}
private final Query query;
private final List<Uri> notificationUris = Lists.newArrayList();
private CursorLoaderBuilder(Uri uri) {
this.query = ProviderAction.query(uri);
}
public CursorLoaderBuilder projection(String... projection) {
query.projection(projection);
return this;
}
@SafeVarargs
public final <T> CursorLoaderBuilder where(String selection, T... selectionArgs) {
query.where(selection, selectionArgs);
return this;
}
public <T> CursorLoaderBuilder whereIn(String column, Collection<T> collection) {
query.whereIn(column, collection);
return this;
}
public CursorLoaderBuilder orderBy(String orderBy) {
query.orderBy(orderBy);
return this;
}
public CursorLoaderBuilder addNotificationUri(Uri uri) {
notificationUris.add(uri);
return this;
}
public <Out> TransformedRowLoaderBuilder<Out> transformRow(Function<Cursor, Out> rowTransformer) {
return new TransformedRowLoaderBuilder<>(query.getQueryData(), ImmutableList.copyOf(notificationUris), rowTransformer);
}
public <Out> TransformedLoaderBuilder<Out> transform(Function<Cursor, Out> transformer) {
return new TransformedLoaderBuilder<>(query.getQueryData(), ImmutableList.copyOf(notificationUris), transformer);
}
public Loader<Cursor> build(Context context) {
return new ComposedCursorLoader<>(
context,
query.getQueryData(),
ImmutableList.copyOf(notificationUris),
Functions.<Cursor>identity()
);
}
}