From 29ba7bd890f0285e35745eda06453a015d77feb1 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Fri, 17 Aug 2018 11:13:50 -0400 Subject: [PATCH] SHIBUI-754: reorder filters work in progress --- ...etadataFiltersPositionOrderController.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java 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 new file mode 100644 index 000000000..71af40f95 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java @@ -0,0 +1,66 @@ +package edu.internet2.tier.shibboleth.admin.ui.controller; + +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; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.toList; + +/** + * @author Dmitriy Kopylenko + */ +@RestController +@RequestMapping("/api/MetadataResolvers/{metadataResolverId}/FiltersPositionOrder") +public class MetadataFiltersPositionOrderController { + + @Autowired + MetadataResolverRepository metadataResolverRepository; + + @PostMapping + @Transactional + public ResponseEntity updateFiltersPositionOrder(@PathVariable String metadataResolverId, + @RequestBody List filtersResourceIds) { + + MetadataResolver resolver = metadataResolverRepository.findByResourceId(metadataResolverId); + List currentFilters = resolver.getMetadataFilters(); + List reOrderedFilters = new ArrayList<>(); + + filtersResourceIds.forEach(it -> + currentFilters.stream() + .filter(f -> f.getResourceId().equals(it)) + .findFirst() + .ifPresent(reOrderedFilters::add) + ); + + resolver.setMetadataFilters(reOrderedFilters); + metadataResolverRepository.save(resolver); + + return ResponseEntity.noContent().build(); + } + + @GetMapping + @Transactional(readOnly = true) + public ResponseEntity getFiltersPositionOrder(@PathVariable String metadataResolverId) { + MetadataResolver resolver = metadataResolverRepository.findByResourceId(metadataResolverId); + List resourceIds = resolver.getMetadataFilters().stream() + .map(MetadataFilter::getResourceId) + .collect(toList()); + + return ResponseEntity.ok(resourceIds); + } +}