Search in sources :

Example 1 with HttpRequestProcessor

use of io.crnk.core.engine.http.HttpRequestProcessor in project crnk-framework by crnk-project.

the class HttpRequestProcessorImpl method process.

@Override
public void process(HttpRequestContextBase requestContextBase) throws IOException {
    HttpRequestContextBaseAdapter requestContext = new HttpRequestContextBaseAdapter(requestContextBase);
    HttpRequestContextProvider httpRequestContextProvider = moduleRegistry.getHttpRequestContextProvider();
    try {
        httpRequestContextProvider.onRequestStarted(requestContext);
        List<HttpRequestProcessor> processors = moduleRegistry.getHttpRequestProcessors();
        PreconditionUtil.assertFalse("no processors available", processors.isEmpty());
        for (HttpRequestProcessor processor : processors) {
            processor.process(requestContext);
            if (requestContext.hasResponse()) {
                break;
            }
        }
    } finally {
        httpRequestContextProvider.onRequestFinished();
    }
}
Also used : HttpRequestProcessor(io.crnk.core.engine.http.HttpRequestProcessor) HttpRequestContextProvider(io.crnk.core.engine.http.HttpRequestContextProvider)

Example 2 with HttpRequestProcessor

use of io.crnk.core.engine.http.HttpRequestProcessor in project crnk-framework by crnk-project.

the class HomeModule method setupModule.

@Override
public void setupModule(final ModuleContext context) {
    this.moduleContext = context;
    context.addHttpRequestProcessor(new HttpRequestProcessor() {

        @Override
        public void process(HttpRequestContext requestContext) throws IOException {
            if (isHomeRequest(requestContext)) {
                Set<String> pathSet = new HashSet<>();
                ResourceRegistry resourceRegistry = context.getResourceRegistry();
                for (RegistryEntry resourceEntry : resourceRegistry.getResources()) {
                    RepositoryInformation repositoryInformation = resourceEntry.getRepositoryInformation();
                    if (repositoryInformation != null && context.getResourceFilterDirectory().get(resourceEntry.getResourceInformation(), HttpMethod.GET) == FilterBehavior.NONE) {
                        ResourceInformation resourceInformation = resourceEntry.getResourceInformation();
                        String resourceType = resourceInformation.getResourceType();
                        pathSet.add("/" + resourceType);
                    }
                }
                if (extensions != null) {
                    for (HomeModuleExtension extension : extensions) {
                        pathSet.addAll(extension.getPaths());
                    }
                }
                String requestPath = requestContext.getPath();
                pathSet = pathSet.stream().map(it -> getChildName(requestPath, it)).filter(it -> it != null).collect(Collectors.toSet());
                List<String> pathList = new ArrayList<>(pathSet);
                Collections.sort(pathList);
                if (defaultFormat == HomeFormat.JSON_HOME || requestContext.accepts(JSON_HOME_CONTENT_TYPE)) {
                    boolean acceptsHome = requestContext.accepts(JSON_HOME_CONTENT_TYPE);
                    if (acceptsHome) {
                        requestContext.setContentType(JSON_HOME_CONTENT_TYPE);
                    } else {
                        requestContext.setContentType(JSON_CONTENT_TYPE);
                    }
                    writeJsonHome(requestContext, pathList);
                } else {
                    boolean jsonapi = requestContext.accepts(HttpHeaders.JSONAPI_CONTENT_TYPE);
                    if (jsonapi) {
                        requestContext.setContentType(HttpHeaders.JSONAPI_CONTENT_TYPE);
                    } else {
                        requestContext.setContentType(JSON_CONTENT_TYPE);
                    }
                    writeJsonApi(requestContext, pathList);
                }
            }
        }

        private String getChildName(String requestPath, String it) {
            if (it.startsWith(requestPath)) {
                String subPath = UrlUtils.removeTrailingSlash(it.substring(requestPath.length()));
                int sep = subPath.indexOf('/');
                return sep == -1 ? subPath : subPath.substring(0, sep) + "/";
            }
            return null;
        }
    });
}
Also used : HttpRequestProcessor(io.crnk.core.engine.http.HttpRequestProcessor) ResourceRegistry(io.crnk.core.engine.registry.ResourceRegistry) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Set(java.util.Set) RepositoryInformation(io.crnk.core.engine.information.repository.RepositoryInformation) JsonPath(io.crnk.core.engine.internal.dispatcher.path.JsonPath) IOException(java.io.IOException) HttpMethod(io.crnk.core.engine.http.HttpMethod) HttpRequestContext(io.crnk.core.engine.http.HttpRequestContext) Collectors(java.util.stream.Collectors) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) PathBuilder(io.crnk.core.engine.internal.dispatcher.path.PathBuilder) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) List(java.util.List) ResourceInformation(io.crnk.core.engine.information.resource.ResourceInformation) RegistryEntry(io.crnk.core.engine.registry.RegistryEntry) HttpHeaders(io.crnk.core.engine.http.HttpHeaders) UrlUtils(io.crnk.core.engine.internal.utils.UrlUtils) Module(io.crnk.core.module.Module) FilterBehavior(io.crnk.core.engine.filter.FilterBehavior) ModuleExtensionAware(io.crnk.core.module.ModuleExtensionAware) Collections(java.util.Collections) ResourceInformation(io.crnk.core.engine.information.resource.ResourceInformation) Set(java.util.Set) HashSet(java.util.HashSet) HttpRequestProcessor(io.crnk.core.engine.http.HttpRequestProcessor) IOException(java.io.IOException) ResourceRegistry(io.crnk.core.engine.registry.ResourceRegistry) RegistryEntry(io.crnk.core.engine.registry.RegistryEntry) RepositoryInformation(io.crnk.core.engine.information.repository.RepositoryInformation) HttpRequestContext(io.crnk.core.engine.http.HttpRequestContext) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

HttpRequestProcessor (io.crnk.core.engine.http.HttpRequestProcessor)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 FilterBehavior (io.crnk.core.engine.filter.FilterBehavior)1 HttpHeaders (io.crnk.core.engine.http.HttpHeaders)1 HttpMethod (io.crnk.core.engine.http.HttpMethod)1 HttpRequestContext (io.crnk.core.engine.http.HttpRequestContext)1 HttpRequestContextProvider (io.crnk.core.engine.http.HttpRequestContextProvider)1 RepositoryInformation (io.crnk.core.engine.information.repository.RepositoryInformation)1 ResourceInformation (io.crnk.core.engine.information.resource.ResourceInformation)1 JsonPath (io.crnk.core.engine.internal.dispatcher.path.JsonPath)1 PathBuilder (io.crnk.core.engine.internal.dispatcher.path.PathBuilder)1 UrlUtils (io.crnk.core.engine.internal.utils.UrlUtils)1 RegistryEntry (io.crnk.core.engine.registry.RegistryEntry)1 ResourceRegistry (io.crnk.core.engine.registry.ResourceRegistry)1 Module (io.crnk.core.module.Module)1 ModuleExtensionAware (io.crnk.core.module.ModuleExtensionAware)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1