Search in sources :

Example 1 with RepositoryInformation

use of io.crnk.core.engine.information.repository.RepositoryInformation in project crnk-framework by crnk-project.

the class DefaultRegistryEntryBuilder method findRelationshipMatch.

private ResponseRelationshipEntry findRelationshipMatch(ResourceField relationshipField) {
    Collection<Object> repositories = moduleRegistry.getRepositories();
    RepositoryInformationProvider repositoryInformationBuilder = moduleRegistry.getRepositoryInformationBuilder();
    ResponseRelationshipEntry matchedEntry = null;
    for (Object repository : repositories) {
        RepositoryInformation repositoryInformation = repositoryInformationBuilder.build(repository, new DefaultRepositoryInformationProviderContext(moduleRegistry));
        if (repositoryInformation instanceof RelationshipRepositoryInformation) {
            RelationshipRepositoryInformation relationshipRepositoryInformation = (RelationshipRepositoryInformation) repositoryInformation;
            RelationshipMatcher matcher = relationshipRepositoryInformation.getMatcher();
            if (matcher.matches(relationshipField)) {
                if (matchedEntry != null) {
                    throw new IllegalStateException("multiple repositories for " + relationshipField + ": " + repository + ", " + matchedEntry);
                }
                matcher.matches(relationshipField);
                matchedEntry = setupRelationship(relationshipField, relationshipRepositoryInformation, repository);
            }
        }
    }
    return matchedEntry;
}
Also used : RelationshipRepositoryInformation(io.crnk.core.engine.information.repository.RelationshipRepositoryInformation) ResponseRelationshipEntry(io.crnk.core.engine.registry.ResponseRelationshipEntry) DirectResponseRelationshipEntry(io.crnk.legacy.internal.DirectResponseRelationshipEntry) DefaultRepositoryInformationProviderContext(io.crnk.core.module.internal.DefaultRepositoryInformationProviderContext) RepositoryInformationProvider(io.crnk.core.engine.information.repository.RepositoryInformationProvider) RelationshipMatcher(io.crnk.core.repository.RelationshipMatcher) ResourceRepositoryInformation(io.crnk.core.engine.information.repository.ResourceRepositoryInformation) RepositoryInformation(io.crnk.core.engine.information.repository.RepositoryInformation) RelationshipRepositoryInformation(io.crnk.core.engine.information.repository.RelationshipRepositoryInformation)

Example 2 with RepositoryInformation

use of io.crnk.core.engine.information.repository.RepositoryInformation 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

RepositoryInformation (io.crnk.core.engine.information.repository.RepositoryInformation)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 HttpRequestProcessor (io.crnk.core.engine.http.HttpRequestProcessor)1 RelationshipRepositoryInformation (io.crnk.core.engine.information.repository.RelationshipRepositoryInformation)1 RepositoryInformationProvider (io.crnk.core.engine.information.repository.RepositoryInformationProvider)1 ResourceRepositoryInformation (io.crnk.core.engine.information.repository.ResourceRepositoryInformation)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 ResponseRelationshipEntry (io.crnk.core.engine.registry.ResponseRelationshipEntry)1 Module (io.crnk.core.module.Module)1 ModuleExtensionAware (io.crnk.core.module.ModuleExtensionAware)1