Android Open Source - getrest Config






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  ww .j av  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.net.Uri;
import getrest.android.resource.ResourceContext;
import getrest.android.resource.ResourceContextImpl;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class Config {

    private ResourceNode root = new ResourceNode();

    {
        root.configure(new DefaultContributor(this));
    }

    private final Map<ResourcePath, ResourceContext> contextCache = new LinkedHashMap<ResourcePath, ResourceContext>() {
        @Override
        protected boolean removeEldestEntry(final Map.Entry<ResourcePath, ResourceContext> eldest) {
            return size() > getCacheSize();
        }
    };

    private final Map<String, ResourcePath> resourcePathCache = new LinkedHashMap<String, ResourcePath>() {
        @Override
        protected boolean removeEldestEntry(final Map.Entry<String, ResourcePath> eldest) {
            return size() > getCacheSize();
        }
    };

    private int getCacheSize() {
        // TODO work out cache size formula
        return 10;
    }

    /**
     * Configure resource settings. Resource settings takes precedence over global settings configured by
     * {@link #configure(ResourceContextContributor...)}
     *
     * @param uriPattern   resource url pattern
     * @param contributors configuration settings contributors
     * @return configuration object for further access
     */
    public Config configure(final String uriPattern, ResourceContextContributor... contributors) {
        final ResourceNode resourceNode = obtainConfigNode(uriPattern);
        resourceNode.configure(contributors);
        return this;
    }

    private ResourceNode obtainConfigNode(final String uriPattern) {
        final ArrayList<String> patternNodes = toUriNodes(uriPattern);

        ResourceNode currentNode = root;
        for (String patternNode : patternNodes) {
            final ResourceNode existingNode = root.findChild(patternNode);
            currentNode = existingNode != null ? existingNode : currentNode.addChild(patternNode);
        }

        return currentNode;
    }

    private ArrayList<String> toUriNodes(final String uriString) {
        final Uri uri = Uri.parse(uriString);
        return toUriNodes(uri);
    }

    private ArrayList<String> toUriNodes(final Uri uri) {
        final String scheme = uri.getScheme();
        final List<String> pathSegments = uri.getPathSegments();

        final ArrayList<String> patternNodes = new ArrayList<String>(pathSegments.size() + 2);
        patternNodes.add(scheme);
        patternNodes.add(uri.getAuthority());
        patternNodes.addAll(patternNodes);

        return patternNodes;
    }

    /**
     * Configure global settings.
     *
     * @param contributors configuration settings contributors
     * @return configuration object for further access
     */
    public Config configure(ResourceContextContributor... contributors) {
        root.configure(contributors);
        return this;
    }

    public ResourceContext getResourceContext(Uri uri) {
        final String key = toResourceKey(uri);

        ResourcePath resourcePath;
        if ((resourcePath = resourcePathCache.get(key)) == null) {
            synchronized (resourcePathCache) {
                if ((resourcePath = resourcePathCache.get(key)) == null) {
                    resourcePath = new ResourcePath();
                    final ArrayList<String> uriNodes = toUriNodes(uri);
                    final Iterator<String> iUriNodes = uriNodes.iterator();

                    ResourceNode currentNode = root;
                    do {
                        resourcePath.add(currentNode);
                    } while (iUriNodes.hasNext() && (currentNode = currentNode.matchChild(iUriNodes.next())) != null);

                    resourcePathCache.put(key, resourcePath);
                }
            }
        }

        return getResourceContext(resourcePath);
    }

    private ResourceContext getResourceContext(final ResourcePath resourcePath) {
        ResourceContext resourceContext;
        if ((resourceContext = contextCache.get(resourcePath)) == null) {
            synchronized (contextCache) {
                if ((resourceContext = contextCache.get(resourcePath)) == null) {
                    resourceContext = createResourceContext(resourcePath);
                    contextCache.put(resourcePath, resourceContext);
                }
            }
        }
        return resourceContext;
    }

    private ResourceContext createResourceContext(final ResourcePath resourcePath) {
        final ResourceContextImpl resourceContext = new ResourceContextImpl();
        for (ResourceNode resourceNode : resourcePath) {
            resourceNode.contribute(resourceContext);
        }
        return resourceContext;
    }

    private String toResourceKey(final Uri uri) {
        // TODO enhance key
        return new StringBuffer().append(uri.getScheme()).append("://").append(uri.getAuthority())
                .toString();
    }

}




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