use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class RelationshipsResourcePatchTest method onValidRequestShouldAcceptIt.
@Test
public void onValidRequestShouldAcceptIt() {
// GIVEN
JsonPath jsonPath = pathBuilder.build("tasks/1/relationships/project");
ResourceRegistry resourceRegistry = mock(ResourceRegistry.class);
RelationshipsResourcePatch sut = new RelationshipsResourcePatch(resourceRegistry, typeParser, modificationFilters);
// WHEN
boolean result = sut.isAcceptable(jsonPath, REQUEST_TYPE);
// THEN
assertThat(result).isTrue();
}
use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class ResourcePostTest method toQueryAdapter.
private QueryAdapter toQueryAdapter(QueryParams requestParams, Class resourceType) {
ResourceRegistry resourceRegistry = moduleRegistry.getResourceRegistry();
RegistryEntry entry = resourceRegistry.getEntry(resourceType);
ResourceInformation resourceInformation = entry.getResourceInformation();
return new QueryParamsAdapter(resourceInformation, requestParams, moduleRegistry);
}
use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class ResourceFieldContributorTest method checkFieldAddedToResourceInformation.
@Test
public void checkFieldAddedToResourceInformation() {
ResourceRegistry resourceRegistry = boot.getResourceRegistry();
RegistryEntry entry = resourceRegistry.getEntry(Task.class);
ResourceInformation resourceInformation = entry.getResourceInformation();
ResourceField contributedField = resourceInformation.findFieldByName("contributedProject");
Assert.assertNotNull(contributedField);
Assert.assertEquals("projects", contributedField.getOppositeResourceType());
Assert.assertEquals(SerializeType.LAZY, contributedField.getSerializeType());
}
use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class ResourceMetaParitition method computeId.
private String computeId(MetaType element) {
Type implementationType = element.getImplementationType();
Class<?> rawType = ClassUtils.getRawType(implementationType);
Class<?> enclosingClass = rawType.getEnclosingClass();
boolean isLinks = LinksInformation.class.isAssignableFrom(rawType);
boolean isMeta = MetaInformation.class.isAssignableFrom(rawType);
ResourceRegistry resourceRegistry = context.getModuleContext().getResourceRegistry();
if (enclosingClass != null && (isLinks || isMeta)) {
RegistryEntry entry = resourceRegistry.getEntry(enclosingClass);
if (entry != null) {
String id = getId(entry.getResourceInformation().getResourceType());
if (isMeta) {
return id + "$meta";
} else {
return id + "$links";
}
}
}
if (!element.hasId()) {
PreconditionUtil.assertNotNull("must have package", rawType.getPackage());
String packageName = rawType.getPackage().getName();
String closedPackageName = null;
String closedResourceType = null;
for (RegistryEntry entry : resourceRegistry.getResources()) {
ResourceInformation resourceInformation = entry.getResourceInformation();
Class<?> resourceClass = resourceInformation.getResourceClass();
String resourcePackageName = resourceClass.getPackage().getName();
if (packageName.startsWith(resourcePackageName) && (closedPackageName == null || closedPackageName.length() < resourcePackageName.length())) {
closedPackageName = resourcePackageName;
closedResourceType = resourceInformation.getResourceType();
}
Object resourceRepository = entry.getResourceRepository().getResourceRepository();
resourcePackageName = resourceRepository.getClass().getPackage().getName();
if (packageName.startsWith(resourcePackageName) && (closedPackageName == null || closedPackageName.length() < resourcePackageName.length())) {
closedPackageName = resourcePackageName;
closedResourceType = resourceInformation.getResourceType();
}
}
if (closedResourceType != null) {
String resourceId = getId(closedResourceType);
String basePath = resourceId.substring(0, resourceId.lastIndexOf('.'));
String relativePath = packageName.substring(closedPackageName.length());
return basePath + relativePath + "." + element.getName().toLowerCase();
}
}
return idProvider.computeIdPrefixFromPackage(rawType, element) + element.getName().toLowerCase();
}
use of io.crnk.core.engine.registry.ResourceRegistry in project crnk-framework by crnk-project.
the class ResourceMetaParitition method discoverResource.
private MetaResource discoverResource(ResourceInformation information) {
String id = getId(information.getResourceType());
// check if already done (as super types get setup recursively)
Optional<MetaElement> existingElement = context.getMetaElement(id);
if (existingElement.isPresent()) {
return (MetaResource) existingElement.get();
}
String superResourceType = information.getSuperResourceType();
MetaResource superMeta = null;
ResourceInformation superInformation = null;
if (superResourceType != null) {
superInformation = context.getModuleContext().getResourceRegistry().getEntry(superResourceType).getResourceInformation();
superMeta = discoverResource(superInformation);
}
String resourceType = information.getResourceType();
MetaResource resource = new MetaResource();
resource.setId(id);
resource.setElementType(resource);
resource.setImplementationType(information.getResourceClass());
resource.setName(getName(information));
resource.setResourceType(resourceType);
if (superMeta != null) {
resource.setSuperType(superMeta);
if (superMeta != null) {
superMeta.addSubType(resource);
}
}
ResourceRegistry resourceRegistry = context.getModuleContext().getResourceRegistry();
RegistryEntry entry = resourceRegistry.getEntry(information.getResourceType());
if (entry != null) {
boolean readOnlyImpl = entry.getResourceRepository().getResourceRepository() instanceof ReadOnlyResourceRepositoryBase;
resource.setUpdatable(resource.isUpdatable() && !readOnlyImpl);
resource.setInsertable(resource.isInsertable() && !readOnlyImpl);
resource.setDeletable(resource.isDeletable() && !readOnlyImpl);
}
List<ResourceField> fields = information.getFields();
for (ResourceField field : fields) {
if (superInformation == null || superInformation.findFieldByUnderlyingName(field.getUnderlyingName()) == null) {
// TODO check whether overriden and changed
addAttribute(resource, field);
}
}
Class<?> resourceClass = information.getResourceClass();
addElement(resourceClass, resource);
return resource;
}
Aggregations