Android Open Source - getrest Default Contributor






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/* w  w w.  j  a  v a  2s .  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.config;

import android.content.ContentValues;
import android.os.Parcel;
import android.os.Parcelable;
import getrest.android.client.InMemoryRequestManager;
import getrest.android.resource.Marshaller;
import getrest.android.core.Pack;
import getrest.android.resource.Packer;
import getrest.android.executor.RequestHandler;
import getrest.android.executor.RequestHandlerFactory;
import getrest.android.executor.RequestHandlerImpl;
import getrest.android.http.HttpServiceRequestExecutor;
import getrest.android.core.Request;
import getrest.android.request.RequestContext;
import getrest.android.request.RequestLifecycle;
import getrest.android.resource.ResourceContext;
import getrest.android.service.Representation;
import getrest.android.util.Logger;
import getrest.android.util.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

public final class DefaultContributor implements ResourceContextContributor {

    private final Config config;

    public DefaultContributor(Config config) {
        this.config = config;
    }

    public void contribute(final ResourceContextContribution contribution) {
        contribution.setPacker(new ParcelablePacker());
        contribution.setMarshaller(new TempMarshallerImpl());
        contribution.setRequestHandlerFactory(new HttpRequestHandlerFactory(config));
        contribution.setRequestManager(new InMemoryRequestManager());
    }

    private static class ParcelablePack implements Pack<Parcelable> {

        private final Parcelable parcelable;

        public ParcelablePack(final Parcelable parcelable) {
            this.parcelable = parcelable;
        }

        public Parcelable unpack() {
            return parcelable;
        }

        public int describeContents() {
            return 0;
        }

        public void writeToParcel(final Parcel parcel, final int flags) {
            parcel.writeString(parcelable.getClass().getName());
            parcel.writeParcelable(parcelable, 0);
        }

        public static final Creator<ParcelablePack> CREATOR = new Creator<ParcelablePack>() {
            public ParcelablePack createFromParcel(final Parcel parcel) {
                final String className = parcel.readString();

                final Class<?> parcelableClass;
                try {
                    parcelableClass = Class.forName(className);
                } catch (ClassNotFoundException e) {
                    throw new IllegalStateException("Cannot unpack non-parcelable entity");
                }

                final Parcelable entity = parcel.readParcelable(parcelableClass.getClassLoader());

                return new ParcelablePack(entity);
            }

            public ParcelablePack[] newArray(final int size) {
                return new ParcelablePack[size];
            }
        };

    }

    private static class ParcelablePacker implements Packer {
        public ParcelablePack pack(final Object object) {
            if (object instanceof Parcelable) {
                return new ParcelablePack((Parcelable) object);
            } else {
                throw new IllegalArgumentException("Only Parcelable is supported for packing");
            }
        }

    }

    private static class TempMarshallerImpl implements Marshaller<ContentValues, Representation> {
        public Representation marshal(final ContentValues source) {
            return new Representation() {
                public InputStream getContent() throws IOException {
                    return new ByteArrayInputStream(new byte[0]);
                }
            };
        }

        public ContentValues unmarshal(final Representation entity) {
            return new ContentValues();
        }
    }

    private static class HttpRequestHandlerFactory implements RequestHandlerFactory {

        private static final HttpServiceRequestExecutor HTTP_EXECUTOR = new HttpServiceRequestExecutor();

        private final Config config;

        public HttpRequestHandlerFactory(final Config config) {
            this.config = config;
        }

        public RequestHandler getRequestHandler(final Request request) {
            final RequestContext requestContext = getRequestContext(request);

            final DefaultRequestLifecycle requestLifecycle = new DefaultRequestLifecycle();
            requestLifecycle.setRequestContext(requestContext);

            final RequestHandlerImpl requestHandler = new RequestHandlerImpl();
            requestHandler.setRequestContext(requestContext);
            requestHandler.setRequestLifecycle(requestLifecycle);
            requestHandler.setServiceRequestExecutor(HTTP_EXECUTOR);

            return requestHandler;
        }

        private RequestContext getRequestContext(final Request request) {
            final ResourceContext resourceContext = config.getResourceContext(request.getUri());
            return resourceContext.getRequestContext(request);
        }
    }

    /**
     * This is a temporary solution.
     * TODO remove when "real" class is implemented
     */
    private static class DefaultRequestLifecycle implements RequestLifecycle {

        private static final Logger LOGGER = LoggerFactory.getLogger("getrest.service");

        private RequestContext requestContext;

        public void setRequestContext(final RequestContext requestContext) {
            this.requestContext = requestContext;
        }

        public void beforeMarshal() {
            LOGGER.trace("before marshal");
        }

        public void afterMarshal() {
            LOGGER.trace("after marshal");
        }

        public void beforeUnmarshal() {
            LOGGER.trace("before unmarshal");
        }

        public void afterUnmarshal() {
            LOGGER.trace("after unmarshal");
        }

    }

}




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