Package com.google.api.explorer.client.base

Source Code of com.google.api.explorer.client.base.ApiResponse

/*
* Copyright (C) 2011 Google Inc.
*
* 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.google.api.explorer.client.base;

import com.google.api.explorer.client.base.dynamicjso.DynamicJso;
import com.google.common.collect.Maps;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayString;

import java.util.Map;

/**
* Represents a response from a call to an API service.
*
* @author jasonhall@google.com (Jason Hall)
*/
public class ApiResponse {
  /**
   * Class to store a key and value of a header.
   *
   */
  public static class HeaderValue {
    final String key;
    final String value;

    /**
     * Create a new header with the specified key and value.
     */
    public HeaderValue(String key, String value) {
      this.key = key;
      this.value = value;
    }

    /**
     * Returns the key.
     */
    public String getKey() {
      return key;
    }

    /**
     * Returns the value.
     */
    public String getValue() {
      return value;
    }
  }

  /** The response object */
  private DynamicJso object;

  /**
   * A {@link Map} of normalized lower case response header keys to tuples
   * containing the original key and the value.
   */
  private final Map<String, HeaderValue> headers;

  private ApiResponse(DynamicJso object) {
    this.object = object;
    this.headers = createHeadersMap(object);
  }

  /** Returns the value of the body element as a String. */
  public String getBodyAsString() {
    return object.getString("body");
  }

  /** Returns the status code of the response. */
  public int getStatus() {
    return object.getInteger("status");
  }

  /** Returns the text associated with the status code. */
  public String getStatusText() {
    return object.getString("statusText");
  }

  /**
   * Returns a map of normalized lower case header keys, associated with a tuple
   * containing the original key and the value.
   */
  public Map<String, HeaderValue> getHeaders() {
    return headers;
  }

  /** Instantiates a response from the JS object representation of a response. */
  public static ApiResponse fromData(JavaScriptObject data) {
    DynamicJso jso = data.cast();

    return new ApiResponse(jso);
  }

  /**
   * Inspects the headers object of the given JS object and constructs a
   * {@link Map} of its keys and values.
   */
  private static Map<String, HeaderValue> createHeadersMap(DynamicJso data) {
    DynamicJso headers = data.get("headers");
    JsArrayString keys = headers.keys();
    Map<String, HeaderValue> headersMap = Maps.newHashMapWithExpectedSize(keys.length());

    for (int i = 0; i < keys.length(); i++) {
      String key = keys.get(i);
      String value = "";
      switch (headers.typeofKey(key)) {
        case STRING:
          value = headers.getString(key);
          break;

        case BOOLEAN:
          value = String.valueOf(headers.getBoolean(key));
          break;

        case NUMBER:
          value = String.valueOf(headers.getInteger(key));
          break;

        case INTEGER:
          value = String.valueOf(headers.getDouble(key));
          break;
      }
      headersMap.put(key.toLowerCase(), new HeaderValue(key, value));

    }
    return headersMap;
  }
}
TOP

Related Classes of com.google.api.explorer.client.base.ApiResponse

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.