diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/IAuthorityService.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/IAuthorityService.java index 0dd6b9242..444a592ae 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/IAuthorityService.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/IAuthorityService.java @@ -129,4 +129,6 @@ AuthoritySearchResult searchAuthorityEntries(IUser user, String firstName, Strin Page getAuthoritiesByGroup(long groupId, int page, int pageSize); Page getUserSpecificAuthorities(IUser user, int page, int pageSize); + + List getAuthoritiesBySource(IUser user, String source); } \ No newline at end of file diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/AuthorityService.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/AuthorityService.java index 108a3833b..d91c60e9d 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/AuthorityService.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/AuthorityService.java @@ -303,6 +303,11 @@ public Page getAuthoritiesByGroup(long groupId, int page, int p return entryRepository.findByGroupsOrderByName(groupId, pageable); } + @Override + public List getAuthoritiesBySource(IUser user, String source) { + return entryRepository.findByUsernameAndImporterIdOrderByName(user.getUsername(), source); + } + @Override public Page getUserSpecificAuthorities(IUser user, int page, int pageSize) { Pageable pageable = PageRequest.of(page, pageSize); diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/authorities/AuthorityListController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/authorities/AuthorityListController.java index 185772d8c..5cdb9de77 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/authorities/AuthorityListController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/authorities/AuthorityListController.java @@ -45,18 +45,29 @@ public String list(Model model, Authentication authentication, logger.error("Trying to access invalid page number: ", ex); } pageInt = (pageInt - 1) < 0 ? 0 : pageInt - 1; + IUser user = (IUser)authentication.getPrincipal(); List userGroups = citationManager.getGroups((IUser) authentication.getPrincipal()); - Page authoritiesPage = authorityService.getAll(user, - userGroups.stream().map(group -> group.getGroupId()).collect(Collectors.toList()),pageInt, authorityPageSize); + Page authoritiesPage = authorityService.getAll( + user, + userGroups.stream().map(group -> group.getGroupId()).collect(Collectors.toList()), + pageInt, + authorityPageSize); List authorities = authoritiesPage.getContent(); + + model.addAttribute("importedAuthoritySources", authorities.stream() + .map(authorityEntry -> authorityEntry.getImporterId()) + .distinct() + .collect(Collectors.toList())); model.addAttribute("authorities", authorities); model.addAttribute("groups", userGroups); model.addAttribute("displayBy", "all"); model.addAttribute("username", user.getUsername()); model.addAttribute("total", authoritiesPage.getTotalElements()); - model.addAttribute("totalPages", authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); + model.addAttribute("totalPages", + authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); model.addAttribute("currentPage", page); + return "auth/authorities/list"; } @@ -71,14 +82,25 @@ public String getAuthoritiesForGroup(Model model, Authentication authentication, logger.error("Trying to access invalid page number: ", ex); } pageInt = (pageInt - 1) < 0 ? 0 : pageInt - 1; + IUser user = (IUser)authentication.getPrincipal(); - Page authoritiesPage = authorityService.getAuthoritiesByGroup(Long.valueOf(zoteroGroupId), pageInt, authorityPageSize); - model.addAttribute("authorities", authoritiesPage.getContent()); - model.addAttribute("groups", citationManager.getGroups((IUser)authentication.getPrincipal())); + Page authoritiesPage = authorityService.getAuthoritiesByGroup( + Long.valueOf(zoteroGroupId), + pageInt, + authorityPageSize); + List authorities = authoritiesPage.getContent(); + + model.addAttribute("importedAuthoritySources", authorities.stream() + .map(authorityEntry -> authorityEntry.getImporterId()) + .distinct() + .collect(Collectors.toList())); + model.addAttribute("authorities", authorities); + model.addAttribute("groups", citationManager.getGroups(user)); model.addAttribute("displayBy", zoteroGroupId); model.addAttribute("username", user.getUsername()); model.addAttribute("total", authoritiesPage.getTotalElements()); - model.addAttribute("totalPages", authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); + model.addAttribute("totalPages", + authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); model.addAttribute("currentPage", page); return "auth/authorities/list"; } @@ -93,15 +115,66 @@ public String getAuthoritiesForUser(Model model, Authentication authentication, logger.error("Trying to access invalid page number: ", ex); } pageInt = (pageInt - 1) < 0 ? 0 : pageInt - 1; + IUser user = (IUser)authentication.getPrincipal(); - Page authoritiesPage = authorityService.getUserSpecificAuthorities(user, pageInt, authorityPageSize); - model.addAttribute("authorities", authoritiesPage.getContent()); - model.addAttribute("groups", citationManager.getGroups((IUser)authentication.getPrincipal())); + Page authoritiesPage = authorityService.getUserSpecificAuthorities( + user, + pageInt, + authorityPageSize); + List authorities = authoritiesPage.getContent(); + + model.addAttribute("importedAuthoritySources", authorities.stream() + .map(authorityEntry -> authorityEntry.getImporterId()) + .distinct() + .collect(Collectors.toList())); + model.addAttribute("authorities", authorities); + model.addAttribute("groups", citationManager.getGroups(user)); model.addAttribute("displayBy", "userSpecific"); model.addAttribute("username", user.getUsername()); + + model.addAttribute("total", authoritiesPage.getTotalElements()); + model.addAttribute("totalPages", + authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); + model.addAttribute("currentPage", page); + + return "auth/authorities/list"; + } + + @RequestMapping("/auth/authority/list/{source}") + public String getAuthoritiesForSource(Model model, Authentication authentication, + @PathVariable("source") String source, @RequestParam(defaultValue = "1", required = false, value = "page") String page) { + Integer pageInt = 1; + try { + pageInt = new Integer(page); + } catch (NumberFormatException ex) { + logger.error("Trying to access invalid page number: ", ex); + } + pageInt = (pageInt - 1) < 0 ? 0 : pageInt - 1; + + IUser user = (IUser) authentication.getPrincipal(); + List userGroups = citationManager.getGroups(user); + Page authoritiesPage = authorityService.getAll( + user, + userGroups.stream().map(group -> group.getGroupId()).collect(Collectors.toList()), + pageInt, + authorityPageSize); + List authorities = authoritiesPage.getContent(); + + model.addAttribute("importedAuthoritySources", authorities.stream() + .map(authorityEntry -> authorityEntry.getImporterId()) + .distinct() + .collect(Collectors.toList())); + model.addAttribute("authorities", + authorityService.getAuthoritiesBySource(user, source.equals("null") ? null : source)); + model.addAttribute("groups", userGroups); + model.addAttribute("displayBy", "source-" + source); + model.addAttribute("username", user.getUsername()); + model.addAttribute("total", authoritiesPage.getTotalElements()); - model.addAttribute("totalPages", authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); + model.addAttribute("totalPages", + authoritiesPage.getTotalPages() > 0 ? authoritiesPage.getTotalPages() : 1); model.addAttribute("currentPage", page); + return "auth/authorities/list"; } } diff --git a/citesphere/src/main/resources/config.properties b/citesphere/src/main/resources/config.properties index dfd3eb1e8..80f76d844 100644 --- a/citesphere/src/main/resources/config.properties +++ b/citesphere/src/main/resources/config.properties @@ -57,6 +57,7 @@ _isiscb_disable_ssl_verification = ${isiscb.disable.ssl.verification} # Importer Names _importer_name_authority.importer.viaf=VIAF _importer_name_authority.importer.conceptpower=Conceptpower +_importer_name_authority.importer.isiscb=IsisCB _creation_default_item_type=JOURNAL_ARTICLE _available_item_columns=version,publicationTitle,volume,issue,pages,series,seriesTitle,abstractNote,dateAdded diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/authorities/list.html b/citesphere/src/main/webapp/WEB-INF/views/auth/authorities/list.html index cda352641..4f4ea427e 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/authorities/list.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/authorities/list.html @@ -70,13 +70,16 @@ }); function getAuthorityUrl(displayAuthoritiesVal) { - if (displayAuthoritiesVal === 'all') { - return [[@{/auth/authority/list}]]; - } else if (displayAuthoritiesVal === 'userSpecific') { - return [[@{/auth/authority/user/list}]]; - } else { + if (displayAuthoritiesVal === 'all') { + return [[@{/auth/authority/list}]]; + } else if (displayAuthoritiesVal === 'userSpecific') { + return [[@{/auth/authority/user/list}]]; + } else if (displayAuthoritiesVal.startsWith('source')) { + var source = displayAuthoritiesVal.split("-")[1]; + return [[@{/auth/authority/list/}]] + source; + } else { return [[@{/auth/authority/}]] + displayAuthoritiesVal + "/list"; - } + } } @@ -95,7 +98,10 @@

Managed Authority Entries

- + + + +

    diff --git a/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/AuthorityServiceTest.java b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/AuthorityServiceTest.java index dc42096b5..c54f4e8eb 100644 --- a/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/AuthorityServiceTest.java +++ b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/AuthorityServiceTest.java @@ -651,4 +651,28 @@ public void test_getUserSpecificAuthorities_emptyResult() { Page searchResult = managerToTest.getUserSpecificAuthorities(user, page, pageSize); Assert.assertTrue(searchResult.isEmpty()); } + + @Test + public void test_getAuthoritiesBySource() { + String source = "testsource"; + List expectedEntries = new ArrayList<>(); + expectedEntries.add(entry1); + expectedEntries.add(entry2); + Mockito.when(entryRepository.findByUsernameAndImporterIdOrderByName(user.getUsername(), source)) + .thenReturn(expectedEntries); + + List actualEntries = managerToTest.getAuthoritiesBySource(user, source); + Assert.assertEquals(expectedEntries, actualEntries); + } + + @Test + public void test_getAuthoritiesBySource_noEntriesFound() { + String source = "testsource"; + List expectedEntries = new ArrayList<>(); + Mockito.when(entryRepository.findByUsernameAndImporterIdOrderByName(user.getUsername(), source)) + .thenReturn(expectedEntries); + + List actualEntries = managerToTest.getAuthoritiesBySource(user, source); + Assert.assertEquals(expectedEntries, actualEntries); + } }