use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class HomeModule method isHomeRequest.
private boolean isHomeRequest(HttpRequestContext requestContext) {
String path = requestContext.getPath();
if (!path.endsWith("/") || !requestContext.getMethod().equalsIgnoreCase(HttpMethod.GET.toString())) {
return false;
}
boolean acceptsHome = requestContext.accepts(JSON_HOME_CONTENT_TYPE);
boolean acceptsJsonApi = requestContext.accepts(HttpHeaders.JSONAPI_CONTENT_TYPE);
boolean acceptsJson = requestContext.accepts(HttpHeaders.JSON_CONTENT_TYPE);
boolean acceptsAny = requestContext.acceptsAny();
if (!(acceptsHome || acceptsAny || acceptsJson || acceptsJsonApi)) {
return false;
}
ResourceRegistry resourceRegistry = moduleContext.getResourceRegistry();
JsonPath jsonPath = new PathBuilder(resourceRegistry).build(path);
// no repository with that path
return jsonPath == null;
}
use of io.crnk.core.engine.registry.ResourceRegistry 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;
}
});
}
use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class MetaModuleTest method checkRegistryUpdateTriggerMetaUpdate.
@Test
public void checkRegistryUpdateTriggerMetaUpdate() {
MetaLookup lookup = metaModule.getLookup();
List<MetaResource> prevResources = lookup.findElements(MetaResource.class);
ResourceRegistry resourceRegistry = boot.getResourceRegistry();
resourceRegistry.addEntry(createRegistryEntry());
// check request local caching against concurrent modifications
Assert.assertEquals(prevResources.size(), metaModule.getLookup().findElements(MetaResource.class).size());
// check new meta available for next request
metaModule.getLookupRequestLocal().remove();
Assert.assertEquals(prevResources.size() + 1, metaModule.getLookup().findElements(MetaResource.class).size());
}
Aggregations