Android Open Source - android-http Import Service Contract






From Project

Back to project page android-http.

License

The source code is released under:

Apache License

If you think the Android project android-http listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2013 the diamond:dogs|group
 */* w ww.  ja  va 2s . c o m*/
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package at.diamonddogs.service.importservice;

import java.io.Serializable;

import android.app.IntentService;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import at.diamonddogs.data.dataobjects.WebRequest;
import at.diamonddogs.net.WebClient.DownloadProgressListener;
import at.diamonddogs.service.processor.ServiceProcessor;

/**
 * This contract describes the functionality that needs to be implemented in
 * order to make any import service work.
 * 
 * @param <T>
 *            the type of data that is returned by the import
 */
public abstract class ImportServiceContract<T extends Serializable> {
  /**
   * Start import action
   */
  private static final String INTENT_ACTION_STARTIMPORT = "at.diamonddogs.service.GenericImportService.INTENT_ACTION_STARTIMPORT";

  /**
   * A default category for the start {@link Intent}. Users of
   * {@link ImportServiceContract} should really provide an own category in
   * order to distinguish between import intents
   */
  private static final String INTENT_CATEGORY_STARTIMPORTDEFAULTCATEGORY = "at.diamonddogs.service.GenericImportService.INTENT_CATEGORY_STARTIMPORTDEFAULTCATEGORY";

  /**
   * The action of the {@link Intent} that will be send when the import has
   * completed successfully
   */
  private static final String INTENT_ACTION_IMPORTCOMPLETED = "at.diamonddogs.service.GenericImportService.INTENT_ACTION_IMPORTCOMPLETED";

  /**
   * Return status of the import (key)
   */
  private static final String INTENT_EXTRA_STATUS = "INTENT_EXTRA_STATUS";

  /**
   * Failed import status
   */
  private static final int INTENT_EXTRA_STATUS_FAILED = 0;

  /**
   * Successful import status
   */
  private static final int INTENT_EXTRA_STATUS_OK = 1;

  /**
   * Import payload (key)
   */
  private static final String INTENT_EXTRA_PAYLOAD = "INTENT_EXTRA_PAYLOAD";

  protected Intent getSuccessfulImportIntent(T payload) {
    Intent i = new Intent(INTENT_ACTION_IMPORTCOMPLETED);
    i.putExtra(INTENT_EXTRA_STATUS, INTENT_EXTRA_STATUS_OK);
    i.putExtra(INTENT_EXTRA_PAYLOAD, payload);
    return i;
  }

  protected Intent getFailedImportIntent() {
    Intent i = new Intent();
    i.putExtra(INTENT_EXTRA_STATUS, INTENT_EXTRA_STATUS_FAILED);
    return i;
  }

  /**
   * Checks if an import is required
   * 
   * @param i
   *            the {@link Intent} used to start the {@link Service}
   * @return <code>true</code> if the import should be started,
   *         <code>false</code> otherwise
   */
  protected abstract boolean shouldImport(Intent i);

  /**
   * Returns the instance of {@link GenericBroadcastManager}, usually this
   * method will return a wrapped LocalBroadcastManager. By doing so, there is
   * no need to introduce a compatibility library dependency
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @return a {@link GenericBroadcastManager}
   */
  protected abstract GenericBroadcastManager getBroadcastManager(Intent i);

  /**
   * Returns the instance of {@link BroadcastReceiver} that should receive
   * information on import state
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @return an instance of {@link BroadcastReceiver}
   */
  protected abstract BroadcastReceiver getBroadcastReceiver(Intent i);

  /**
   * Returns the {@link IntentFilter} that the {@link BroadcastReceiver}
   * returned by {@link ImportServiceContract#getBroadcastReceiver(Intent)}
   * will be registered to.
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @return an {@link IntentFilter}
   */
  protected IntentFilter getIntentFilter(Intent i) {
    IntentFilter intentFilter = new IntentFilter(INTENT_ACTION_IMPORTCOMPLETED);
    return intentFilter;
  }

  /**
   * Sends the import failed broadcast
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   */
  public void sendImportFailedIntent(Intent i) {
    getBroadcastManager(i).sendBroadcast(getFailedImportIntent());
  }

  /**
   * Sends the import successful import
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @param payload
   *            the payload
   */
  public void sendImportSuccessful(Intent i, T payload) {
    getBroadcastManager(i).sendBroadcast(getSuccessfulImportIntent(payload));
  }

  /**
   * Returns the import {@link WebRequest}
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @return the {@link WebRequest}
   */
  protected abstract WebRequest getWebRequest(Intent i);

  /**
   * Returns the {@link ServiceProcessor} used by the
   * {@link GenericImportService}
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @return an instance of {@link ServiceProcessor}
   */
  protected abstract ServiceProcessor<T> getServiceProcessor(Intent i);

  /**
   * The {@link DownloadProgressListener} returned by this method will receive
   * updates related to the import
   * 
   * @param i
   *            the {@link Intent} that was used to start the service
   * @return a {@link DownloadProgressListener}
   */
  protected DownloadProgressListener getDownloadProgressListener(Intent i) {
    return null;
  }

  /**
   * Checks if the import was successful. The {@link Intent} passed to this
   * method must be the broadcasted intent received after the imported
   * completed.
   * 
   * @param i
   *            the broadcasted {@link Intent}
   * @return <code>true</code> if the import was successful,
   *         <code>false</code> otherwise
   */
  public static final boolean wasSuccessful(Intent i) {
    return i.getIntExtra(INTENT_EXTRA_STATUS, INTENT_EXTRA_STATUS_FAILED) == INTENT_EXTRA_STATUS_OK;
  }

  /**
   * Returns the payload of the broadcast {@link Intent}.
   * 
   * @param <T>
   *            the type of payload, should be the same as the type defined by
   *            the implementation of {@link GenericImportService}.
   * @param i
   *            the broadcasted {@link Intent}
   * @return
   */
  @SuppressWarnings("unchecked")
  public static final <T> T getPayloadFromIntent(Intent i) {
    if (!i.hasExtra(INTENT_EXTRA_PAYLOAD)) {
      return null;
    }
    return (T) i.getSerializableExtra(INTENT_EXTRA_PAYLOAD);
  }

  /**
   * Start the import
   * 
   * @param c
   *            a {@link Context}
   */
  public static final void startImport(Context c) {
    startImport(c, new Bundle(), INTENT_CATEGORY_STARTIMPORTDEFAULTCATEGORY);
  }

  /**
   * Start the import
   * 
   * @param c
   *            a {@link Context}
   * @param extras
   *            optional extras that will set into the {@link Intent} to be
   *            passed to {@link IntentService#onHandleIntent(Intent)}
   * @param category
   *            a category for this import
   */
  public static final void startImport(Context c, Bundle extras, String category) {
    Intent i = new Intent(INTENT_ACTION_STARTIMPORT);
    i.putExtras(extras);
    i.addCategory(category);
    c.sendBroadcast(i);
  }

  /**
   * This interface provides a contract for implementations that are able to
   * send local broadcasts.
   */
  public interface GenericBroadcastManager {
    /**
     * Sends the broadcast
     * 
     * @param i
     *            the {@link Intent} to broadcast
     * @return <code>true</code> if the broadcast was handled by any
     *         {@link BroadcastReceiver}s, <code>false</code> otherwise
     */
    public boolean sendBroadcast(Intent i);

    /**
     * Register a {@link BroadcastReceiver}
     * 
     * @param receiver
     *            the {@link BroadcastReceiver} to register
     * @param filter
     *            the {@link IntentFilter} that describes the events that
     *            the {@link BroadcastReceiver} will receive
     */
    public void registerReceiver(BroadcastReceiver receiver, IntentFilter filter);
  }
}




Java Source Code List

at.diamonddogs.android.support.v4.util.LruCache.java
at.diamonddogs.builder.WebRequestBuilderConfiguration.java
at.diamonddogs.builder.WebRequestBuilderDefaultConfig.java
at.diamonddogs.builder.WebRequestBuilder.java
at.diamonddogs.contentprovider.AbstractDefaultContentProvider.java
at.diamonddogs.contentprovider.CacheContentProvider.java
at.diamonddogs.data.adapter.ReplyAdapter.java
at.diamonddogs.data.adapter.database.DataBaseAdapterCacheInformation.java
at.diamonddogs.data.adapter.database.DatabaseAdapter.java
at.diamonddogs.data.adapter.database.Query.java
at.diamonddogs.data.adapter.parcelable.ParcelableAdapterTempFile.java
at.diamonddogs.data.adapter.parcelable.ParcelableAdapterWebReply.java
at.diamonddogs.data.adapter.parcelable.ParcelableAdapterWebRequest.java
at.diamonddogs.data.adapter.parcelable.ParcelableAdapter.java
at.diamonddogs.data.adapter.soap.SoapByteArrayAdapter.java
at.diamonddogs.data.adapter.soap.SoapReplyAdapter.java
at.diamonddogs.data.adapter.soap.SoapRequestAdapter.java
at.diamonddogs.data.dataobjects.CacheInformation.java
at.diamonddogs.data.dataobjects.NonTimeCriticalTaskQueueDefaultConfiguration.java
at.diamonddogs.data.dataobjects.NonTimeCriticalTask.java
at.diamonddogs.data.dataobjects.NonTimeCriticalWebRequest.java
at.diamonddogs.data.dataobjects.Reply.java
at.diamonddogs.data.dataobjects.Request.java
at.diamonddogs.data.dataobjects.SoapReply.java
at.diamonddogs.data.dataobjects.SoapRequest.java
at.diamonddogs.data.dataobjects.TempFile.java
at.diamonddogs.data.dataobjects.WebReply.java
at.diamonddogs.data.dataobjects.WebRequest.java
at.diamonddogs.data.parser.JSONArrayProxy.java
at.diamonddogs.data.parser.JSONObjectProxy.java
at.diamonddogs.data.parser.ParserProxy.java
at.diamonddogs.example.http.activity.CachingExampleActivity.java
at.diamonddogs.example.http.activity.HttpExampleActivity.java
at.diamonddogs.example.http.activity.HttpOrderedAsyncAssisiterExampleActivity.java
at.diamonddogs.example.http.activity.HttpServiceAssisterExampleActivity.java
at.diamonddogs.example.http.activity.ImageLoadingExampleListActivity.java
at.diamonddogs.example.http.activity.NonTimeCriticalExampleActivity.java
at.diamonddogs.example.http.activity.StartActivity.java
at.diamonddogs.example.http.dataobject.Example.java
at.diamonddogs.example.http.dataobject.NonTimeCriticalExampleConfiguration.java
at.diamonddogs.example.http.dataobject.Tripple.java
at.diamonddogs.example.http.dataobject.Weather.java
at.diamonddogs.example.http.dataobject.WebComic.java
at.diamonddogs.example.http.factory.NonTimeCriticalExampleConfigFactory.java
at.diamonddogs.example.http.processor.RssProcessor.java
at.diamonddogs.example.http.processor.WeatherProcessor.java
at.diamonddogs.example.http.processor.WebComicProcessor.java
at.diamonddogs.example.http.view.adapter.ImageLoadingExampleAdapter.java
at.diamonddogs.exception.CacheManagerException.java
at.diamonddogs.exception.DatabaseAdapterException.java
at.diamonddogs.exception.ProcessorExeception.java
at.diamonddogs.exception.ServiceException.java
at.diamonddogs.exception.WebClientException.java
at.diamonddogs.net.WebClientDefaultHttpClient.java
at.diamonddogs.net.WebClientFactory.java
at.diamonddogs.net.WebClientHttpURLConnection.java
at.diamonddogs.net.WebClient.java
at.diamonddogs.net.ssl.CustomSSLSocketFactory.java
at.diamonddogs.net.ssl.CustomX509TrustManager.java
at.diamonddogs.net.ssl.SSLHelper.java
at.diamonddogs.nontimecritical.NonTimeCriticalTaskManager.java
at.diamonddogs.nontimecritical.NonTimeCriticalTaskQueueConfigurationDefaultFactory.java
at.diamonddogs.nontimecritical.NonTimeCriticalTaskQueue.java
at.diamonddogs.service.CacheService.java
at.diamonddogs.service.importservice.GenericImportService.java
at.diamonddogs.service.importservice.ImportServiceContract.java
at.diamonddogs.service.importservice.ImportService.java
at.diamonddogs.service.importservice.OrderedImportServiceContract.java
at.diamonddogs.service.importservice.OrderedImportService.java
at.diamonddogs.service.net.HttpOrderedAsyncAssister.java
at.diamonddogs.service.net.HttpServiceAssister.java
at.diamonddogs.service.net.HttpService.java
at.diamonddogs.service.net.ServiceProcessorIdGenerator.java
at.diamonddogs.service.processor.AdjustableImageProcessor.java
at.diamonddogs.service.processor.DataProcessor.java
at.diamonddogs.service.processor.DummyProcessor.java
at.diamonddogs.service.processor.HeadRequestProcessor.java
at.diamonddogs.service.processor.ImageProcessor.java
at.diamonddogs.service.processor.JSONArrayProcessor.java
at.diamonddogs.service.processor.JSONProcessor.java
at.diamonddogs.service.processor.RawDataProcessor.java
at.diamonddogs.service.processor.ServiceProcessorMessageUtil.java
at.diamonddogs.service.processor.ServiceProcessor.java
at.diamonddogs.service.processor.SoapProcessor.java
at.diamonddogs.service.processor.StreamProcessor.java
at.diamonddogs.service.processor.SynchronousProcessor.java
at.diamonddogs.service.processor.SynchronousXmlProcessorNoDom.java
at.diamonddogs.service.processor.XMLProcessorNoDom.java
at.diamonddogs.service.processor.XMLProcessor.java
at.diamonddogs.service.processor.XMLXPathProcessor.java
at.diamonddogs.util.AndroidUtils.java
at.diamonddogs.util.CacheManager.java
at.diamonddogs.util.ConnectivityHelper.java
at.diamonddogs.util.SoapUtil.java
at.diamonddogs.util.Utils.java
at.diamonddogs.util.WorkerQueue.java
org.apache.commons.codec.CharEncoding.java
org.apache.commons.codec.binary.Hex.java
org.apache.commons.codec.binary.StringUtils.java