/** * Take an {@link Employee} and get the URI using Spring Data REST's {@link EntityLinks}. * * @param employee */ private String getPath(Employee employee) { return this.entityLinks.linkForSingleResource(employee.getClass(), employee.getId()).toUri().getPath(); }
/** * Take an {@link Employee} and get the URI using Spring Data REST's {@link EntityLinks}. * * @param employee */ private String getPath(Employee employee) { return this.entityLinks.linkForSingleResource(employee.getClass(), employee.getId()).toUri().getPath(); }
/** * Renders the given {@link Receipt} including links to the associated {@link Order} as well as a self link in case * the {@link Receipt} is still available. * * @param receipt * @return */ private HttpEntity<Resource<Receipt>> createReceiptResponse(Receipt receipt) { Order order = receipt.getOrder(); Resource<Receipt> resource = new Resource<>(receipt); resource.add(entityLinks.linkToSingleResource(order)); if (!order.isTaken()) { resource.add(entityLinks.linkForSingleResource(order).slash("receipt").withSelfRel()); } return ResponseEntity.ok(resource); }
@Override public LinkBuilder linkFor(Class<?> type) { return getPluginFor(type).linkFor(type); }
/** * Return a {@link ResourceSupport} object containing the resources * served by the admin server. * * @return {@code ResourceSupport} object containing the admin server's resources */ @RequestMapping("/") public ResourceSupport info() { ResourceSupport resourceSupport = new ResourceSupport(); resourceSupport.add(entityLinks.linkToCollectionResource(StreamDefinitionResource.class).withRel("streams/definitions")); resourceSupport.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamDefinitionResource.class, "{name}").withRel("streams/definitions/definition"))); resourceSupport.add(entityLinks.linkToCollectionResource(StreamDeploymentResource.class).withRel("streams/deployments")); resourceSupport.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamDeploymentResource.class, "{name}").withRel("streams/deployments/deployment"))); resourceSupport.add(entityLinks.linkToCollectionResource(TaskDefinitionResource.class).withRel("tasks")); resourceSupport.add(entityLinks.linkToCollectionResource(CounterResource.class).withRel("counters")); resourceSupport.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(CounterResource.class, "{name}").withRel("counters/counter"))); resourceSupport.add(entityLinks.linkToCollectionResource(ModuleRegistrationResource.class).withRel("modules")); resourceSupport.add(entityLinks.linkToCollectionResource(LibraryRegistrationResource.class).withRel("libraries")); resourceSupport.add(entityLinks.linkToCollectionResource(ModuleStatusResource.class).withRel("runtime/modules")); resourceSupport.add(unescapeTemplateVariables(entityLinks.linkForSingleResource(ModuleStatusResource.class, "{moduleId}").withRel("runtime/module"))); resourceSupport.add(unescapeTemplateVariables(entityLinks.linkFor(ModuleInstanceStatusResource.class, UriComponents.UriTemplateVariables.SKIP_VALUE).withRel("runtime/modules/instances"))); String templated = entityLinks.linkFor(CompletionProposalsResource.class).withSelfRel().getHref() + ("/stream{?start,detailLevel}"); resourceSupport.add(new Link(templated).withRel("completions/stream")); return resourceSupport; }
root.add(entityLinks.linkToCollectionResource(StreamDefinitionResource.class) .withRel("streams/definitions")); root.add( unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamDefinitionResource.class, "{name}") .withRel("streams/definitions/definition"))); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamAppStatusResource.class, "{name}") .withRel("streams/validation"))); unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamDeploymentResource.class, "{name}") .withRel("streams/deployments/deployment"))); root.add(entityLinks.linkToCollectionResource(LauncherResource.class).withRel("tasks/platforms")); root.add(entityLinks.linkToCollectionResource(TaskDefinitionResource.class).withRel("tasks/definitions")); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(TaskDefinitionResource.class, "{name}") .withRel("tasks/definitions/definition"))); root.add(entityLinks.linkToCollectionResource(TaskExecutionResource.class).withRel("tasks/executions")); String taskTemplated = entityLinks.linkToCollectionResource(TaskExecutionResource.class).getHref() + "{?name}"; root.add(new Link(taskTemplated).withRel("tasks/executions/name")); root.add(ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(TaskExecutionController.class) .getCurrentTaskExecutionsInfo()).withRel("tasks/executions/current")); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(TaskExecutionResource.class, "{id}") .withRel("tasks/executions/execution"))); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(TaskAppStatusResource.class, "{name}") .withRel("tasks/validation"))); root.add(entityLinks.linkToCollectionResource(ScheduleInfoResource.class).withRel("tasks/schedules")); String scheduleTemplated = entityLinks.linkToCollectionResource(ScheduleInfoResource.class).getHref() + "/instances/{taskDefinitionName}";
@Override public Link linkToSingleResource(Class<?> type, Object id) { return getPluginFor(type).linkToSingleResource(type, id); }
@Override public Link linkToCollectionResource(Class<?> type) { return getPluginFor(type).linkToCollectionResource(type); }
root.add(entityLinks.linkToCollectionResource(StreamDefinitionResource.class) .withRel("streams/definitions")); root.add( unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamDefinitionResource.class, "{name}") .withRel("streams/definitions/definition"))); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamAppStatusResource.class, "{name}") .withRel("streams/validation"))); root.add(entityLinks.linkToCollectionResource(AppStatusResource.class).withRel("runtime/apps")); root.add(unescapeTemplateVariables( entityLinks.linkForSingleResource(AppStatusResource.class, "{appId}").withRel("runtime/apps/app"))); root.add(unescapeTemplateVariables( entityLinks.linkFor(AppInstanceStatusResource.class, "{appId}") .withRel("runtime/apps/instances"))); root.add(ControllerLinkBuilder.linkTo(MetricsController.class).withRel("metrics/streams")); unescapeTemplateVariables(entityLinks.linkToSingleResource(StreamDeploymentResource.class, "{name}") .withRel("streams/deployments/deployment"))); root.add(entityLinks.linkToCollectionResource(TaskDefinitionResource.class).withRel("tasks/definitions")); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(TaskDefinitionResource.class, "{name}") .withRel("tasks/definitions/definition"))); root.add(entityLinks.linkToCollectionResource(TaskExecutionResource.class).withRel("tasks/executions")); String taskTemplated = entityLinks.linkToCollectionResource(TaskExecutionResource.class).getHref() + "{?name}"; root.add(new Link(taskTemplated).withRel("tasks/executions/name")); root.add(ControllerLinkBuilder.linkTo(ControllerLinkBuilder.methodOn(TaskExecutionController.class) .getCurrentTaskExecutionsInfo()).withRel("tasks/executions/current")); root.add(unescapeTemplateVariables(entityLinks.linkToSingleResource(TaskExecutionResource.class, "{id}") .withRel("tasks/executions/execution")));
public Link createSelfLinkFor(Object instance) { Assert.notNull(instance, "Domain object must not be null!"); return entityLinks.linkToSingleResource(instance.getClass(), getResourceId(instance)); }
/** * Lists all repositories exported by creating a link list pointing to resources exposing the repositories. * * @return */ @RequestMapping(value = { "/", "" }, method = RequestMethod.GET) public HttpEntity<RepositoryLinksResource> listRepositories() { RepositoryLinksResource resource = new RepositoryLinksResource(); for (Class<?> domainType : repositories) { ResourceMetadata metadata = mappings.getMetadataFor(domainType); if (metadata.isExported()) { resource.add(entityLinks.linkToCollectionResource(domainType)); } } return new ResponseEntity<RepositoryLinksResource>(resource, HttpStatus.OK); } }
/** * Accepts a payment for an {@link Order} * * @param order the {@link Order} to process the payment for. Retrieved from the path variable and converted into an * {@link Order} instance by Spring Data's {@link DomainClassConverter}. Will be {@literal null} in case no * {@link Order} with the given id could be found. * @param number the {@link CreditCardNumber} unmarshaled from the request payload. * @return */ @RequestMapping(path = PaymentLinks.PAYMENT, method = PUT) ResponseEntity<?> submitPayment(@PathVariable("id") Order order, @RequestBody CreditCardNumber number) { if (order == null || order.isPaid()) { return ResponseEntity.notFound().build(); } CreditCardPayment payment = paymentService.pay(order, number); PaymentResource resource = new PaymentResource(order.getPrice(), payment.getCreditCard()); resource.add(entityLinks.linkToSingleResource(order)); return new ResponseEntity<>(resource, HttpStatus.CREATED); }
/** * Creates the {@link Descriptor}s for pagination parameters. * * @param type * @return */ private List<Descriptor> getPaginationDescriptors(Class<?> type, HttpMethod method) { RepositoryInformation information = repositories.getRequiredRepositoryInformation(type); if (!information.isPagingRepository() || !getType(method).equals(Type.SAFE)) { return Collections.emptyList(); } Link linkToCollectionResource = entityLinks.linkToCollectionResource(type); List<TemplateVariable> variables = linkToCollectionResource.getVariables(); List<Descriptor> descriptors = new ArrayList<Descriptor>(variables.size()); ProjectionDefinitionConfiguration projectionConfiguration = configuration.getProjectionConfiguration(); for (TemplateVariable variable : variables) { // Skip projection parameter if (projectionConfiguration.getParameterName().equals(variable.getName())) { continue; } ResourceDescription description = SimpleResourceDescription.defaultFor(variable.getDescription()); descriptors.add(// descriptor().// name(variable.getName()).// type(Type.SEMANTIC).// doc(getDocFor(description)).// build()); } return descriptors; }
@Override public LinkBuilder linkFor(Class<?> type, Object... parameters) { return getPluginFor(type).linkFor(type, parameters); }
/** * Returns the {@link Link} to point to the {@link Payment} for the given {@link Order}. * * @param order must not be {@literal null}. * @return */ Link getPaymentLink(Order order) { return entityLinks.linkForSingleResource(order).slash(PAYMENT).withRel(PAYMENT_REL); }
@Override public Link linkToSingleResource(Class<?> type, Object id) { return getPluginFor(type).linkToSingleResource(type, id); }
@Override public Link linkToCollectionResource(Class<?> type) { return getPluginFor(type).linkToCollectionResource(type); }
@Override public LinkBuilder linkFor(Class<?> type) { return getPluginFor(type).linkFor(type); }
/** * Returns the {@link Link} to the {@link Receipt} of the given {@link Order}. * * @param order * @return */ Link getReceiptLink(Order order) { return entityLinks.linkForSingleResource(order).slash(RECEIPT).withRel(RECEIPT_REL); } }
@Override public OrderResource toResource(Order order) { OrderResource resource = new OrderResource(order); final Link selfLink = entityLinks.linkToSingleResource(order); resource.add(selfLink.withSelfRel()); resource.add(selfLink.withRel(UPDATE_REL)); resource.add(selfLink.withRel(DELETE_REL)); return resource; } }