io.gameup.android.http.RequestFactory.java Source code

Java tutorial

Introduction

Here is the source code for io.gameup.android.http.RequestFactory.java

Source

/*
 * Copyright 2014-2015 GameUp
 *
 * 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 io.gameup.android.http;

import android.net.Uri;

import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;

import io.gameup.android.GameUp;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import okio.ByteString;

/**
 * Utility class that provides convenient pre-configured connection creation.
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class RequestFactory {

    /** User Agent string to be used in API calls. */
    private final static String REQUEST_USER_AGENT = GameUp.USER_AGENT_TEMPLATE.replace(GameUp._WEBVIEW_USER_AGENT_,
            System.getProperty("http.agent"));

    /** Standard media type to use with all requests. */
    private static final MediaType APPLICATION_JSON_MEDIA_TYPE = MediaType.parse("application/json");

    /**
     * Prepare a HEAD request to the given path.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @param token The gamer token to use for authentication.
     * @return A Request ready to be sent via a OkHttpClient.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    public static Request head(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token)
            throws UnsupportedEncodingException, MalformedURLException {
        return create(uri, apiKey, token).head().build();
    }

    /**
     * Prepare a GET request to the given path.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @return A Request ready to be sent via a OkHttpClient.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    public static Request get(final @NonNull Uri uri, final @NonNull String apiKey)
            throws UnsupportedEncodingException, MalformedURLException {
        return get(uri, apiKey, "");
    }

    /**
     * Prepare a GET request to the given path.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @param token The gamer token to use for authentication.
     * @return A Request ready to be sent via a OkHttpClient.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    public static Request get(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token)
            throws UnsupportedEncodingException, MalformedURLException {
        return create(uri, apiKey, token).get().build();
    }

    /**
     * Prepare a PUT request to the given path with the given data.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @param token The gamer token to use for authentication.
     * @return A Request ready to be sent via a OkHttpClient.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    public static Request put(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token,
            final @NonNull String body) throws UnsupportedEncodingException, MalformedURLException {
        return create(uri, apiKey, token)
                .put(RequestBody.create(APPLICATION_JSON_MEDIA_TYPE, body.getBytes("UTF-8"))).build();
    }

    /**
     * Prepare a POST request to the given path with the given data.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @param token The gamer token to use for authentication.
     * @return A Request ready to be sent via a OkHttpClient.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    public static Request post(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token,
            final @NonNull String body) throws UnsupportedEncodingException, MalformedURLException {
        return create(uri, apiKey, token)
                .post(RequestBody.create(APPLICATION_JSON_MEDIA_TYPE, body.getBytes("UTF-8"))).build();
    }

    /**
     * Prepare a DELETE request to the given path.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @param token The gamer token to use for authentication.
     * @return A Request ready to be sent via a OkHttpClient.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    public static Request delete(final @NonNull Uri uri, final @NonNull String apiKey, final @NonNull String token)
            throws UnsupportedEncodingException, MalformedURLException {
        return create(uri, apiKey, token).delete().build();
    }

    /**
     * Return a builder configured with all common headers and options.
     *
     * @param uri The URL string to connect to.
     * @param apiKey The API key to use for authentication.
     * @param token The gamer token to use for authentication.
     * @return A Request.Builder with only the method (and optionally request
     *         body) to be set before use.
     * @throws UnsupportedEncodingException
     * @throws MalformedURLException
     */
    private static Request.Builder create(final @NonNull Uri uri, final @NonNull String apiKey,
            final @NonNull String token) throws UnsupportedEncodingException, MalformedURLException {

        return new Request.Builder().url(new URL(uri.toString())).header("User-Agent", REQUEST_USER_AGENT)
                .header("Content-Type", "application/json").header("Accept", "application/json")
                .header("Authorization",
                        "Basic " + ByteString.of((apiKey + ":" + token).getBytes("ISO-8859-1")).base64());
    }

}