Android Open Source - NativeClient-Android Mobile Service Connection






From Project

Back to project page NativeClient-Android.

License

The source code is released under:

Apache License

If you think the Android project NativeClient-Android 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) Microsoft//w w  w.  j  av a2  s .  co m
All Rights Reserved
Apache 2.0 License
 
   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.
 
See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
 */
/*
 * MobileServiceConnection.java
 */

package com.azure.webapi;

import java.io.IOException;

import org.apache.http.Header;
import org.apache.http.protocol.HTTP;

import com.microsoft.aad.test.todoapi.Constants;

import android.os.Build;

/**
 * Class for handling communication with Windows Azure Mobile Services REST APIs
 */
public class MobileServiceConnection {

  /**
   * The MobileServiceClient used for communication with the Mobile Service
   */
  private MobileServiceClient mClient;

  /**
   * Header value to represent JSON content-type
   */
  static final String JSON_CONTENTTYPE = "application/json";

  /**
   * Current SDK version
   */
  private static final String SDK_VERSION = "1.0";

  /**
   * Constructor for the MobileServiceConnection
   * 
   * @param client
   *            The client used for communication with the Mobile Service
   */
  public MobileServiceConnection(MobileServiceClient client) {
    mClient = client;
  }

  /**
   * Execute a request-response operation with a Mobile Service
   * 
   * @param request
   *            The request to execute
   * @param responseCallback
   *            Callback to invoke after the request is executed
   */
  public void start(final ServiceFilterRequest request,
      ServiceFilterResponseCallback responseCallback) {
    if (request == null) {
      throw new IllegalArgumentException("Request can not be null");
    }

    ServiceFilter filter = mClient.getServiceFilter();
    // Set the request's headers
    configureHeadersOnRequest(request);
    filter.handleRequest(request, new NextServiceFilterCallback() {

      @Override
      public void onNext(ServiceFilterRequest request,
          ServiceFilterResponseCallback responseCallback) {

        ServiceFilterResponse response = null;

        try {
          response = request.execute();
          int statusCode = response.getStatus().getStatusCode();

          // If the response has error throw exception
          if (statusCode < 200 || statusCode >= 300) {
            String responseContent = response.getContent();
            
            MobileServiceException serviceExc = null;
            if (responseContent != null
                && !responseContent.isEmpty()) {
              serviceExc = new MobileServiceException(responseContent);
            } else {
              serviceExc = new MobileServiceException(String.format(
                  "{'code': %d}", statusCode));
            }
            // Return error codes to the user.. don't swallow details
            responseCallback.onResponse(response, serviceExc);
            return;
          }

        }catch(IOException ex)
        {
          // Server side may have malformed response for 401 status code. Most people dont send challange.
          responseCallback.onResponse(response,
              new MobileServiceException("Error in connecting to the resource", ex));
          return;
          
        } catch (Exception e) {
          // Something went wrong, call onResponse with exception
          // method
          if (responseCallback != null) {
            responseCallback.onResponse(response,
                new MobileServiceException(
                    "Error while processing request.", e));
            return;
          }
        }

        // Call onResponse method
        if (responseCallback != null) {
          responseCallback.onResponse(response, null);
        }
      }
    }, responseCallback);
  }

  /**
   * Configures the HttpRequestBase to execute a request with a Mobile Service
   * 
   * @param request
   *            The request to configure
   */
  private void configureHeadersOnRequest(ServiceFilterRequest request) {
    // Add the authentication header if the user is logged in
    MobileServiceUser user = mClient.getCurrentUser();
    if (user != null && user.getAuthenticationToken() != "") {
      request.addHeader(
          Constants.HEADER_AUTHORIZATION,
          Constants.HEADER_AUTHORIZATION_VALUE_PREFIX
              + user.getAuthenticationToken());
    }

    // Set the User Agent header
    request.addHeader(HTTP.USER_AGENT, getUserAgent());
    
    // MOBILE service API related headers
    // // Set the special Application key header
    // request.addHeader(X_ZUMO_APPLICATION_HEADER, mClient.getAppKey());
    //
    // // Set the special Installation ID header
    // request.addHeader(
    // X_ZUMO_INSTALLATION_ID_HEADER,
    // MobileServiceApplication.getInstallationId(mClient.getContext()));

    if (!requestContainsHeader(request, "Accept")) {
      request.addHeader("Accept", JSON_CONTENTTYPE);
    }
  }

  /**
   * Verifies if the request contains the specified header
   * 
   * @param request
   *            The request to verify
   * @param headerName
   *            The header name to find
   * @return True if the header is present, false otherwise
   */
  private boolean requestContainsHeader(ServiceFilterRequest request,
      String headerName) {
    for (Header header : request.getHeaders()) {
      if (header.getName().equals(headerName)) {
        return true;
      }
    }

    return false;
  }

  /**
   * Generates the User-Agent
   */
  static String getUserAgent() {
    String userAgent = String.format(
        "ZUMO/%s (lang=%s; os=%s; os_version=%s; arch=%s)",
        SDK_VERSION, "Java", "Android", Build.VERSION.RELEASE,
        Build.CPU_ABI);

    return userAgent;
  }
}




Java Source Code List

com.azure.webapi.ApiJsonOperationCallback.java
com.azure.webapi.ApiOperationCallback.java
com.azure.webapi.DateSerializer.java
com.azure.webapi.HttpPatch.java
com.azure.webapi.JsonEntityParser.java
com.azure.webapi.LoginManager.java
com.azure.webapi.LongSerializer.java
com.azure.webapi.MobileServiceAuthenticationProvider.java
com.azure.webapi.MobileServiceClient.java
com.azure.webapi.MobileServiceConnection.java
com.azure.webapi.MobileServiceException.java
com.azure.webapi.MobileServiceJsonTable.java
com.azure.webapi.MobileServiceQueryOperations.java
com.azure.webapi.MobileServiceQuery.java
com.azure.webapi.MobileServiceTableBase.java
com.azure.webapi.MobileServiceTable.java
com.azure.webapi.MobileServiceUser.java
com.azure.webapi.NextServiceFilterCallback.java
com.azure.webapi.QueryOrder.java
com.azure.webapi.RequestAsyncTask.java
com.azure.webapi.ServiceFilterRequestImpl.java
com.azure.webapi.ServiceFilterRequest.java
com.azure.webapi.ServiceFilterResponseCallback.java
com.azure.webapi.ServiceFilterResponseImpl.java
com.azure.webapi.ServiceFilterResponse.java
com.azure.webapi.ServiceFilter.java
com.azure.webapi.TableDeleteCallback.java
com.azure.webapi.TableJsonOperationCallback.java
com.azure.webapi.TableJsonQueryCallback.java
com.azure.webapi.TableOperationCallback.java
com.azure.webapi.TableQueryCallback.java
com.azure.webapi.UserAuthenticationCallback.java
com.microsoft.aad.taskapplication.AddTaskActivity.java
com.microsoft.aad.taskapplication.ApplicationTest.java
com.microsoft.aad.taskapplication.SettingsActivity.java
com.microsoft.aad.taskapplication.SimpleAlertDialog.java
com.microsoft.aad.taskapplication.ToDoActivity.java
com.microsoft.aad.taskapplication.UsersListActivity.java
com.microsoft.aad.taskapplication.helpers.AppHelper.java
com.microsoft.aad.taskapplication.helpers.Connection.java
com.microsoft.aad.taskapplication.helpers.Constants.java
com.microsoft.aad.taskapplication.helpers.InMemoryCacheStore.java
com.microsoft.aad.taskapplication.helpers.JsonHelper.java
com.microsoft.aad.taskapplication.helpers.TodoListHttpService.java
com.microsoft.aad.taskapplication.helpers.Utils.java
com.microsoft.aad.taskapplication.helpers.WorkItemAdapter.java
com.microsoft.aad.taskapplication.helpers.WorkItem.java