package com.getbase.android.db.provider;
import com.google.common.base.Joiner;
import com.google.common.collect.Collections2;
import android.content.ContentProviderOperation;
import android.content.ContentProviderOperation.Builder;
import android.content.ContentValues;
import android.net.Uri;
import android.os.RemoteException;
import java.util.Collection;
public class Update extends ProviderAction<Integer> implements ConvertibleToOperation {
private final Selection selection = new Selection();
private ContentValues values = new ContentValues();
Update(Uri uri) {
super(uri);
}
public Update values(ContentValues values) {
this.values.putAll(values);
return this;
}
public Update value(String key, Object value) {
Utils.addToContentValues(key, value, values);
return this;
}
@SafeVarargs
public final <T> Update where(String selection, T... selectionArgs) {
this.selection.append(selection, selectionArgs);
return this;
}
public <T> Update whereIn(String column, Collection<T> collection) {
this.selection.append(column + " IN (" + Joiner.on(",").join(Collections2.transform(collection, Utils.toEscapedSqlFunction())) + ")");
return this;
}
@Override
public Integer perform(CrudHandler crudHandler) throws RemoteException {
return crudHandler.update(getUri(), values, selection.getSelection(), selection.getSelectionArgs());
}
@Override
public ContentProviderOperation toContentProviderOperation(UriDecorator uriDecorator) {
return toContentProviderOperationBuilder(uriDecorator).build();
}
@Override
public Builder toContentProviderOperationBuilder(UriDecorator uriDecorator) {
return ContentProviderOperation.newUpdate(uriDecorator.decorate(getUri()))
.withSelection(selection.getSelection(), selection.getSelectionArgs())
.withValues(values);
}
}