BatchOperation.java revision 15ef1a8091c1557f175575671a5af62420088944
100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi/*
200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * Copyright (C) 2010 The Android Open Source Project
315ef1a8091c1557f175575671a5af62420088944John Evans *
400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * Licensed under the Apache License, Version 2.0 (the "License"); you may not
500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * use this file except in compliance with the License. You may obtain a copy of
600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * the License at
715ef1a8091c1557f175575671a5af62420088944John Evans *
800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * http://www.apache.org/licenses/LICENSE-2.0
915ef1a8091c1557f175575671a5af62420088944John Evans *
1000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * Unless required by applicable law or agreed to in writing, software
1100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
1200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
1300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * License for the specific language governing permissions and limitations under
1400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * the License.
1500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi */
1600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshipackage com.example.android.samplesync.platform;
1700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
1800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.ContentProviderOperation;
1915ef1a8091c1557f175575671a5af62420088944John Evansimport android.content.ContentProviderResult;
2000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.ContentResolver;
2100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.Context;
2200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.content.OperationApplicationException;
2315ef1a8091c1557f175575671a5af62420088944John Evansimport android.net.Uri;
2400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.os.RemoteException;
2500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.provider.ContactsContract;
2600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport android.util.Log;
2700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
2800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshiimport java.util.ArrayList;
2900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
3000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi/**
3100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * This class handles execution of batch mOperations on Contacts provider.
3200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi */
33c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshifinal public class BatchOperation {
34c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi
3500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    private final String TAG = "BatchOperation";
3600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
3700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    private final ContentResolver mResolver;
38c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi
3900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    // List for storing the batch mOperations
40c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi    private final ArrayList<ContentProviderOperation> mOperations;
4100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
4200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    public BatchOperation(Context context, ContentResolver resolver) {
4300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mResolver = resolver;
4400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mOperations = new ArrayList<ContentProviderOperation>();
4500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
4600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
4700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    public int size() {
4800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        return mOperations.size();
4900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
5000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
5100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    public void add(ContentProviderOperation cpo) {
5200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mOperations.add(cpo);
5300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
5400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
5515ef1a8091c1557f175575671a5af62420088944John Evans    public Uri execute() {
5615ef1a8091c1557f175575671a5af62420088944John Evans        Uri result = null;
57c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi
5800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        if (mOperations.size() == 0) {
5915ef1a8091c1557f175575671a5af62420088944John Evans            return result;
6000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        }
6100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        // Apply the mOperations to the content provider
6200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        try {
6315ef1a8091c1557f175575671a5af62420088944John Evans            ContentProviderResult[] results = mResolver.applyBatch(ContactsContract.AUTHORITY,
6415ef1a8091c1557f175575671a5af62420088944John Evans                    mOperations);
6515ef1a8091c1557f175575671a5af62420088944John Evans            if ((results != null) && (results.length > 0))
6615ef1a8091c1557f175575671a5af62420088944John Evans                result = results[0].uri;
6700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        } catch (final OperationApplicationException e1) {
6800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi            Log.e(TAG, "storing contact data failed", e1);
6900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        } catch (final RemoteException e2) {
7000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi            Log.e(TAG, "storing contact data failed", e2);
7100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        }
7200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mOperations.clear();
7315ef1a8091c1557f175575671a5af62420088944John Evans        return result;
7400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
7500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi}
76