Android Open Source - getrest Restful Client






From Project

Back to project page getrest.

License

The source code is released under:

Apache License

If you think the Android project getrest 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 2012 Alexey Hanin/*from   ww  w .j a va  2 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 getrest.android;

import android.content.Context;
import android.net.Uri;
import android.os.Handler;
import getrest.android.client.RequestCallbackFactory;
import getrest.android.client.RequestFuture;
import getrest.android.client.impl.RestfulClientImpl;
import getrest.android.core.Method;

/**
 * @author aha
 * @since 2012-01-13
 */
public abstract class RestfulClient {

    private String baseUrl;

    private RequestCallbackFactory requestCallbackFactory;

    public String getBaseUrl() {
        return baseUrl;
    }

    public void setBaseUrl(final String baseUrl) {
        this.baseUrl = baseUrl;
    }

    protected abstract void init(Context context);

    /**
     * Detach {@link RestfulClient} and release all retained resources.
     */
    public abstract void detach();

    /**
     * Build a request.
     *
     * @param uri@return {@link RequestBuilder} instance, on which {@link getrest.android.RestfulClient.RequestBuilder#execute()}
     * can be called to execute request
     */
    public abstract RequestBuilder request(Uri uri);

    /**
     * Build a request to a path resource.
     *
     * @param path
     * @return
     */
    public RequestBuilder request(String path) {
        return request(buildUri(path));
    }

    private Uri buildUri(final String path) {
        return this.baseUrl == null ? Uri.parse(path) : Uri.parse(gluePath(baseUrl, path));
    }

    private String gluePath(final String baseUrl, final String path) {
        final StringBuilder sb = new StringBuilder(baseUrl);
        if (sb.charAt(sb.length()-1) != '/' && !path.startsWith("/")) {
            sb.append('/');
        }
        sb.append(path);
        return sb.toString();
    }

    /**
     * Pushes a POST request for processing.
     *
     * @param url    resource url
     * @param entity entity object to be posted
     * @return unique request id
     */
    public abstract <T> RequestFuture post(Uri url, T entity);

    /**
     * Pushes a GET request for processing.
     *
     * @param url resource url
     * @return unique request id
     */
    public abstract RequestFuture get(Uri url);

    /**
     * Pushes a DELETE request for processing.
     *
     * @param url resource url
     * @return unique request id
     */
    public abstract RequestFuture delete(Uri url);

    /**
     * Create new instance of {@link RestfulClient} and attaches it to the given {@link Context}. When client object is
     * no longer needed, {@link #detach()} must be called for clean-up and releasing all retained resources.
     *
     * @param context
     * @return
     * @see #detach()
     */
    public static RestfulClient getInstance(Context context) {
        final RestfulClient client = new RestfulClientImpl();
        client.init(context);
        return client;
    }

    /**
     * Associate {@link RequestCallbackFactory} with the client. This factory will be used to automatically create
     * request callbacks.
     *
     * @param requestCallbackFactory
     */
    public void setRequestCallbackFactory(RequestCallbackFactory requestCallbackFactory) {
        this.requestCallbackFactory = requestCallbackFactory;
    }

    /**
     * Return associated {@link RequestCallbackFactory}
     *
     * @return {@link RequestCallbackFactory} that was previously set by
     *         {@link #setRequestCallbackFactory(RequestCallbackFactory)}, or {@code null} if it was not.
     * @see #setRequestCallbackFactory(getrest.android.client.RequestCallbackFactory)
     */
    protected RequestCallbackFactory getRequestCallbackFactory() {
        return requestCallbackFactory;
    }

    /**
     * Set {@link Handler} in which request callbacks will be executed. Default behaviour is the callback of thread in
     * which client has been created.
     *
     * @param callbackHandler {@link Handler} instance to be used to execute callbacks
     */
    public abstract void setCallbackHandler(Handler callbackHandler);

    /**
     * Start the client and replays all unfinished requests.
     */
    public abstract void replay();

    /**
     * Start the client.
     */
    public abstract void start();

    public abstract RequestFuture getRequestFuture(String requestId);

    public interface RequestBuilder {

        RequestBuilder uri(Uri uri);

        RequestBuilder method(Method method);

        RequestBuilder header(String name, String value);

        <T> RequestBuilder entity(T entity);

        RequestFuture execute();

    }
}




Java Source Code List

getrest.android.RestfulClient.java
getrest.android.client.InMemoryRequestManager.java
getrest.android.client.RequestCallbackFactory.java
getrest.android.client.RequestCallback.java
getrest.android.client.RequestExecutor.java
getrest.android.client.RequestFuture.java
getrest.android.client.RequestRegistry.java
getrest.android.client.impl.RequestEventRecord.java
getrest.android.client.impl.RequestFutureImpl.java
getrest.android.client.impl.RequestRegistryEditorImpl.java
getrest.android.client.impl.RequestRegistryEntryFactory.java
getrest.android.client.impl.RequestRegistryPreferencesImpl.java
getrest.android.client.impl.RestfulClientImpl.java
getrest.android.client.impl.TransactionalRequestEntryStorage.java
getrest.android.config.ConfigResolver.java
getrest.android.config.Config.java
getrest.android.config.DefaultContributor.java
getrest.android.config.HasConfig.java
getrest.android.config.ResourceContextContribution.java
getrest.android.config.ResourceContextContributor.java
getrest.android.config.ResourceNode.java
getrest.android.config.ResourcePath.java
getrest.android.core.BaseRequest.java
getrest.android.core.ErrorState.java
getrest.android.core.Error.java
getrest.android.core.HandlerException.java
getrest.android.core.HasHeaders.java
getrest.android.core.Header.java
getrest.android.core.HeadersHelper.java
getrest.android.core.Headers.java
getrest.android.core.Method.java
getrest.android.core.Pack.java
getrest.android.core.Request.java
getrest.android.core.Response.java
getrest.android.core.Status.java
getrest.android.exception.GetrestException.java
getrest.android.exception.GetrestRuntimeException.java
getrest.android.executor.Handler.java
getrest.android.executor.PostMethodPipeline.java
getrest.android.executor.RequestHandlerFactory.java
getrest.android.executor.RequestHandlerImpl.java
getrest.android.executor.RequestHandler.java
getrest.android.executor.RequestPipeline.java
getrest.android.http.HttpEntityRepresentation.java
getrest.android.http.HttpServiceRequestExecutor.java
getrest.android.http.RepresentationHttpEntity.java
getrest.android.request.RequestContext.java
getrest.android.request.RequestLifecycle.java
getrest.android.request.RequestManager.java
getrest.android.request.RequestStatus.java
getrest.android.resource.Marshaller.java
getrest.android.resource.Packer.java
getrest.android.resource.ResourceContextImpl.java
getrest.android.resource.ResourceContext.java
getrest.android.service.Broadcaster.java
getrest.android.service.Representation.java
getrest.android.service.RequestEventBus.java
getrest.android.service.RequestJob.java
getrest.android.service.RequestStateChangeEventWrapper.java
getrest.android.service.RequestWrapper.java
getrest.android.service.RestService.java
getrest.android.service.ServiceRequestExecutor.java
getrest.android.service.ServiceRequest.java
getrest.android.service.ServiceResponse.java
getrest.android.testapp.GetrestTestApplication.java
getrest.android.testapp.MainActivity.java
getrest.android.util.LoggerFactory.java
getrest.android.util.Logger.java
getrest.android.util.WorkerQueue.java