diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java index 2ec5f01ab..2b4cceb2c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java @@ -48,6 +48,7 @@ public class MetadataFiltersController { private static final Supplier HTTP_404_CLIENT_ERROR_EXCEPTION = () -> new HttpClientErrorException(NOT_FOUND); + //TODO: refactor to use RestControllerSupport class @ExceptionHandler public ResponseEntity notFoundHandler(HttpClientErrorException ex) { if(ex.getStatusCode() == NOT_FOUND) { @@ -100,6 +101,7 @@ public ResponseEntity update(@PathVariable String metadataResolverId, // check to make sure that the relationship exists if (!metadataResolver.getMetadataFilters().contains(filterTobeUpdated)) { // TODO: find a better response + // TODO: refactor to use RestControllerSupport class return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } @@ -143,6 +145,7 @@ public ResponseEntity delete(@PathVariable String metadataResolverId, return ResponseEntity.noContent().build(); } + //TODO: refactor to use RestControllerSupport class private MetadataResolver findResolverOrThrowHttp404(String resolverResourceId) { MetadataResolver resolver = repository.findByResourceId(resolverResourceId); if(resolver == null) { diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java index 2763eae89..bc3ccbffd 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java @@ -1,5 +1,6 @@ package edu.internet2.tier.shibboleth.admin.ui.controller; +import edu.internet2.tier.shibboleth.admin.ui.controller.support.RestControllersSupport; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.ArrayList; import java.util.Arrays; @@ -31,12 +33,15 @@ public class MetadataFiltersPositionOrderController { @Autowired MetadataResolverRepository metadataResolverRepository; + @Autowired + RestControllersSupport restControllersSupport; + @PostMapping @Transactional public ResponseEntity updateFiltersPositionOrder(@PathVariable String metadataResolverId, @RequestBody List filtersResourceIds) { - MetadataResolver resolver = metadataResolverRepository.findByResourceId(metadataResolverId); + MetadataResolver resolver = restControllersSupport.findResolverOrThrowHttp404(metadataResolverId); List currentFilters = resolver.getMetadataFilters(); List reOrderedFilters = new ArrayList<>(); @@ -60,7 +65,7 @@ public ResponseEntity updateFiltersPositionOrder(@PathVariable String metadat @GetMapping @Transactional(readOnly = true) public ResponseEntity getFiltersPositionOrder(@PathVariable String metadataResolverId) { - MetadataResolver resolver = metadataResolverRepository.findByResourceId(metadataResolverId); + MetadataResolver resolver = restControllersSupport.findResolverOrThrowHttp404(metadataResolverId); List resourceIds = resolver.getMetadataFilters().stream() .map(MetadataFilter::getResourceId) .collect(toList()); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java new file mode 100644 index 000000000..764ad58a0 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java @@ -0,0 +1,40 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller.support; + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; +import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.client.HttpClientErrorException; + +import static org.springframework.http.HttpStatus.NOT_FOUND; + +/** + * Common functionality for REST controllers. + * + * @author Dmitriy Kopylenko + */ +@RestControllerAdvice +public class RestControllersSupport { + + @Autowired + MetadataResolverRepository resolverRepository; + + public MetadataResolver findResolverOrThrowHttp404(String resolverResourceId) { + MetadataResolver resolver = resolverRepository.findByResourceId(resolverResourceId); + if(resolver == null) { + throw new HttpClientErrorException(NOT_FOUND, "Metadata resolver is not found"); + } + return resolver; + } + + + @ExceptionHandler + public ResponseEntity notFoundHandler(HttpClientErrorException ex) { + if(ex.getStatusCode() == NOT_FOUND) { + return ResponseEntity.status(NOT_FOUND).body(ex.getStatusText()); + } + throw ex; + } +}