Search in sources :

Example 1 with UploadServerContacts

use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.

the class SyncMeDbUtils method populateWithDeletedContactDetails.

/**
     * This method adds the deleted details to the detail list sent to server...
     * @param dbHelper DatabaseHelper - database 
     * @param contactDetails List<ContactDetail> - the deleted details list 
     * @param contactId Long - Me Profile local contact id.
     */
private static void populateWithDeletedContactDetails(final DatabaseHelper dbHelper, final List<ContactDetail> contactDetails, final Long contactId) {
    List<ContactChangeInfo> deletedDetails = new ArrayList<ContactChangeInfo>();
    if (!ContactChangeLogTable.fetchMeProfileChangeLog(deletedDetails, ContactChangeType.DELETE_DETAIL, dbHelper.getReadableDatabase(), contactId)) {
        LogUtils.logE("UploadServerContacts populateWithDeletedContactDetails -" + " Unable to fetch contact changes from database");
        return;
    }
    for (int i = 0; i < deletedDetails.size(); i++) {
        ContactChangeInfo info = deletedDetails.get(i);
        final ContactDetail detail = new ContactDetail();
        detail.localDetailID = info.mLocalDetailId;
        detail.key = info.mServerDetailKey;
        detail.unique_id = info.mServerDetailId;
        detail.deleted = true;
        contactDetails.add(detail);
    }
    dbHelper.deleteContactChanges(deletedDetails);
}
Also used : ContactDetail(com.vodafone360.people.datatypes.ContactDetail) ContactChangeInfo(com.vodafone360.people.database.tables.ContactChangeLogTable.ContactChangeInfo) ArrayList(java.util.ArrayList)

Example 2 with UploadServerContacts

use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.

the class UploadServerContacts method processDeletedDetailsResp.

/**
     * Called when a server response is received during a deleted contact detail
     * sync. The server change log is updated. Possibly server errors are also
     * handled.
     * 
     * @param resp Response from server.
     */
private void processDeletedDetailsResp(final DecodedResponse resp) {
    ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.CONTACT_DETAIL_DELETION_DATA_TYPE, resp.mDataTypes);
    if (status == ServiceStatus.SUCCESS) {
        ContactDetailDeletion result = (ContactDetailDeletion) resp.mDataTypes.get(0);
        if (result.mDetails != null) {
            LogUtils.logV("UploadServerContacts." + "processDeletedDetailsResp() Deleted details " + result.mDetails.size());
        }
        ListIterator<ContactChangeInfo> infoIt = mContactChangeInfoList.listIterator();
        if (result.mContactId == null || result.mContactId == -1) {
            boolean first = true;
            while (infoIt.hasNext()) {
                ContactChangeInfo info = infoIt.next();
                if (first) {
                    first = false;
                    LogUtils.logE("UploadServerContacts." + "processDeletedDetailsResp() The server " + "failed to delete detail from the following " + "contact: LocalId = " + info.mLocalContactId + ", ServerId = " + info.mServerContactId);
                }
                mFailureList += "Failed to delete detail: " + info.mLocalDetailId + "\n";
            }
        } else if (result.mDetails != null) {
            for (ContactDetail d : result.mDetails) {
                if (!infoIt.hasNext()) {
                    complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
                    return;
                }
                ContactChangeInfo info = infoIt.next();
                if (!d.key.equals(info.mServerDetailKey)) {
                    LogUtils.logE("UploadServerContacts." + "processDeletedDetailsResp() The server " + "failed to delete the following detail: " + "LocalId = " + info.mLocalContactId + ", " + "ServerId = " + info.mServerContactId + ", key = " + info.mServerDetailKey + ", detail ID = " + info.mServerDetailId);
                    mFailureList += "Failed to delete detail: " + info.mLocalDetailId + "\n";
                }
            }
        }
        long startTime = System.nanoTime();
        mDb.deleteContactChanges(mContactChangeInfoList);
        mDbSyncTime += (System.nanoTime() - startTime);
        mContactChangeInfoList.clear();
        updateProgress();
        sendNextDeleteDetailsPage();
        return;
    }
    LogUtils.logE("UploadServerContacts.processModifiedDetailsResp() " + "Error requesting contact changes, error = " + status);
    complete(status);
}
Also used : ContactDetail(com.vodafone360.people.datatypes.ContactDetail) ContactChangeInfo(com.vodafone360.people.database.tables.ContactChangeLogTable.ContactChangeInfo) ContactDetailDeletion(com.vodafone360.people.datatypes.ContactDetailDeletion) ServiceStatus(com.vodafone360.people.service.ServiceStatus)

Example 3 with UploadServerContacts

use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.

the class UploadServerContacts method processGroupAdditionsResp.

/**
     * Called when a server response is received during a group/contact add
     * relation sync. The server change log is updated. Possibly server errors
     * are also handled.
     * 
     * @param resp Response from server.
     */
private void processGroupAdditionsResp(final DecodedResponse resp) {
    ServiceStatus status = BaseEngine.getResponseStatus(BaseDataType.ITEM_LIST_DATA_TYPE, resp.mDataTypes);
    if (status == ServiceStatus.SUCCESS) {
        if (resp.mDataTypes.size() == 0) {
            LogUtils.logE("UploadServerContacts." + "processGroupAdditionsResp() " + "Item list cannot be empty");
            complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
            return;
        }
        ItemList itemList = (ItemList) resp.mDataTypes.get(0);
        if (itemList.mItemList == null) {
            LogUtils.logE("UploadServerContacts." + "processGroupAdditionsResp() " + "Item list cannot be NULL");
            complete(ServiceStatus.ERROR_COMMS_BAD_RESPONSE);
            return;
        }
        // TODO: Check response
        long startTime = System.nanoTime();
        mDb.deleteContactChanges(mContactChangeInfoList);
        mDbSyncTime += (System.nanoTime() - startTime);
        mContactChangeInfoList.clear();
        updateProgress();
        sendNextAddGroupRelationsPage();
        return;
    }
    LogUtils.logE("UploadServerContacts.processGroupAdditionsResp() " + "Error adding group relations, error = " + status);
    complete(status);
}
Also used : ServiceStatus(com.vodafone360.people.service.ServiceStatus) ItemList(com.vodafone360.people.datatypes.ItemList)

Example 4 with UploadServerContacts

use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.

the class UploadServerContacts method handleUploadDetailChanges.

/**
     * Called when handling the server response from a new contact or modify
     * contact sync. Updates the unique IDs for all the details if necessary.
     * 
     * @param contactSrc Contact received from server.
     * @param contactDest Contact from database.
     * @param detailServerIdList List of contact details with updated unique id.
     * @return ServiceStatus object.
     */
private ServiceStatus handleUploadDetailChanges(final Contact contactSrc, final Contact contactDest, final List<ServerIdInfo> detailServerIdList) {
    if (contactSrc.contactID == null || contactSrc.contactID.longValue() == -1L) {
        LogUtils.logE("UploadServerContacts.handleUploadDetailChanges() " + "The server failed to modify the following contact: " + contactDest.localContactID);
        mFailureList += "Failed to add contact: " + contactDest.localContactID + "\n";
        return ServiceStatus.SUCCESS;
    }
    ListIterator<ContactDetail> itContactDetailSrc = contactSrc.details.listIterator();
    ListIterator<ContactDetail> itContactDetailDest = contactDest.details.listIterator();
    while (itContactDetailSrc.hasNext()) {
        if (!itContactDetailDest.hasNext()) {
            /*
                 * The response should contain the same number of details as was
                 * supplied but must handle the error.
                 */
            return ServiceStatus.ERROR_COMMS_BAD_RESPONSE;
        }
        ContactDetail contactDetailSrc = itContactDetailSrc.next();
        ContactDetail contactDetailDest = itContactDetailDest.next();
        ServerIdInfo info = new ServerIdInfo();
        info.localId = contactDetailDest.localDetailID;
        if (contactDetailSrc.unique_id != null && contactDetailSrc.unique_id.longValue() == -1L) {
            LogUtils.logE("UploadServerContacts." + "handleUploadDetailChanges() The server failed to " + "modify the following contact detail: LocalDetailId " + "= " + contactDetailDest.localDetailID + ", Key = " + contactDetailDest.key + ", value = " + contactDetailDest.value);
            mFailureList += "Failed to modify contact detail: " + contactDetailDest.localDetailID + ", for contact " + contactDetailDest.localContactID + "\n";
            info.serverId = null;
        } else {
            info.serverId = contactDetailSrc.unique_id;
        }
        detailServerIdList.add(info);
    }
    while (itContactDetailDest.hasNext()) {
        ContactDetail contactDetailDest = itContactDetailDest.next();
        mFailureList += "Failed to modify contact detail (not in return " + "list):" + contactDetailDest.localDetailID + ", for contact " + contactDetailDest.localContactID + "\n";
        LogUtils.logE("UploadServerContacts.handleUploadDetailChanges() " + "The server failed to modify the following contact detail " + "(not found in returned list): LocalDetailId = " + contactDetailDest.localDetailID + ", Key = " + contactDetailDest.key + ", value = " + contactDetailDest.value);
    }
    return ServiceStatus.SUCCESS;
}
Also used : ContactDetail(com.vodafone360.people.datatypes.ContactDetail) ServerIdInfo(com.vodafone360.people.database.DatabaseHelper.ServerIdInfo)

Example 5 with UploadServerContacts

use of com.vodafone360.people.engine.contactsync.UploadServerContacts in project 360-Engine-for-Android by 360.

the class UploadServerContacts method sendNextDetailChangesPage.

/**
     * Sends the next page of new/modified details to the server.
     */
private void sendNextDetailChangesPage() {
    mContactChangeList.clear();
    long startTime = System.nanoTime();
    ContactDetailsTable.syncServerGetNextNewContactDetails(mContactsCursor, mContactChangeList, MAX_UP_PAGE_SIZE);
    mDbSyncTime += (System.nanoTime() - startTime);
    if (mContactChangeList.size() == 0) {
        moveToNextState();
        return;
    }
    /** Debug output. **/
    if (Settings.ENABLED_CONTACTS_SYNC_TRACE) {
        LogUtils.logI("UploadServerContacts.sendNextDetailChangesPage() " + "Contact detail changes:");
        for (Contact c : mContactChangeList) {
            for (ContactDetail d : c.details) {
                LogUtils.logI("UploadServerContacts." + "sendNextDetailChangesPage() Contact: " + c.contactID + ", Detail: " + d.key + ", " + d.unique_id + " = " + d.value);
            }
        }
    }
    if (NetworkAgent.getAgentState() != NetworkAgent.AgentState.CONNECTED) {
        complete(NetworkAgent.getServiceStatusfromDisconnectReason());
        return;
    }
    mNoOfItemsSent = mContactChangeList.size();
    setReqId(Contacts.bulkUpdateContacts(getEngine(), mContactChangeList));
}
Also used : ContactDetail(com.vodafone360.people.datatypes.ContactDetail) Contact(com.vodafone360.people.datatypes.Contact)

Aggregations

ContactChangeInfo (com.vodafone360.people.database.tables.ContactChangeLogTable.ContactChangeInfo)7 ContactDetail (com.vodafone360.people.datatypes.ContactDetail)7 ServiceStatus (com.vodafone360.people.service.ServiceStatus)5 ArrayList (java.util.ArrayList)5 Contact (com.vodafone360.people.datatypes.Contact)4 ServerIdInfo (com.vodafone360.people.database.DatabaseHelper.ServerIdInfo)2 Suppress (android.test.suitebuilder.annotation.Suppress)1 ContactIdInfo (com.vodafone360.people.database.tables.ContactsTable.ContactIdInfo)1 ContactChanges (com.vodafone360.people.datatypes.ContactChanges)1 ContactDetailDeletion (com.vodafone360.people.datatypes.ContactDetailDeletion)1 ContactListResponse (com.vodafone360.people.datatypes.ContactListResponse)1 GroupItem (com.vodafone360.people.datatypes.GroupItem)1 ItemList (com.vodafone360.people.datatypes.ItemList)1 StatusMsg (com.vodafone360.people.datatypes.StatusMsg)1 VCardHelper (com.vodafone360.people.datatypes.VCardHelper)1 BaseSyncProcessor (com.vodafone360.people.engine.contactsync.BaseSyncProcessor)1 DefaultProcessorFactory (com.vodafone360.people.engine.contactsync.DefaultProcessorFactory)1 DownloadServerContacts (com.vodafone360.people.engine.contactsync.DownloadServerContacts)1 FetchNativeContacts (com.vodafone360.people.engine.contactsync.FetchNativeContacts)1 UpdateNativeContacts (com.vodafone360.people.engine.contactsync.UpdateNativeContacts)1