Android Open Source - getrest Request Future Impl






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 w  ww. j a  v a  2  s.c o  m
 *
 * 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.client.impl;

import getrest.android.client.RequestCallback;
import getrest.android.client.RequestFuture;
import getrest.android.exception.GetrestRuntimeException;
import getrest.android.core.Request;
import getrest.android.core.Response;

class RequestFutureImpl implements RequestFuture {

    private String requestId;
    private Request request;
    private Response response;

    private boolean isPendingFired;
    private boolean isExecutingFired;
    private boolean isFinishedFired;
    private boolean isErrorFired;

    private boolean isFinished;

    private RequestCallback callback;

    private final Object lock = new Object();

    public void setRequestId(final String requestId) {
        this.requestId = requestId;
    }

    public void setRequest(final Request request) {
        this.request = request;
    }

    public boolean isFinished() {
        synchronized (this) {
            return isFinished;
        }
    }

    public String getRequestId() {
        return requestId;
    }

    public void setRequestCallback(final RequestCallback requestCallback) {
        this.callback = requestCallback;
    }

    public void finish(Response response) {
        synchronized (this) {
            this.response = response;
            this.isFinished = true;
            synchronized (lock) {
                lock.notifyAll();
            }
        }
    }

    public Response get() {
        synchronized (this) {
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException ex) {
                    throw new GetrestRuntimeException("Exception while trying to wait for response", ex);
                }
            }
        }
        return response;
    }

    public void firePending() {
        synchronized (this) {
            if (callback != null && !isPendingFired) {
                doFirePending();
            }
        }
    }

    private void doFirePending() {
        try {
            callback.onPending(request);
        } finally {
            isPendingFired = true;
        }
    }

    public void fireExecuting() {
        synchronized (this) {
            if (callback != null && !isExecutingFired) {
                doFireExecuting();
            }
        }
    }

    private void doFireExecuting() {
        try {
            if (!isPendingFired) {
                doFirePending();
            }
        } finally {
            try {
                callback.onExecuting(request);
            } finally {
                isExecutingFired = true;
            }
        }
    }

    public void fireFinished(final Response response) {
        synchronized (this) {
            if (callback != null && !isFinishedFired) {
                doFireFinished(response);
            }
        }
    }

    private void doFireFinished(final Response response) {
        try {
            if (!isExecutingFired) {
                doFireExecuting();
            }
        } finally {
            try {
                callback.onFinished(response);
            } finally {
                isFinishedFired = true;
            }
        }
    }

    public void fireError() {
        synchronized (this) {
            if (callback != null && !isErrorFired) {
                doFireError();
            }
        }
    }

    private void doFireError() {
        try {
            callback.onError(request);
        } finally {
            isErrorFired = true;
        }
    }

}




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