@Override public ServiceDiscovery getInstance() { ServiceLoader<ServiceDiscovery> loader = ServiceLoader.load(ServiceDiscovery.class); Iterator<ServiceDiscovery> iterator = loader.iterator(); if (iterator.hasNext()) { ServiceDiscovery discovery = iterator.next(); PreconditionUtil.assertFalse("expected unique ServiceDiscovery implementation, got: " + loader, iterator.hasNext()); return discovery; } return null; } }
private Expression<?> getParentIdExpression(MetaAttribute parentAttr) { MetaEntity parentEntity = (MetaEntity) parentAttr.getParent(); MetaKey primaryKey = parentEntity.getPrimaryKey(); List<MetaAttribute> elements = primaryKey.getElements(); PreconditionUtil.assertFalse("composite primary keys not supported yet", elements.size() != 1); MetaAttribute primaryKeyAttr = elements.get(0); return parentFrom.get(primaryKeyAttr.getName()); }
private void initAccessors() { if (field == null || readMethod == null) { MetaDataObject parent = getParent(); Class<?> beanClass = parent.getImplementationClass(); String name = getName(); this.field = ClassUtils.findClassField(beanClass, name); this.readMethod = ClassUtils.findGetter(beanClass, name); PreconditionUtil.assertFalse("no getter or field found ", field == null && readMethod == null); Class<?> rawType = field != null ? field.getType() : readMethod.getReturnType(); writeMethod = ClassUtils.findSetter(beanClass, name, rawType); } }
protected JsonApiResponse getResponse(Object repository, Object result, RepositoryRequestSpec requestSpec) { if (result instanceof JsonApiResponse) { return (JsonApiResponse) result; } Iterable<?> resources; boolean isCollection = result instanceof Iterable; if (isCollection) { resources = (Iterable<?>) result; } else { resources = Collections.singletonList(result); } Iterable<?> filteredResult = filterResult(resources, requestSpec); MetaInformation metaInformation = getMetaInformation(repository, resources, requestSpec); LinksInformation linksInformation = getLinksInformation(repository, resources, requestSpec); Object resultEntity; if (isCollection) { resultEntity = filteredResult; } else { Iterator<?> iterator = filteredResult.iterator(); if (iterator.hasNext()) { resultEntity = iterator.next(); PreconditionUtil.assertFalse("expected unique result", iterator.hasNext()); } else { resultEntity = null; } } return new JsonApiResponse().setEntity(resultEntity).setLinksInformation(linksInformation).setMetaInformation(metaInformation); }
/** * Forwards to {@link #findAll(QuerySpec)} * * @param id * of the resource * @param querySpec * for field and relation inclusion * @return resource */ @Override public T findOne(I id, QuerySpec querySpec) { RegistryEntry entry = resourceRegistry.findEntry(resourceClass); String idName = entry.getResourceInformation().getIdField().getUnderlyingName(); QuerySpec idQuerySpec = querySpec.duplicate(); idQuerySpec.addFilter(new FilterSpec(Arrays.asList(idName), FilterOperator.EQ, id)); Iterable<T> iterable = findAll(idQuerySpec); Iterator<T> iterator = iterable.iterator(); if (iterator.hasNext()) { T resource = iterator.next(); PreconditionUtil.assertFalse("expected unique result", iterator.hasNext()); return resource; } else { throw new ResourceNotFoundException("resource not found"); } }
private void addAttribute(MetaResource resource, ResourceField field) { if (resource.getSuperType() != null && resource.getSuperType().hasAttribute(field.getUnderlyingName())) { return; // nothing to do } MetaResourceField attr = new MetaResourceField(); attr.setParent(resource, true); attr.setName(field.getUnderlyingName()); attr.setAssociation(field.getResourceFieldType() == ResourceFieldType.RELATIONSHIP); attr.setMeta(field.getResourceFieldType() == ResourceFieldType.META_INFORMATION); attr.setLinks(field.getResourceFieldType() == ResourceFieldType.LINKS_INFORMATION); attr.setVersion(false); // TODO attr.setDerived(false); attr.setLazy(field.isLazy()); attr.setSortable(true); attr.setFilterable(true); PreconditionUtil.assertFalse(attr.getName(), !attr.isAssociation() && MetaElement.class.isAssignableFrom(field.getElementType())); // FIXME // field.getJsonName() // field.getLookupIncludeAutomatically() // field.getOppositeName() // field.getIncludeByDefault() }