/* * CDDL HEADER START * * The contents of this file are subject to the terms of the Common Development * and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at * src/com/vodafone360/people/VODAFONE.LICENSE.txt or * http://github.com/360/360-Engine-for-Android * See the License for the specific language governing permissions and * limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each file and * include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the fields * enclosed by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * Copyright 2010 Vodafone Sales & Services Ltd. All rights reserved. * Use is subject to license terms. */ package com.vodafone360.people.engine.contactsync; import java.security.InvalidParameterException; import com.vodafone360.people.database.DatabaseHelper; import com.vodafone360.people.engine.BaseEngine; import com.vodafone360.people.service.ServiceStatus; import com.vodafone360.people.service.io.ResponseQueue.DecodedResponse; /** * Base-class for processor handling for the various stages of Contact sync. */ public abstract class BaseSyncProcessor { /** * Provides useful callback methods in the contact sync engine */ protected IContactSyncCallback mCallback; /** * String used by processors to compile extra information when a contact * sync isn't successful. Currently used to list contacts which the server * does not accept during the sync. */ protected String mFailureList; /** * Provides processors with access to the people database. */ protected DatabaseHelper mDb; /** * Base constructor. * * @param callback Provides access to the contact sync engine * @param db The database helper reference */ protected BaseSyncProcessor(IContactSyncCallback callback, DatabaseHelper db) { mCallback = callback; mDb = db; } /** * Start the processor. Once started the processors is in the active state * until either it is cancelled by engine, or the processor completes the * sync (see {@link #complete(ServiceStatus)}). */ public void start() { mFailureList = ""; doStart(); } /** * Cancel processor */ protected void cancel() { doCancel(); complete(ServiceStatus.USER_CANCELLED); } /** * Implemented by all contact sync processors to initiate the sync. Once * called, the processor needs to call the * {@link IContactSyncCallback#onProcessorComplete(ServiceStatus, String, Object)} * method when the sync is finished (the usual way to do this is by calling * {@link #complete(ServiceStatus)}). */ protected abstract void doStart(); /** * Can be called anytime when the processor is active, to cancel the sync. * Should not complete the sync here because the above method * {@link #cancel()} will take care of this. */ protected abstract void doCancel(); /** * Can be overriden by processors which are interested in timeout events. A * processor will only receive timeout events while it is active. */ public void onTimeoutEvent() { } /** * Called when a comms response is received from the server. This may be a * response from a request issued by the processor or a push message. * * @param resp The response data */ public abstract void processCommsResponse(DecodedResponse resp); /** * Helper method to complete the processor. * * @param status The result of the sync */ protected void complete(ServiceStatus status) { mCallback.onProcessorComplete(status, mFailureList, null); } /** * Provides access to the contact sync engine object. This is normally only * used for processor to issue comms requests. * * @return The contact sync engine */ protected BaseEngine getEngine() { return mCallback.getEngine(); } /** * Called by processors when they make changes to the people database. This * is implemented outside the database framework to ensure UI updates happen * more efficiently during a contact sync. */ protected void markDbChanged() { mCallback.onDatabaseChanged(); } /** * Helper function that can be used by processors to set a timeout. The * {@link #onTimeoutEvent()} will be called once the timeout completes. * * @note Only a single timeout is allowed at any time, so setting a timeout * will cancel any previous pending timeout. * @param timeout The timeout value in milliseconds. */ protected void setTimeout(long timeout) { mCallback.setTimeout(timeout); } /** * Used by processors to provide an indication of their current progress. * * @param SyncStatus Status of the processor, must not be NULL. * @throws InvalidParameterException when SyncStatus is NULL. */ protected void setSyncStatus(SyncStatus syncStatus) { mCallback.setSyncStatus(syncStatus); } /** * Processors can call this method when they issue a comms requests. The * framework will then only notify the processor when a response is received * which matches the request ID. * * @param reqId The request ID returned by the comms framework. */ protected void setReqId(int reqId) { if (reqId == -1) { complete(ServiceStatus.ERROR_COMMS); return; } mCallback.setActiveRequestId(reqId); } /** * Processors may override this function is they have any additional cleanup * to do when the processor has finished. Similiar to finalize except it is * always called immediately the processor goes inactive. */ public void onComplete() { } }