use of io.crnk.meta.model.MetaElement in project crnk-framework by crnk-project.
the class MetaResourceRepositoryImpl method findOne.
@SuppressWarnings("unchecked")
@Override
public T findOne(String id, QuerySpec querySpec) {
MetaLookup lookup = lookupSupplier.get();
MetaElement metaElement = lookup.getMetaById().get(id);
Class<T> resourceClass = this.getResourceClass();
if (metaElement != null && resourceClass.isInstance(metaElement)) {
MetaElement wrappedElement = MetaUtils.adjustForRequest(lookup, metaElement);
if (wrappedElement != null) {
return (T) metaElement;
}
}
throw new ResourceNotFoundException(id);
}
use of io.crnk.meta.model.MetaElement in project crnk-framework by crnk-project.
the class MetaResourceRepositoryImpl method filterByType.
@SuppressWarnings("unchecked")
private Collection<T> filterByType(Collection<MetaElement> values) {
Collection<T> results = new ArrayList<>();
Class<T> resourceClass = this.getResourceClass();
MetaLookup lookup = lookupSupplier.get();
for (MetaElement element : values) {
if (resourceClass.isInstance(element)) {
MetaElement wrappedElement = MetaUtils.adjustForRequest(lookup, element);
if (wrappedElement != null) {
results.add((T) wrappedElement);
}
}
}
return results;
}
use of io.crnk.meta.model.MetaElement 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;
}
use of io.crnk.meta.model.MetaElement in project crnk-framework by crnk-project.
the class MetaRelationshipRepositoryImpl method findOneTarget.
@Override
public MetaElement findOneTarget(String sourceId, String fieldName, QuerySpec querySpec) {
MetaElement source = getSource(sourceId);
Object value = adjustForRequest(PropertyUtils.getProperty(source, fieldName));
return (MetaElement) value;
}
use of io.crnk.meta.model.MetaElement in project crnk-framework by crnk-project.
the class MetaRelationshipRepositoryImpl method findManyTargets.
@SuppressWarnings("unchecked")
@Override
public ResourceList<MetaElement> findManyTargets(String sourceId, String fieldName, QuerySpec querySpec) {
MetaElement source = getSource(sourceId);
Object value = adjustForRequest(PropertyUtils.getProperty(source, fieldName));
return querySpec.apply((Collection<MetaElement>) value);
}
Aggregations