From 96c73912b99d1b43cdbda5bbc5d06777ee31c83e Mon Sep 17 00:00:00 2001 From: aditya Date: Mon, 27 Feb 2023 16:40:58 -0700 Subject: [PATCH 1/8] [CITE-189] Added dropdown for citation type filter --- .../webapp/WEB-INF/views/auth/group/items.html | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html index 3965aeff8..262aeb147 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html @@ -664,7 +664,9 @@

- + + + - Type + Type + + + +
+ Authors Title Date From 91e74dac6165962b010c6200adceec78b215e77f Mon Sep 17 00:00:00 2001 From: aditya Date: Wed, 1 Mar 2023 16:43:03 -0700 Subject: [PATCH 2/8] [CITE-189] Added change function for item type dropdown --- .../src/main/webapp/WEB-INF/views/auth/group/items.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html index 262aeb147..110e5fb2e 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html @@ -1025,7 +1025,12 @@ }, }); } - + +$("#itemType").change(function () { + var itemType = $("#itemType").val(); + console.log("itemType " + itemType); + console.log(window.location.href); +});
From c32e853bb39d3dfb25312a10860cc8be67506342 Mon Sep 17 00:00:00 2001 From: aditya Date: Wed, 1 Mar 2023 17:00:08 -0700 Subject: [PATCH 3/8] [CITE-189] Added item type field in controller params --- .../asu/diging/citesphere/web/user/GroupItemsController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java index b4c7de9ef..8aa0fb5af 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java @@ -60,7 +60,8 @@ public String show(Authentication authentication, Model model, @PathVariable("zo @RequestParam(defaultValue = "1", required = false, value = "page") String page, @RequestParam(defaultValue = "title", required = false, value = "sort") String sort, @RequestParam(required = false, value = "columns") String[] columns, - @RequestParam(required = false, defaultValue = "", value = "conceptIds") String[] conceptIds) { + @RequestParam(required = false, defaultValue = "", value = "conceptIds") String[] conceptIds, + @RequestParam(defaultValue = "All", required = false, value = "itemType") String itemType) { Integer pageInt = 1; try { pageInt = new Integer(page); From 1abb8eeb6ebe0a3c2cba12278b32b464e93845ad Mon Sep 17 00:00:00 2001 From: aditya Date: Wed, 15 Mar 2023 16:51:55 -0700 Subject: [PATCH 4/8] [CITE-189] Added citation filter by type --- .../api/v1/user/ItemsApiController.java | 2 +- .../core/export/impl/ExportManager.java | 4 ++-- .../citesphere/core/service/ICitationManager.java | 2 +- .../core/service/impl/CitationManager.java | 15 +++++++-------- .../web/user/CollectionItemsController.java | 2 +- .../citesphere/web/user/GroupItemsController.java | 9 +++++++-- .../citesphere/web/user/MoveItemsController.java | 2 +- .../webapp/WEB-INF/views/auth/group/items.html | 8 ++++++-- .../core/export/impl/ExportManagerTest.java | 6 +++--- 9 files changed, 29 insertions(+), 21 deletions(-) diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/api/v1/user/ItemsApiController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/api/v1/user/ItemsApiController.java index b9cd34be3..ee235f1fd 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/api/v1/user/ItemsApiController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/api/v1/user/ItemsApiController.java @@ -85,7 +85,7 @@ public ResponseEntity getCollectionsByGroupId(@RequestHeader HttpHeaders CitationResults results; try { - results = citationManager.getGroupItems(user, groupId, collectionId, pageInt, sort, null); + results = citationManager.getGroupItems(user, groupId, collectionId, pageInt, sort, null, null); } catch(AccessForbiddenException ex) { return new ResponseEntity(HttpStatus.FORBIDDEN); } catch (ZoteroHttpStatusException e1) { diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/export/impl/ExportManager.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/export/impl/ExportManager.java index 29dbf50aa..57cbc0a16 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/export/impl/ExportManager.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/export/impl/ExportManager.java @@ -129,7 +129,7 @@ public void export(ExportType exportType, IUser user, String groupId, String col } // FIXME: sort field should not be hard coded! - CitationResults results = citationManager.getGroupItems(user, groupId, collectionId, 1, "title", null); + CitationResults results = citationManager.getGroupItems(user, groupId, collectionId, 1, "title", null, null); if (results.getTotalResults() > maxExportSize) { throw new ExportTooBigException("Can't export " + results.getTotalResults() + " records."); } @@ -180,7 +180,7 @@ public void distributedExport(ExportType exportType, IUser user, String groupId, task.setCollectionName(collection.getName()); } - CitationResults results = citationManager.getGroupItems(user, groupId, collectionId, 1, SORT_BY_TITLE, null); + CitationResults results = citationManager.getGroupItems(user, groupId, collectionId, 1, SORT_BY_TITLE, null, null); task.setTotalRecords(results.getTotalResults()); task = taskManager.saveAndFlush(task); diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/ICitationManager.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/ICitationManager.java index e434356ad..bf90269e4 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/ICitationManager.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/ICitationManager.java @@ -31,7 +31,7 @@ public interface ICitationManager { List getGroups(IUser user); - CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List conceptIds) + CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List conceptIds, String itemType) throws GroupDoesNotExistException, ZoteroHttpStatusException; /** diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/CitationManager.java b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/CitationManager.java index b934f6e77..9fa830048 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/CitationManager.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/CitationManager.java @@ -381,7 +381,7 @@ public CloseableIterator getAllGroupItems(IUser user, String groupId, } @Override - public CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List conceptIds) + public CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List conceptIds, String itemType) throws GroupDoesNotExistException, ZoteroHttpStatusException { ICitationGroup group = null; @@ -428,7 +428,7 @@ public CitationResults getGroupItems(IUser user, String groupId, String collecti List citations = null; long total = 0; if (collectionId != null && !collectionId.trim().isEmpty()) { - citations = (List) citationDao.findCitationsInCollection(groupId, collectionId, (page - 1) * zoteroPageSize, zoteroPageSize, conceptIds); + citations = (List) citationDao.findCitationsInCollection(groupId, collectionId, (page - 1) * zoteroPageSize, zoteroPageSize, conceptIds, itemType); ICitationCollection collection = collectionManager.getCollection(user, groupId, collectionId); if (collection != null) { total = collection.getNumberOfItems(); @@ -436,8 +436,8 @@ public CitationResults getGroupItems(IUser user, String groupId, String collecti total = citations.size(); } } else { - citations = (List) citationDao.findCitations(groupId, (page - 1) * zoteroPageSize, - zoteroPageSize, false, conceptIds); + citations = (List) citationDao.findCitations(groupId, + (page - 1) * zoteroPageSize, zoteroPageSize, false, conceptIds, itemType); if (groupOptional.isPresent()) { updateCitationGroup(user, groupId); @@ -476,7 +476,7 @@ public List getValidCreatorTypes(IUser user, ItemType itemType) { @Override public CitationPage getPrevAndNextCitation(IUser user, String groupId, String collectionId, int page, String sortBy, int index, List conceptIds) throws GroupDoesNotExistException, ZoteroHttpStatusException { - CitationResults citationResults = getGroupItems(user, groupId, collectionId, page, sortBy, conceptIds); + CitationResults citationResults = getGroupItems(user, groupId, collectionId, page, sortBy, conceptIds, null); List citations = citationResults.getCitations(); CitationPage result = new CitationPage(); result.setIndex(String.valueOf(index)); @@ -486,7 +486,7 @@ public CitationPage getPrevAndNextCitation(IUser user, String groupId, String co if (citations != null && citations.size() > 0) { int maxPage = (int) Math.ceil((citationResults.getTotalResults() / Float.valueOf(zoteroPageSize))); if (index == citations.size() - 1 && page < maxPage) { - CitationResults nextPageCitationResults = getGroupItems(user, groupId, collectionId, page + 1, sortBy, conceptIds); + CitationResults nextPageCitationResults = getGroupItems(user, groupId, collectionId, page + 1, sortBy, conceptIds, null); if (nextPageCitationResults != null && nextPageCitationResults.getCitations().size() > 0) { result.setNext(nextPageCitationResults.getCitations().get(0).getKey()); result.setNextIndex(String.valueOf(0)); @@ -502,8 +502,7 @@ public CitationPage getPrevAndNextCitation(IUser user, String groupId, String co result.setPrevIndex(String.valueOf(index - 1)); result.setPrevPage(String.valueOf(page)); } else if (index == 0 && page > 1) { - CitationResults prevPageCitationResults = getGroupItems(user, groupId, collectionId, page - 1, sortBy, - conceptIds); + CitationResults prevPageCitationResults = getGroupItems(user, groupId, collectionId, page - 1, sortBy, conceptIds, null); int pageSize = prevPageCitationResults.getCitations().size(); result.setPrev(prevPageCitationResults.getCitations().get(pageSize - 1).getKey()); result.setPrevIndex(String.valueOf(pageSize - 1)); diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/CollectionItemsController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/CollectionItemsController.java index 0bd328a3a..a871e1655 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/CollectionItemsController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/CollectionItemsController.java @@ -43,7 +43,7 @@ public String show(Authentication authentication, Model model, @PathVariable("zo } IUser user = (IUser) authentication.getPrincipal(); - CitationResults results = citationManager.getGroupItems(user, groupId, null, pageInt, sort, null); + CitationResults results = citationManager.getGroupItems(user, groupId, null, pageInt, sort, null, null); model.addAttribute("items", results.getCitations()); model.addAttribute("total", results.getTotalResults()); model.addAttribute("totalPages", Math.ceil(new Float(results.getTotalResults()) / new Float(zoteroPageSize))); diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java index 8aa0fb5af..6cf566bf0 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/GroupItemsController.java @@ -61,7 +61,11 @@ public String show(Authentication authentication, Model model, @PathVariable("zo @RequestParam(defaultValue = "title", required = false, value = "sort") String sort, @RequestParam(required = false, value = "columns") String[] columns, @RequestParam(required = false, defaultValue = "", value = "conceptIds") String[] conceptIds, - @RequestParam(defaultValue = "All", required = false, value = "itemType") String itemType) { + @RequestParam(value = "itemType", required = false, defaultValue = "All") String itemType) { + String citationType = null; + if (!itemType.equals("All")) { + citationType = itemType; + } Integer pageInt = 1; try { pageInt = new Integer(page); @@ -71,7 +75,7 @@ public String show(Authentication authentication, Model model, @PathVariable("zo IUser user = (IUser) authentication.getPrincipal(); CitationResults results; try { - results = citationManager.getGroupItems(user, groupId, collectionId, pageInt, sort, Arrays.asList(conceptIds)); + results = citationManager.getGroupItems(user, groupId, collectionId, pageInt, sort, Arrays.asList(conceptIds), citationType); } catch(ZoteroHttpStatusException e) { logger.error("Exception occured", e); return "error/500"; @@ -89,6 +93,7 @@ public String show(Authentication authentication, Model model, @PathVariable("zo model.addAttribute("collectionId", collectionId); model.addAttribute("sort", sort); model.addAttribute("results", results); + model.addAttribute("itemType", itemType); // more than 200 really don't make sense here, this needs to be changed try { model.addAttribute("citationCollections", collectionManager.getAllCollections(user, groupId, collectionId, "title", 200)); diff --git a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/MoveItemsController.java b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/MoveItemsController.java index 0858c497f..81e2385f5 100644 --- a/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/MoveItemsController.java +++ b/citesphere/src/main/java/edu/asu/diging/citesphere/web/user/MoveItemsController.java @@ -101,7 +101,7 @@ public class MoveItemsController { @RequestParam(defaultValue = "1", required = false, value = "page") String page) { try { citationManager.getGroupItems((IUser) authentication.getPrincipal(), zoteroGroupId, collectionId, - new Integer(page), null, null); + new Integer(page), null, null, null); Sync sync = new Sync(); sync.setStatus("sync-started"); return sync; diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html index 110e5fb2e..8f8299921 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html @@ -702,8 +702,10 @@

@@ -1030,6 +1032,8 @@ var itemType = $("#itemType").val(); console.log("itemType " + itemType); console.log(window.location.href); + window.location.href = "?itemType=" + itemType; + console.log(window.location.href); });
diff --git a/citesphere/src/test/java/edu/asu/diging/citesphere/core/export/impl/ExportManagerTest.java b/citesphere/src/test/java/edu/asu/diging/citesphere/core/export/impl/ExportManagerTest.java index b02612c7f..59409fce1 100644 --- a/citesphere/src/test/java/edu/asu/diging/citesphere/core/export/impl/ExportManagerTest.java +++ b/citesphere/src/test/java/edu/asu/diging/citesphere/core/export/impl/ExportManagerTest.java @@ -85,8 +85,8 @@ public void setUp() throws GroupDoesNotExistException, ZoteroHttpStatusException group.setGroupId(groupId); group.setName(GROUP_NAME); - Mockito.when(citationManager.getGroupItems(user, groupId.toString(), null, 1, SORT_BY, null)).thenReturn(results1); - Mockito.when(citationManager.getGroupItems(user, groupId.toString(), COLLECTION_ID, 1, SORT_BY, null)).thenReturn(results1); + Mockito.when(citationManager.getGroupItems(user, groupId.toString(), null, 1, SORT_BY, null, null)).thenReturn(results1); + Mockito.when(citationManager.getGroupItems(user, groupId.toString(), COLLECTION_ID, 1, SORT_BY, null, null)).thenReturn(results1); Mockito.when(groupManager.getGroup(user, groupId.toString())).thenReturn(group); task = new ExportTask(); @@ -135,7 +135,7 @@ public void test_export_maxExportSize() throws GroupDoesNotExistException, Expor CitationResults results2 = new CitationResults(); results2.setTotalResults(400); String GROUP2 = "GROUP2"; - Mockito.when(citationManager.getGroupItems(user, GROUP2, null, 1, SORT_BY, null)).thenReturn(results2); + Mockito.when(citationManager.getGroupItems(user, GROUP2, null, 1, SORT_BY, null, null)).thenReturn(results2); Mockito.when(groupManager.getGroup(user, GROUP2)).thenReturn(new CitationGroup()); managerToTest.export(ExportType.CSV, user, GROUP2, null); From f2db0de05b23e6c2a1ebb594607d190fe23cd3dc Mon Sep 17 00:00:00 2001 From: aditya Date: Mon, 20 Mar 2023 17:20:49 -0700 Subject: [PATCH 5/8] [CITE-189] Added test cases --- .../core/service/impl/CitationManagerTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/CitationManagerTest.java b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/CitationManagerTest.java index 73335037f..129f88c2d 100644 --- a/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/CitationManagerTest.java +++ b/citesphere/src/test/java/edu/asu/diging/citesphere/core/service/impl/CitationManagerTest.java @@ -337,7 +337,7 @@ public void test_getPrevAndNextCitation_prevAndNextOnCurrentPage() throws GroupD ICitationGroup mockGroup = Mockito.mock(ICitationGroup.class); Mockito.when(zoteroManager.getGroup(user, GROUP_ID, true)).thenReturn(mockGroup); - Mockito.doReturn(citations).when(citationDao).findCitations(GROUP_ID, (page-1)*50, 50, false, null); + Mockito.doReturn(citations).when(citationDao).findCitations(GROUP_ID, (page-1)*50, 50, false, null, null); CitationPage actualResult= managerToTest.getPrevAndNextCitation(user, GROUP_ID, "", page, sortBy, index, null); Assert.assertEquals("key2", actualResult.getNext()); @@ -379,8 +379,8 @@ public void test_getPrevAndNextCitation_prevOnCurrentPageAndNextOnNextPage() thr Mockito.when(zoteroManager.getGroupItems(user, GROUP_ID, page, sortBy, 0L)).thenReturn(citationResultsPage1); Mockito.when(zoteroManager.getGroupItems(user, GROUP_ID, page + 1, sortBy, 0L)).thenReturn(citationResultsPage2); - Mockito.doReturn(citations).when(citationDao).findCitations(GROUP_ID, (page - 1) * 9, 9, false, null); - Mockito.doReturn(citationsPage2).when(citationDao).findCitations(GROUP_ID, page * 9, 9, false, null); + Mockito.doReturn(citations).when(citationDao).findCitations(GROUP_ID, (page - 1) * 9, 9, false, null, null); + Mockito.doReturn(citationsPage2).when(citationDao).findCitations(GROUP_ID, page * 9, 9, false, null, null); CitationPage actualResult = managerToTest.getPrevAndNextCitation(user, GROUP_ID, "", page, sortBy, index, null); @@ -413,8 +413,8 @@ public void test_getPrevAndNextCitation_prevOnPrevPageAndNextOnCurrentPage() thr ICitationGroup mockGroup = Mockito.mock(ICitationGroup.class); Mockito.when(zoteroManager.getGroup(user, GROUP_ID, true)).thenReturn(mockGroup); - Mockito.doReturn(citations).when(citationDao).findCitations(GROUP_ID, (page-2)*9, 9, false, null); - Mockito.doReturn(citationsPage2).when(citationDao).findCitations(GROUP_ID, (page-1)*9, 9, false, null); + Mockito.doReturn(citations).when(citationDao).findCitations(GROUP_ID, (page-2)*9, 9, false, null, null); + Mockito.doReturn(citationsPage2).when(citationDao).findCitations(GROUP_ID, (page-1)*9, 9, false, null, null); CitationPage actualResult= managerToTest.getPrevAndNextCitation(user, GROUP_ID, "", page, sortBy, index, null); Assert.assertNull(actualResult.getNext()); Assert.assertEquals("key8", actualResult.getPrev()); @@ -440,7 +440,7 @@ public void test_getPrevAndNextCitation_noPrevAndNext() throws GroupDoesNotExist Mockito.when(zoteroManager.getGroup(user, GROUP_ID, true)).thenReturn(mockGroup); Mockito.when(zoteroManager.getGroupItems(user, GROUP_ID, page, sortBy, new Long(0))).thenReturn(citationResults); - Mockito.when(citationDao.findCitations(GROUP_ID, page-1, 0, false, null)).thenReturn(new ArrayList<>()); + Mockito.when(citationDao.findCitations(GROUP_ID, page-1, 0, false, null, null)).thenReturn(new ArrayList<>()); CitationPage actualResult= managerToTest.getPrevAndNextCitation(user, GROUP_ID, "", page, sortBy, index, null); From d24f19ab61425600a2b8f6b8cadf0655ad4c36af Mon Sep 17 00:00:00 2001 From: aditya Date: Wed, 29 Mar 2023 16:37:23 -0700 Subject: [PATCH 6/8] [CITE-189] Updated the citation type filter --- .../WEB-INF/views/auth/group/items.html | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html index 8f8299921..0780da8d0 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html @@ -666,7 +666,17 @@

- + + + + - Type - - - -
- + Type Authors Title Date @@ -1030,10 +1028,7 @@ $("#itemType").change(function () { var itemType = $("#itemType").val(); - console.log("itemType " + itemType); - console.log(window.location.href); window.location.href = "?itemType=" + itemType; - console.log(window.location.href); });
From 9f4811c6857f7f68875e2364253d64526f9a6a8d Mon Sep 17 00:00:00 2001 From: aditya Date: Fri, 31 Mar 2023 16:23:51 -0700 Subject: [PATCH 7/8] [CITE-189] Added citation type filter next to filter concept --- citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html index 0780da8d0..f2f4fc3e5 100644 --- a/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html +++ b/citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html @@ -666,7 +666,7 @@

- +