Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion citesphere/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
<spring.kafka.version>2.2.6.RELEASE</spring.kafka.version>
<spring-social-zotero.version>0.13</spring-social-zotero.version>
<citesphere.messages.version>0.4</citesphere.messages.version>
<citesphere.model.version>1.24</citesphere.model.version>
<citesphere.model.version>1.26-SNAPSHOT</citesphere.model.version>

<admin.password>$2a$04$oQo44vqcDIFRoYKiAXoNheurzkwX9dcNmowvTX/hsWuBMwijqn44i</admin.password>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public ResponseEntity<String> 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<String>(HttpStatus.FORBIDDEN);
} catch (ZoteroHttpStatusException e1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
}
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public interface ICitationManager {

List<ICitationGroup> getGroups(IUser user);

CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List<String> conceptIds)
CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List<String> conceptIds, String itemType)
throws GroupDoesNotExistException, ZoteroHttpStatusException;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -380,78 +380,83 @@
throw new GroupDoesNotExistException("Group " + groupId + " does not exist.");
}

@Override
public CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List<String> conceptIds)
public CitationResults getGroupItems(IUser user, String groupId, String collectionId, int page, String sortBy, List<String> conceptIds, String itemType)
throws GroupDoesNotExistException, ZoteroHttpStatusException {

ItemType citationItemType = null;
if (itemType != null && !itemType.trim().isEmpty()) {
citationItemType = ItemType.valueOf(itemType);
}

ICitationGroup group = null;
Optional<ICitationGroup> groupOptional = groupRepository.findFirstByGroupId(new Long(groupId));
if (!groupOptional.isPresent() || !groupOptional.get().getUsers().contains(user.getUsername())) {
group = zoteroManager.getGroup(user, groupId, false);
if (group != null) {
if (groupOptional.isPresent()){
group.setId(groupOptional.get().getId());
}
group.getUsers().add(user.getUsername());
groupRepository.save((CitationGroup) group);
}
} else {
group = groupOptional.get();
}

if (group == null) {
throw new GroupDoesNotExistException("There is no group with id " + groupId);
}

boolean isModified = zoteroManager.isGroupModified(user, groupId, group.getContentVersion());
CitationResults results = new CitationResults();
if (isModified) {
long previousVersion = group.getContentVersion();
// first update the group info
// if we are using a previously stored group, delete it
ICitationGroup zoteroGroup = null;
if (group.getId() != null) {
zoteroGroup = zoteroManager.getGroup(user, groupId + "", true);
zoteroGroup.setId(group.getId());
}
zoteroGroup.setUpdatedOn(OffsetDateTime.now().toString());
addUserToGroup(zoteroGroup, user);
group = groupRepository.save((CitationGroup) zoteroGroup);

// then update content
results.setNotModified(false);
asyncCitationProcessor.sync(user, group.getGroupId() + "", previousVersion, collectionId);
} else {
results.setNotModified(true);
}

List<ICitation> citations = null;
long total = 0;
if (collectionId != null && !collectionId.trim().isEmpty()) {
citations = (List<ICitation>) citationDao.findCitationsInCollection(groupId, collectionId, (page - 1) * zoteroPageSize, zoteroPageSize, conceptIds);
citations = (List<ICitation>) citationDao.findCitationsInCollection(groupId, collectionId, (page - 1) * zoteroPageSize, zoteroPageSize, conceptIds, citationItemType);
ICitationCollection collection = collectionManager.getCollection(user, groupId, collectionId);
if (collection != null) {
total = collection.getNumberOfItems();
} else {
total = citations.size();
}
} else {
citations = (List<ICitation>) citationDao.findCitations(groupId, (page - 1) * zoteroPageSize,
zoteroPageSize, false, conceptIds);
citations = (List<ICitation>) citationDao.findCitations(groupId,
(page - 1) * zoteroPageSize, zoteroPageSize, false, conceptIds, citationItemType);
if (groupOptional.isPresent()) {
updateCitationGroup(user, groupId);

total = groupRepository.findFirstByGroupId(new Long(groupId)).get().getNumItems();
} else {
total = citations.size();
}
}
results.setCitations(citations != null ? citations : new ArrayList<>());
results.setTotalResults(total);
return results;

}

Check notice on line 459 in citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/CitationManager.java

View check run for this annotation

codefactor.io / CodeFactor

citesphere/src/main/java/edu/asu/diging/citesphere/core/service/impl/CitationManager.java#L383-L459

Complex Method
@Override
public void forceGroupItemsRefresh(IUser user, String groupId, String collectionId, int page, String sortBy) {
Optional<ICitationGroup> groupOptional = groupRepository.findFirstByGroupId(new Long(groupId));
Expand All @@ -476,7 +481,7 @@
@Override
public CitationPage getPrevAndNextCitation(IUser user, String groupId, String collectionId, int page, String sortBy,
int index, List<String> conceptIds) throws GroupDoesNotExistException, ZoteroHttpStatusException {
CitationResults citationResults = getGroupItems(user, groupId, collectionId, page, sortBy, conceptIds);
CitationResults citationResults = getGroupItems(user, groupId, collectionId, page, sortBy, conceptIds, null);
List<ICitation> citations = citationResults.getCitations();
CitationPage result = new CitationPage();
result.setIndex(String.valueOf(index));
Expand All @@ -486,7 +491,7 @@
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));
Expand All @@ -502,8 +507,7 @@
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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@ 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(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);
Expand All @@ -70,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";
Expand All @@ -88,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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 18 additions & 2 deletions citesphere/src/main/webapp/WEB-INF/views/auth/group/items.html
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,19 @@ <h4 class="panel-title">
</li>
</tbody>
</ul>
</div>
</div>

<span class="dropdown pull-left" style= "margin-left:30px;margin-top:-20px;">
<label for="itemType"></label>
<select class="form-control" id="itemType" name="itemType" >
<span >
<option th:selected="${#strings.equals(itemType, 'All')}" th:value="All">Filter by Type</option>
<span th:each="citationType:${T(edu.asu.diging.citesphere.model.bib.ItemType).values()}">
<option th:selected="${#strings.equals(itemType, citationType)}" th:value="${citationType}" th:text="${citationType}">[[${citationType}]]</option>
</span>
</span>
</select>
</span>

<div class="dropdown pull-right" style="padding-bottom: 10px;">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Expand Down Expand Up @@ -1013,7 +1025,11 @@ <h4 class="modal-title">Delete Entries</h4>
},
});
}


$("#itemType").change(function () {
var itemType = $("#itemType").val();
window.location.href = "?itemType=" + itemType;
});
</script>
</div>
</body>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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());
Expand All @@ -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);
Expand Down