eu.alefzero.owncloud.syncadapter.AbstractOwnCloudSyncAdapter.java Source code

Java tutorial

Introduction

Here is the source code for eu.alefzero.owncloud.syncadapter.AbstractOwnCloudSyncAdapter.java

Source

/* ownCloud Android client application
 *   Copyright (C) 2011  Bartek Przybylski
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package eu.alefzero.owncloud.syncadapter;

import java.io.IOException;
import java.net.UnknownHostException;
import java.util.Date;

import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.conn.ConnectionKeepAliveStrategy;
import org.apache.http.protocol.HttpContext;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.AbstractThreadedSyncAdapter;
import android.content.ContentProviderClient;
import android.content.Context;
import android.net.Uri;
import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
import eu.alefzero.owncloud.datamodel.DataStorageManager;
import eu.alefzero.webdav.WebdavClient;

/**
 * Base SyncAdapter for OwnCloud Designed to be subclassed for the concrete
 * SyncAdapter, like ConcatsSync, CalendarSync, FileSync etc..
 * 
 * @author sassman
 * 
 */
public abstract class AbstractOwnCloudSyncAdapter extends AbstractThreadedSyncAdapter {

    private AccountManager accountManager;
    private Account account;
    private ContentProviderClient contentProvider;
    private Date lastUpdated;
    private DataStorageManager mStoreManager;

    private WebdavClient mClient = null;

    public AbstractOwnCloudSyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
        this.setAccountManager(AccountManager.get(context));
    }

    public AccountManager getAccountManager() {
        return accountManager;
    }

    public void setAccountManager(AccountManager accountManager) {
        this.accountManager = accountManager;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }

    public ContentProviderClient getContentProvider() {
        return contentProvider;
    }

    public void setContentProvider(ContentProviderClient contentProvider) {
        this.contentProvider = contentProvider;
    }

    public Date getLastUpdated() {
        return lastUpdated;
    }

    public void setLastUpdated(Date lastUpdated) {
        this.lastUpdated = lastUpdated;
    }

    public void setStorageManager(DataStorageManager storage_manager) {
        mStoreManager = storage_manager;
    }

    public DataStorageManager getStorageManager() {
        return mStoreManager;
    }

    protected ConnectionKeepAliveStrategy getKeepAliveStrategy() {
        return new ConnectionKeepAliveStrategy() {
            public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
                // Change keep alive straategy basing on response: ie
                // forbidden/not found/etc
                // should have keep alive 0
                // default return: 5s
                int statusCode = response.getStatusLine().getStatusCode();

                // HTTP 400, 500 Errors as well as HTTP 118 - Connection timed
                // out
                if ((statusCode >= 400 && statusCode <= 418) || (statusCode >= 421 && statusCode <= 426)
                        || (statusCode >= 500 && statusCode <= 510) || statusCode == 118) {
                    return 0;
                }

                return 5 * 1000;
            }
        };
    }

    protected HttpResponse fireRawRequest(HttpRequest query)
            throws ClientProtocolException, OperationCanceledException, AuthenticatorException, IOException {
        /*
         * BasicHttpContext httpContext = new BasicHttpContext(); BasicScheme
         * basicAuth = new BasicScheme();
         * httpContext.setAttribute("preemptive-auth", basicAuth);
         * 
         * HttpResponse response = getClient().execute(mHost, query,
         * httpContext);
         */
        return null;
    }

    protected Uri getUri() {
        return Uri.parse(this.getAccountManager().getUserData(getAccount(), AccountAuthenticator.KEY_OC_URL));
    }

    protected WebdavClient getClient() throws OperationCanceledException, AuthenticatorException, IOException {
        if (mClient == null) {
            if (this.getAccountManager().getUserData(getAccount(), AccountAuthenticator.KEY_OC_URL) == null) {
                throw new UnknownHostException();
            }
            mClient = new WebdavClient(account, getContext());
            // mHost = mClient.getTargetHost();
        }

        return mClient;
    }
}