@Override public void deleteRepository(String name) { ParameterizedTypeReference<Resource<Repository>> typeReference = new ParameterizedTypeReference<Resource<Repository>>() { }; Traverson.TraversalBuilder traversalBuilder = this.traverson.follow("repositories", "search", "findByName"); Map<String, Object> parameters = new HashMap<>(); parameters.put("name", name); Resource<Repository> repositoryResource = traversalBuilder.withTemplateParameters(parameters) .toObject(typeReference); if (repositoryResource != null) { this.restTemplate.delete(repositoryResource.getId().getHref()); } else { throw new IllegalStateException("The Repository with the " + name + " doesn't exist."); } }
@Override public void deleteRepository(String name) { ParameterizedTypeReference<Resource<Repository>> typeReference = new ParameterizedTypeReference<Resource<Repository>>() { }; Traverson.TraversalBuilder traversalBuilder = this.traverson.follow("repositories", "search", "findByName"); Map<String, Object> parameters = new HashMap<>(); parameters.put("name", name); Resource<Repository> repositoryResource = traversalBuilder.withTemplateParameters(parameters) .toObject(typeReference); if (repositoryResource != null) { this.restTemplate.delete(repositoryResource.getId().getHref()); } else { throw new IllegalStateException("The Repository with the " + name + " doesn't exist."); } }
@PutMapping("/employees/{id}") ResponseEntity<?> updateEmployee(@RequestBody Employee employee, @PathVariable long id) { Employee employeeToUpdate = employee; employeeToUpdate.setId(id); Employee updatedEmployee = repository.save(employeeToUpdate); return new Resource<>(updatedEmployee, linkTo(methodOn(EmployeeController.class).findOne(updatedEmployee.getId())).withSelfRel() .andAffordance(afford(methodOn(EmployeeController.class).updateEmployee(null, updatedEmployee.getId()))) .andAffordance(afford(methodOn(EmployeeController.class).deleteEmployee(updatedEmployee.getId()))), linkTo(methodOn(EmployeeController.class).findAll()).withRel("employees") ).getId() .map(Link::getHref) .map(href -> { try { return new URI(href); } catch (URISyntaxException e) { throw new RuntimeException(e); } }) .map(uri -> ResponseEntity.noContent().location(uri).build()) .orElse(ResponseEntity.badRequest().body("Unable to update " + employeeToUpdate)); }
@PostMapping("/employees") ResponseEntity<?> newEmployee(@RequestBody Employee employee) { Employee savedEmployee = repository.save(employee); return new Resource<>(savedEmployee, linkTo(methodOn(EmployeeController.class).findOne(savedEmployee.getId())).withSelfRel() .andAffordance(afford(methodOn(EmployeeController.class).updateEmployee(null, savedEmployee.getId()))) .andAffordance(afford(methodOn(EmployeeController.class).deleteEmployee(savedEmployee.getId()))), linkTo(methodOn(EmployeeController.class).findAll()).withRel("employees") ).getId() .map(Link::getHref) .map(href -> { try { return new URI(href); } catch (URISyntaxException e) { throw new RuntimeException(e); } }) .map(uri -> ResponseEntity.noContent().location(uri).build()) .orElse(ResponseEntity.badRequest().body("Unable to create " + employee)); }