Skip to content
Merged
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
27 changes: 16 additions & 11 deletions src/main/java/edu/harvard/iq/dataverse/mydata/DataRetrieverAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@
import edu.harvard.iq.dataverse.search.SearchFields;
import edu.harvard.iq.dataverse.search.SortBy;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.Locale;
import jakarta.ejb.EJB;
import jakarta.inject.Inject;
import jakarta.json.Json;
Expand Down Expand Up @@ -277,17 +277,18 @@ public String retrieveMyDataAsJsonString(
@QueryParam("dataset_valid") List<Boolean> datasetValidities) {
boolean OTHER_USER = false;

String localeCode = session.getLocaleCode();
String noMsgResultsFound = BundleUtil.getStringFromPropertyFile("dataretrieverAPI.noMsgResultsFound",
"Bundle", new Locale(localeCode));
String noMsgResultsFound = BundleUtil.getStringFromBundle("dataretrieverAPI.noMsgResultsFound");

if ((session.getUser() != null) && (session.getUser().isAuthenticated())) {
authUser = (AuthenticatedUser) session.getUser();
} else {
try {
authUser = getRequestAuthenticatedUserOrDie(crc);
} catch (WrappedResponse e) {
return this.getJSONErrorString("Requires authentication. Please login.", "retrieveMyDataAsJsonString. User not found! Shouldn't be using this anyway");
return this.getJSONErrorString(
BundleUtil.getStringFromBundle("dataretrieverAPI.authentication.required"),
BundleUtil.getStringFromBundle("dataretrieverAPI.authentication.required.opt")
);
}
}

Expand All @@ -300,7 +301,9 @@ public String retrieveMyDataAsJsonString(
authUser = searchUser;
OTHER_USER = true;
} else {
return this.getJSONErrorString("No user found for: \"" + userIdentifier + "\"", null);
return this.getJSONErrorString(
BundleUtil.getStringFromBundle("dataretrieverAPI.user.not.found", Arrays.asList(userIdentifier)),
null);
}
}

Expand Down Expand Up @@ -340,8 +343,7 @@ public String retrieveMyDataAsJsonString(
myDataFinder = new MyDataFinder(rolePermissionHelper,
roleAssigneeService,
dvObjectServiceBean,
groupService,
noMsgResultsFound);
groupService);
this.myDataFinder.runFindDataSteps(filterParams);
if (myDataFinder.hasError()){
return this.getJSONErrorString(myDataFinder.getErrorMessage(), myDataFinder.getErrorMessage());
Expand Down Expand Up @@ -396,11 +398,14 @@ public String retrieveMyDataAsJsonString(

} catch (SearchException ex) {
solrQueryResponse = null;
this.logger.severe("Solr SearchException: " + ex.getMessage());
logger.severe("Solr SearchException: " + ex.getMessage());
}

if (solrQueryResponse==null){
return this.getJSONErrorString("Sorry! There was an error with the search service.", "Sorry! There was a SOLR Error");
if (solrQueryResponse == null) {
return this.getJSONErrorString(
BundleUtil.getStringFromBundle("dataretrieverAPI.solr.error"),
BundleUtil.getStringFromBundle("dataretrieverAPI.solr.error.opt")
);
}

// ---------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import edu.harvard.iq.dataverse.search.SearchConstants;
import edu.harvard.iq.dataverse.search.SearchFields;
import edu.harvard.iq.dataverse.util.BundleUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand Down Expand Up @@ -178,26 +179,25 @@ public List<Long> getRoleIds(){
}



private void checkParams(){

if ((this.userIdentifier == null)||(this.userIdentifier.isEmpty())){
this.addError("Sorry! No user was found!");
private void checkParams() {
if ((this.userIdentifier == null) || (this.userIdentifier.isEmpty())) {
this.addError(BundleUtil.getStringFromBundle("myDataFilterParams.error.no.user"));
return;
}

if ((this.roleIds == null)||(this.roleIds.isEmpty())){
this.addError("No results. Please select at least one Role.");
if ((this.roleIds == null) || (this.roleIds.isEmpty())) {
this.addError(BundleUtil.getStringFromBundle("myDataFilterParams.error.result.no.role"));
return;
}

if ((this.dvObjectTypes == null)||(this.dvObjectTypes.isEmpty())){
this.addError("No results. Please select one of Dataverses, Datasets, Files.");
if ((this.dvObjectTypes == null) || (this.dvObjectTypes.isEmpty())) {
this.addError(BundleUtil.getStringFromBundle("myDataFilterParams.error.result.no.dvobject"));
return;
}

if ((this.publicationStatuses == null)||(this.publicationStatuses.isEmpty())){
this.addError("No results. Please select one of " + StringUtils.join(MyDataFilterParams.defaultPublishedStates, ", ") + ".");

if ((this.publicationStatuses == null) || (this.publicationStatuses.isEmpty())) {
this.addError(BundleUtil.getStringFromBundle("dataretrieverAPI.user.not.found",
Arrays.asList(StringUtils.join(MyDataFilterParams.defaultPublishedStates, ", "))));
return;
}
}
Expand Down
35 changes: 18 additions & 17 deletions src/main/java/edu/harvard/iq/dataverse/mydata/MyDataFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import edu.harvard.iq.dataverse.authorization.DataverseRolePermissionHelper;
import edu.harvard.iq.dataverse.authorization.groups.GroupServiceBean;
import edu.harvard.iq.dataverse.search.SearchFields;
import edu.harvard.iq.dataverse.util.BundleUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -47,7 +49,6 @@ public class MyDataFinder {
private RoleAssigneeServiceBean roleAssigneeService;
private DvObjectServiceBean dvObjectServiceBean;
private GroupServiceBean groupService;
private String noMsgResultsFound;
//private RoleAssigneeServiceBean roleService = new RoleAssigneeServiceBean();
//private MyDataQueryHelperServiceBean myDataQueryHelperService;
// --------------------
Expand Down Expand Up @@ -86,12 +87,11 @@ public class MyDataFinder {
private List<Long> fileGrandparentFileIds = new ArrayList<>(); // dataverse has file permissions


public MyDataFinder(DataverseRolePermissionHelper rolePermissionHelper, RoleAssigneeServiceBean roleAssigneeService, DvObjectServiceBean dvObjectServiceBean, GroupServiceBean groupService, String _noMsgResultsFound) {
public MyDataFinder(DataverseRolePermissionHelper rolePermissionHelper, RoleAssigneeServiceBean roleAssigneeService, DvObjectServiceBean dvObjectServiceBean, GroupServiceBean groupService) {
this.rolePermissionHelper = rolePermissionHelper;
this.roleAssigneeService = roleAssigneeService;
this.dvObjectServiceBean = dvObjectServiceBean;
this.groupService = groupService;
this.noMsgResultsFound = _noMsgResultsFound;
this.loadHarvestedDataverseIds();
}

Expand Down Expand Up @@ -213,7 +213,7 @@ private List<String> getSolrFilterQueries(boolean totalCountsOnly){
// -----------------------------------------------------------------
String dvObjectFQ = this.getSolrDvObjectFilterQuery();
if (dvObjectFQ ==null){
this.addErrorMessage(noMsgResultsFound);
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.empty"));
return null;
}
filterQueries.add(dvObjectFQ);
Expand Down Expand Up @@ -286,7 +286,7 @@ public String getSolrDvObjectFilterQuery(){


if ((distinctEntityIds.isEmpty()) && (distinctParentIds.isEmpty())) {
this.addErrorMessage(noMsgResultsFound);
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.empty"));
return null;
}

Expand Down Expand Up @@ -430,24 +430,25 @@ public JsonArrayBuilder getListofSelectedRoles(){
}


private boolean runStep1RoleAssignments(){
private boolean runStep1RoleAssignments() {

List<Object[]> results = this.roleAssigneeService.getAssigneeAndRoleIdListFor(filterParams);

//logger.info("runStep1RoleAssignments results: " + results.toString());

if (results == null){
this.addErrorMessage("Sorry, the EntityManager isn't working (still).");
if (results == null) {
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.null"));
return false;
}else if (results.isEmpty()){
} else if (results.isEmpty()) {
List<String> roleNames = this.rolePermissionHelper.getRoleNamesByIdList(this.filterParams.getRoleIds());
if ((roleNames == null)||(roleNames.isEmpty())){
this.addErrorMessage("Sorry, you have no assigned roles.");
}else{
if (roleNames.size()==1){
this.addErrorMessage("Sorry, nothing was found for this role: " + StringUtils.join(roleNames, ", "));
}else{
this.addErrorMessage("Sorry, nothing was found for these roles: " + StringUtils.join(roleNames, ", "));
if ((roleNames == null) || (roleNames.isEmpty())) {
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.no.role"));
} else {
final List<String> args = Arrays.asList(StringUtils.join(roleNames, ", "));
if (roleNames.size() == 1) {
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.role.empty", args));
} else {
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.roles.empty", args));
}
}
return false;
Expand Down Expand Up @@ -497,7 +498,7 @@ private boolean runStep2DirectAssignments(){
List<Object[]> results = this.dvObjectServiceBean.getDvObjectInfoForMyData(directDvObjectIds);
//List<RoleAssignment> results = this.roleAssigneeService.getAssignmentsFor(this.userIdentifier);
if (results.isEmpty()){
this.addErrorMessage("Sorry, you have no assigned Dataverses, Datasets, or Files.");
this.addErrorMessage(BundleUtil.getStringFromBundle("myDataFinder.error.result.no.dvobject"));
return false;
}

Expand Down
15 changes: 15 additions & 0 deletions src/main/java/propertyFiles/Bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2898,7 +2898,22 @@ passwdVal.passwdReq.lowercase=lowercase
passwdVal.passwdReq.letter=letter
passwdVal.passwdReq.numeral=numeral
passwdVal.passwdReq.special=special
#mydata API (DataRetriverAPI.java and MyDataFinder.java)
dataretrieverAPI.noMsgResultsFound=Sorry, no results were found.
dataretrieverAPI.authentication.required=Requires authentication. Please login.
dataretrieverAPI.authentication.required.opt=retrieveMyDataAsJsonString. User not found! Shouldn't be using this anyway.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW: This is still odd, but only shows in the log.

dataretrieverAPI.user.not.found=No user found for: "{0}"
dataretrieverAPI.solr.error=Sorry! There was an error with the search service.
dataretrieverAPI.solr.error.opt=Sorry! There was a Solr Error.
myDataFilterParams.error.no.user=Sorry! No user was found!
myDataFilterParams.error.result.no.role=No results. Please select at least one Role.
myDataFilterParams.error.result.no.dvobject=No results. Please select one of Dataverses, Datasets, Files.
myDataFilterParams.error.result.no.publicationStatus=No results. Please select one of {0}.
myDataFinder.error.result.null=Sorry, the authenticated user ID could not be retrieved.
myDataFinder.error.result.no.role=Sorry, you have no assigned roles.
myDataFinder.error.result.role.empty=Sorry, nothing was found for this role: {0}
myDataFinder.error.result.roles.empty=Sorry, nothing was found for these roles: {0}
myDataFinder.error.result.no.dvobject=Sorry, you have no assigned Dataverses, Datasets, or Files.

#xlsxfilereader.java
xlsxfilereader.ioexception.parse=Could not parse Excel/XLSX spreadsheet. {0}
Expand Down
20 changes: 18 additions & 2 deletions src/test/java/edu/harvard/iq/dataverse/api/DataRetrieverApiIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
import io.restassured.RestAssured;
import io.restassured.response.Response;
import edu.harvard.iq.dataverse.api.auth.ApiKeyAuthMechanism;
import edu.harvard.iq.dataverse.util.BundleUtil;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static jakarta.ws.rs.core.Response.Status.OK;
import static jakarta.ws.rs.core.Response.Status.UNAUTHORIZED;
Expand All @@ -15,6 +19,8 @@

public class DataRetrieverApiIT {

private static final String ERR_MSG_FORMAT = "{\n \"success\": false,\n \"error_message\": \"%s\"\n}";

@BeforeAll
public static void setUpClass() {
RestAssured.baseURI = UtilIT.getRestAssuredBaseUri();
Expand All @@ -35,14 +41,24 @@ public void testRetrieveMyDataAsJsonString() {

String badUserIdentifier = "bad-identifier";
Response invalidUserIdentifierResponse = UtilIT.retrieveMyDataAsJsonString(superUserApiToken, badUserIdentifier, emptyRoleIdsList);
assertEquals("{\n \"success\": false,\n \"error_message\": \"No user found for: \\\"" + badUserIdentifier + "\\\"\"\n}", invalidUserIdentifierResponse.prettyPrint());
assertEquals(prettyPrintError("dataretrieverAPI.user.not.found", Arrays.asList(badUserIdentifier)), invalidUserIdentifierResponse.prettyPrint());
assertEquals(OK.getStatusCode(), invalidUserIdentifierResponse.getStatusCode());

// Call as superuser with valid user identifier
Response createSecondUserResponse = UtilIT.createRandomUser();
String userIdentifier = UtilIT.getUsernameFromResponse(createSecondUserResponse);
Response validUserIdentifierResponse = UtilIT.retrieveMyDataAsJsonString(superUserApiToken, userIdentifier, emptyRoleIdsList);
assertEquals("{\n \"success\": false,\n \"error_message\": \"Sorry, you have no assigned roles.\"\n}", validUserIdentifierResponse.prettyPrint());
assertEquals(prettyPrintError("myDataFinder.error.result.no.role", null), validUserIdentifierResponse.prettyPrint());
assertEquals(OK.getStatusCode(), validUserIdentifierResponse.getStatusCode());
}

private static String prettyPrintError(String resourceBundleKey, List<String> params) {
final String errorMessage;
if (params == null || params.isEmpty()) {
errorMessage = BundleUtil.getStringFromBundle(resourceBundleKey);
} else {
errorMessage = BundleUtil.getStringFromBundle(resourceBundleKey, params);
}
return String.format(ERR_MSG_FORMAT, errorMessage.replaceAll("\"", "\\\\\""));
}
}