Android Open Source - gasp-gcm-client R E S T Intent Service






From Project

Back to project page gasp-gcm-client.

License

The source code is released under:

Apache License

If you think the Android project gasp-gcm-client 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 Mark Prichard, CloudBees
 */*  w  ww.jav a2 s.c om*/
 * 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 com.cloudbees.gasp.service;

import android.app.IntentService;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

/**
 * Closely modeled on Neil Goodman's Android REST tutorials
 * https://github.com/posco2k8/rest_service_tutorial
 * https://github.com/posco2k8/rest_loader_tutorial.git
 *
 * @author Mark Prichard
 */
public class RESTIntentService extends IntentService {
    private static final String TAG = RESTIntentService.class.getName();
    
    public static final int GET    = 0x1;
    public static final int POST   = 0x2;
    public static final int PUT    = 0x3;
    public static final int DELETE = 0x4;

    public static final String EXTRA_HTTP_VERB       = "com.cloudbees.gasp.EXTRA_HTTP_VERB";
    public static final String EXTRA_PARAMS          = "com.cloudbees.gasp.EXTRA_PARAMS";
    public static final String EXTRA_HEADERS         = "com.cloudbees.gasp.EXTRA_HEADERS";
    public static final String EXTRA_RESULT_RECEIVER = "com.cloudbees.gasp.EXTRA_RESULT_RECEIVER";
    public static final String REST_RESULT           = "com.cloudbees.gasp.REST_RESULT";

    public RESTIntentService() {
        super(TAG);
    }
    
    @Override
    protected void onHandleIntent(Intent intent) {
        Uri    action = intent.getData();
        Bundle extras = intent.getExtras();
        
        if (extras == null || action == null || !extras.containsKey(EXTRA_RESULT_RECEIVER)) {
            Log.e(TAG, "You did not pass extras or data with the Intent.");
            return;
        }

        int verb = extras.getInt(EXTRA_HTTP_VERB, GET);
        Bundle params = extras.getParcelable(EXTRA_PARAMS);
        Bundle headers = extras.getParcelable(EXTRA_HEADERS);
        ResultReceiver receiver = extras.getParcelable(EXTRA_RESULT_RECEIVER);

        try {
            HttpRequestBase request = null;

            // Get query params from Bundle and build URL
            switch (verb) {
                case GET: {
                    request = new HttpGet();
                    attachUriWithQuery(request, action, params);
                }
                break;
                
                case DELETE: {
                    request = new HttpDelete();
                    attachUriWithQuery(request, action, params);
                }
                break;
                
                case POST: {
                    request = new HttpPost();
                    request.setURI(new URI(action.toString()));

                    HttpPost postRequest = (HttpPost) request;
                    
                    if (params != null) {
                        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(paramsToList(params));
                        postRequest.setEntity(formEntity);
                    }
                }
                break;
                
                case PUT: {
                    request = new HttpPut();
                    request.setURI(new URI(action.toString()));

                    HttpPut putRequest = (HttpPut) request;
                    
                    if (params != null) {
                        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(paramsToList(params));
                        putRequest.setEntity(formEntity);
                    }
                }
                break;
            }

            // Get Headers from Bundle
            for (BasicNameValuePair header: paramsToList(headers)){
                request.setHeader(header.getName(), header.getValue());
            }
            
            if (request != null) {
                HttpClient client = new DefaultHttpClient();

                Log.d(TAG, "Executing request: "+ verbToString(verb) +": "+ action.toString());
                
                HttpResponse response = client.execute(request);
                
                HttpEntity responseEntity = response.getEntity();
                StatusLine responseStatus = response.getStatusLine();
                int        statusCode     = responseStatus != null ? responseStatus.getStatusCode() : 0;
                
                if ((responseEntity != null) && (responseStatus.getStatusCode() == 200)) {
                    Bundle resultData = new Bundle();
                    resultData.putString(REST_RESULT, EntityUtils.toString(responseEntity));
                    receiver.send(statusCode, resultData);
                }
                else {
                    receiver.send(statusCode, null);
                }
            }
        }
        catch (URISyntaxException e) {
            Log.e(TAG, "URI syntax was incorrect. "+ verbToString(verb) +": "+ action.toString(), e);
            receiver.send(0, null);
        }
        catch (UnsupportedEncodingException e) {
            Log.e(TAG, "A UrlEncodedFormEntity was created with an unsupported encoding.", e);
            receiver.send(0, null);
        }
        catch (ClientProtocolException e) {
            Log.e(TAG, "There was a problem when sending the request.", e);
            receiver.send(0, null);
        }
        catch (IOException e) {
            Log.e(TAG, "There was a problem when sending the request.", e);
            receiver.send(0, null);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void attachUriWithQuery(HttpRequestBase request, Uri uri, Bundle params) {
        try {
            if (params == null) {
                request.setURI(new URI(uri.toString()));
            }
            else {
                Uri.Builder uriBuilder = uri.buildUpon();
                
                // Loop through our params and append them to the Uri.
                for (BasicNameValuePair param : paramsToList(params)) {
                    uriBuilder.appendQueryParameter(param.getName(), param.getValue());
                }
                
                uri = uriBuilder.build();
                request.setURI(new URI(uri.toString()));
            }
        }
        catch (URISyntaxException e) {
            Log.e(TAG, "URI syntax was incorrect: "+ uri.toString(), e);
        }
    }
    
    private static String verbToString(int verb) {
        switch (verb) {
            case GET:
                return "GET";
                
            case POST:
                return "POST";
                
            case PUT:
                return "PUT";
                
            case DELETE:
                return "DELETE";
        }
        
        return "";
    }
    
    private static List<BasicNameValuePair> paramsToList(Bundle params) {
        ArrayList<BasicNameValuePair> formList = new ArrayList<BasicNameValuePair>(params.size());
        
        for (String key : params.keySet()) {
            Object value = params.get(key);

            if (value != null) formList.add(new BasicNameValuePair(key, value.toString()));
        }
        
        return formList;
    }

}




Java Source Code List

com.cloudbees.gasp.activity.ConsoleActivityTest.java
com.cloudbees.gasp.activity.ConsoleActivity.java
com.cloudbees.gasp.activity.PlacesActivityTest.java
com.cloudbees.gasp.activity.PlacesActivity.java
com.cloudbees.gasp.activity.PlacesDetailActivityTest.java
com.cloudbees.gasp.activity.PlacesDetailActivity.java
com.cloudbees.gasp.activity.RestaurantListActivityTest.java
com.cloudbees.gasp.activity.RestaurantListActivity.java
com.cloudbees.gasp.activity.ReviewActivity.java
com.cloudbees.gasp.activity.ReviewListActivityTest.java
com.cloudbees.gasp.activity.ReviewListActivity.java
com.cloudbees.gasp.activity.SetPreferencesActivity.java
com.cloudbees.gasp.activity.TestParams.java
com.cloudbees.gasp.activity.TwitterStreamActivityTest.java
com.cloudbees.gasp.activity.TwitterStreamActivity.java
com.cloudbees.gasp.activity.UserListActivityTest.java
com.cloudbees.gasp.activity.UserListActivity.java
com.cloudbees.gasp.adapter.DataAdapterQueryTest.java
com.cloudbees.gasp.adapter.DatabaseTest.java
com.cloudbees.gasp.adapter.GaspDataAdapter.java
com.cloudbees.gasp.adapter.GaspSQLiteHelper.java
com.cloudbees.gasp.adapter.RestaurantArrayAdapter.java
com.cloudbees.gasp.adapter.RestaurantDataAdapter.java
com.cloudbees.gasp.adapter.ReviewArrayAdapter.java
com.cloudbees.gasp.adapter.ReviewDataAdapter.java
com.cloudbees.gasp.adapter.UserArrayAdapter.java
com.cloudbees.gasp.adapter.UserDataAdapter.java
com.cloudbees.gasp.fragment.AddEventFragment.java
com.cloudbees.gasp.fragment.DeleteEventFragment.java
com.cloudbees.gasp.fragment.GaspDatabaseFragment.java
com.cloudbees.gasp.fragment.GaspRestaurantFragment.java
com.cloudbees.gasp.fragment.GaspReviewFragment.java
com.cloudbees.gasp.fragment.LocationFragment.java
com.cloudbees.gasp.fragment.NearbySearchFragment.java
com.cloudbees.gasp.fragment.PlaceDetailsFragment.java
com.cloudbees.gasp.fragment.PreferencesFragment.java
com.cloudbees.gasp.fragment.RESTResponderFragment.java
com.cloudbees.gasp.fragment.TwitterAuthenticationFragment.java
com.cloudbees.gasp.fragment.TwitterResponderFragment.java
com.cloudbees.gasp.gcm.GCMBroadcastReceiver.java
com.cloudbees.gasp.gcm.GCMIntentService.java
com.cloudbees.gasp.gcm.GCMRegistration.java
com.cloudbees.gasp.location.GooglePlacesClient.java
com.cloudbees.gasp.location.NearbySearchTest.java
com.cloudbees.gasp.location.PlaceDetailsTest.java
com.cloudbees.gasp.location.PlaceEventsTest.java
com.cloudbees.gasp.model.EventRequest.java
com.cloudbees.gasp.model.EventResponse.java
com.cloudbees.gasp.model.GaspDataObject.java
com.cloudbees.gasp.model.Geometry.java
com.cloudbees.gasp.model.Location.java
com.cloudbees.gasp.model.ModelObjectTest.java
com.cloudbees.gasp.model.PlaceDetail.java
com.cloudbees.gasp.model.PlaceDetails.java
com.cloudbees.gasp.model.PlaceEvent.java
com.cloudbees.gasp.model.Place.java
com.cloudbees.gasp.model.Places.java
com.cloudbees.gasp.model.Query.java
com.cloudbees.gasp.model.Restaurant.java
com.cloudbees.gasp.model.Review.java
com.cloudbees.gasp.model.TwitterStatus.java
com.cloudbees.gasp.model.TwitterStatuses.java
com.cloudbees.gasp.model.TwitterTokenResponse.java
com.cloudbees.gasp.model.User.java
com.cloudbees.gasp.robotium.NavigationTest.java
com.cloudbees.gasp.server.GaspEntityTest.java
com.cloudbees.gasp.server.GaspRestaurantTest.java
com.cloudbees.gasp.server.GaspReviewTest.java
com.cloudbees.gasp.server.GaspServerAPI.java
com.cloudbees.gasp.service.AsyncRESTClient.java
com.cloudbees.gasp.service.AsyncRestTestAll.java
com.cloudbees.gasp.service.AsyncRestTestIndex.java
com.cloudbees.gasp.service.IRESTListener.java
com.cloudbees.gasp.service.RESTIntentService.java
com.cloudbees.gasp.service.RestaurantSyncServiceTest.java
com.cloudbees.gasp.service.RestaurantSyncService.java
com.cloudbees.gasp.service.RestaurantUpdateServiceTest.java
com.cloudbees.gasp.service.RestaurantUpdateService.java
com.cloudbees.gasp.service.ReviewSyncServiceTest.java
com.cloudbees.gasp.service.ReviewSyncService.java
com.cloudbees.gasp.service.ReviewUpdateServiceTest.java
com.cloudbees.gasp.service.ReviewUpdateService.java
com.cloudbees.gasp.service.TwitterServiceTest.java
com.cloudbees.gasp.service.UserSyncServiceTest.java
com.cloudbees.gasp.service.UserSyncService.java
com.cloudbees.gasp.service.UserUpdateServiceTest.java
com.cloudbees.gasp.service.UserUpdateService.java
com.cloudbees.gasp.twitter.TwitterAPI.java
com.cloudbees.gasp.twitter.TwitterAuthServiceTest.java
com.cloudbees.gasp.twitter.TwitterAuthentication.java