-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into SHIBUI-661
- Loading branch information
Showing
43 changed files
with
1,187 additions
and
197 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
83 changes: 83 additions & 0 deletions
83
...internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersPositionOrderController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,83 @@ | ||
| 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; | ||
| 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.Comparator; | ||
| import java.util.List; | ||
| 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; | ||
|
|
||
| @Autowired | ||
| RestControllersSupport restControllersSupport; | ||
|
|
||
| @PostMapping | ||
| @Transactional | ||
| public ResponseEntity<?> updateFiltersPositionOrder(@PathVariable String metadataResolverId, | ||
| @RequestBody List<String> filtersResourceIds) { | ||
|
|
||
| MetadataResolver resolver = restControllersSupport.findResolverOrThrowHttp404(metadataResolverId); | ||
| List<MetadataFilter> currentFilters = resolver.getMetadataFilters(); | ||
|
|
||
| //Check for bad data upfront. We could avoid this check and take wrong size and/or filter ids and blindly pass to sort below. | ||
| //In that case, the sort operation will silently NOT do anything and leave original filters order, | ||
| //but we will not be able to indicate to calling clients HTTP 400 in that case. | ||
| if ((filtersResourceIds.size() != currentFilters.size()) || | ||
| (!currentFilters.stream() | ||
| .map(MetadataFilter::getResourceId) | ||
| .collect(toList()) | ||
| .containsAll(filtersResourceIds))) { | ||
|
|
||
| return ResponseEntity | ||
| .badRequest() | ||
| .body("Number of filters to reorder or filters resource ids do not match current filters"); | ||
| } | ||
|
|
||
| //This is needed in order to set reference to persistent filters collection to be able to merge the persistent collection | ||
| //Otherwise if we manipulate the original collection directly and try to save, we'll get RDBMS constraint violation exception | ||
| List<MetadataFilter> reOrderedFilters = new ArrayList<>(currentFilters); | ||
|
|
||
| //Main re-ordering operation | ||
| reOrderedFilters.sort(Comparator.comparingInt(f -> filtersResourceIds.indexOf(f.getResourceId()))); | ||
|
|
||
| //re-set the reference and save to DB | ||
| resolver.setMetadataFilters(reOrderedFilters); | ||
| metadataResolverRepository.save(resolver); | ||
|
|
||
| return ResponseEntity.noContent().build(); | ||
| } | ||
|
|
||
| @GetMapping | ||
| @Transactional(readOnly = true) | ||
| public ResponseEntity<?> getFiltersPositionOrder(@PathVariable String metadataResolverId) { | ||
| MetadataResolver resolver = restControllersSupport.findResolverOrThrowHttp404(metadataResolverId); | ||
| List<String> resourceIds = resolver.getMetadataFilters().stream() | ||
| .map(MetadataFilter::getResourceId) | ||
| .collect(toList()); | ||
|
|
||
| return ResponseEntity.ok(resourceIds); | ||
| } | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
...ava/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| package edu.internet2.tier.shibboleth.admin.ui.controller.support; | ||
|
|
||
| import com.google.common.collect.ImmutableMap; | ||
| 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; | ||
| } | ||
| } |
19 changes: 19 additions & 0 deletions
19
backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/DirectoryService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| package edu.internet2.tier.shibboleth.admin.ui.service; | ||
|
|
||
| import org.apache.lucene.store.Directory; | ||
|
|
||
| import java.util.List; | ||
|
|
||
| /** | ||
| * API component responsible for entity ids search. | ||
| */ | ||
| public interface DirectoryService { | ||
| /** | ||
| * Return a Directory for a given resource id. If one is not found, it will be created. | ||
| * @param resourceId the resource to get the Directory for | ||
| * @return Directory | ||
| */ | ||
| Directory getDirectory(String resourceId); | ||
|
|
||
| List<Directory> getDirectories(); | ||
| } |
Oops, something went wrong.