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;
2974c1836184adccce4b876ddfb736567eb87c6e1dRobert Lyimport java.util.List;
3000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
3100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi/**
3200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi * This class handles execution of batch mOperations on Contacts provider.
3300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi */
34c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshifinal public class BatchOperation {
35c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi
3600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    private final String TAG = "BatchOperation";
3700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
3800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    private final ContentResolver mResolver;
39c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi
4000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    // List for storing the batch mOperations
41c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi    private final ArrayList<ContentProviderOperation> mOperations;
4200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
4300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    public BatchOperation(Context context, ContentResolver resolver) {
4400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mResolver = resolver;
4500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mOperations = new ArrayList<ContentProviderOperation>();
4600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
4700bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
4800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    public int size() {
4900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        return mOperations.size();
5000bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
5100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
5200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    public void add(ContentProviderOperation cpo) {
5300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mOperations.add(cpo);
5400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
5500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi
5674c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly    public List<Uri> execute() {
5774c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly        List<Uri> resultUris = new ArrayList<Uri>();
58c51da235c20bab67ad1ef23884f36bb76740f3a0Megha Joshi
5900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        if (mOperations.size() == 0) {
6074c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly            return resultUris;
6100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        }
6200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        // Apply the mOperations to the content provider
6300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        try {
6415ef1a8091c1557f175575671a5af62420088944John Evans            ContentProviderResult[] results = mResolver.applyBatch(ContactsContract.AUTHORITY,
6515ef1a8091c1557f175575671a5af62420088944John Evans                    mOperations);
6674c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly            if ((results != null) && (results.length > 0)){
6774c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly                for (int i = 0; i < results.length; i++){
6874c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly                    resultUris.add(results[i].uri);
6974c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly                }
7074c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly            }
7100bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        } catch (final OperationApplicationException e1) {
7200bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi            Log.e(TAG, "storing contact data failed", e1);
7300bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        } catch (final RemoteException e2) {
7400bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi            Log.e(TAG, "storing contact data failed", e2);
7500bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        }
7600bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi        mOperations.clear();
7774c1836184adccce4b876ddfb736567eb87c6e1dRobert Ly        return resultUris;
7800bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi    }
7900bf0f0296b6691a9ed93fa46eccf316f7b0222eMegha Joshi}
80