Skip to content

Commit

Permalink
Revert "cherry pick from IQSS#10383"
Browse files Browse the repository at this point in the history
This reverts commit eaec499.
  • Loading branch information
qqmyers committed May 15, 2024
1 parent fa98e30 commit 84e4c08
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 78 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,6 @@ public enum FileOrderCriteria {
public enum FileDownloadSizeMode {
All, Original, Archival
}

/**
* Given a DatasetVersion, returns its total file metadata count
*
* @param datasetVersion the DatasetVersion to access
* @return long value of total file metadata count
*/
public long getFileMetadataCount(DatasetVersion datasetVersion) {
return getFileMetadataCount(datasetVersion, new FileSearchCriteria(null, null, null, null, null));
}

/**
* Given a DatasetVersion, returns its total file metadata count
Expand Down Expand Up @@ -199,32 +189,6 @@ public long getFilesDownloadSize(DatasetVersion datasetVersion, FileSearchCriter
};
}

/**
* Determines whether or not a DataFile is present in a DatasetVersion
*
* @param datasetVersion the DatasetVersion to check
* @param dataFile the DataFile to check
* @return boolean value
*/
public boolean isDataFilePresentInDatasetVersion(DatasetVersion datasetVersion, DataFile dataFile) {
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
Root<DataFile> dataFileRoot = criteriaQuery.from(DataFile.class);
Root<FileMetadata> fileMetadataRoot = criteriaQuery.from(FileMetadata.class);
Root<DatasetVersion> datasetVersionRoot = criteriaQuery.from(DatasetVersion.class);
criteriaQuery
.select(criteriaBuilder.count(dataFileRoot))
.where(criteriaBuilder.and(
criteriaBuilder.equal(dataFileRoot.get("id"), dataFile.getId()),
criteriaBuilder.equal(datasetVersionRoot.get("id"), datasetVersion.getId()),
fileMetadataRoot.in(dataFileRoot.get("fileMetadatas")),
fileMetadataRoot.in(datasetVersionRoot.get("fileMetadatas"))
)
);
Long count = em.createQuery(criteriaQuery).getSingleResult();
return count != null && count > 0;
}

private void addAccessStatusCountToTotal(DatasetVersion datasetVersion, Map<FileAccessStatus, Long> totalCounts, FileAccessStatus dataFileAccessStatus, FileSearchCriteria searchCriteria) {
long fileMetadataCount = getFileMetadataCountByAccessStatus(datasetVersion, dataFileAccessStatus, searchCriteria);
if (fileMetadataCount > 0) {
Expand Down
18 changes: 12 additions & 6 deletions src/main/java/edu/harvard/iq/dataverse/PermissionServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,6 @@ public class PermissionServiceBean {
@Inject
DataverseRequestServiceBean dvRequestService;

@Inject
DatasetVersionFilesServiceBean datasetVersionFilesServiceBean;
/**
* A request-level permission query (e.g includes IP ras).
*/
Expand Down Expand Up @@ -444,15 +442,23 @@ private Set<Permission> getInferredPermissions(DvObject dvo) {
* download permission for everybody:
*/
private boolean isPublicallyDownloadable(DvObject dvo) {
if (dvo instanceof DataFile df) {
if (dvo instanceof DataFile) {
// unrestricted files that are part of a release dataset
// automatically get download permission for everybody:
// -- L.A. 4.0 beta12

DataFile df = (DataFile) dvo;

if (!df.isRestricted()) {
DatasetVersion releasedVersion = df.getOwner().getReleasedVersion();
if (releasedVersion != null) {
return datasetVersionFilesServiceBean.isDataFilePresentInDatasetVersion(releasedVersion, df);
if (df.getOwner().getReleasedVersion() != null) {
List<FileMetadata> fileMetadatas = df.getOwner().getReleasedVersion().getFileMetadatas();
if (fileMetadatas != null) {
for (FileMetadata fm : fileMetadatas) {
if (df.equals(fm.getDataFile())) {
return true;
}
}
}
}
}
}
Expand Down
49 changes: 16 additions & 33 deletions src/main/java/edu/harvard/iq/dataverse/api/Search.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package edu.harvard.iq.dataverse.api;

import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetVersion;
import edu.harvard.iq.dataverse.DatasetVersionFilesServiceBean;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.api.auth.AuthRequired;
import edu.harvard.iq.dataverse.search.SearchFields;
import edu.harvard.iq.dataverse.DataverseServiceBean;
import edu.harvard.iq.dataverse.DvObject;
import edu.harvard.iq.dataverse.DvObjectServiceBean;
import edu.harvard.iq.dataverse.search.FacetCategory;
import edu.harvard.iq.dataverse.search.FacetLabel;
Expand All @@ -30,7 +26,6 @@
import java.util.Map;
import java.util.logging.Logger;
import jakarta.ejb.EJB;
import jakarta.inject.Inject;
import jakarta.json.Json;
import jakarta.json.JsonArrayBuilder;
import jakarta.json.JsonObjectBuilder;
Expand Down Expand Up @@ -60,8 +55,6 @@ public class Search extends AbstractApiBean {
DvObjectServiceBean dvObjectService;
@EJB
SolrIndexServiceBean SolrIndexService;
@Inject
DatasetVersionFilesServiceBean datasetVersionFilesServiceBean;

@GET
@AuthRequired
Expand Down Expand Up @@ -186,14 +179,29 @@ public Response search(
JsonArrayBuilder itemsArrayBuilder = Json.createArrayBuilder();
List<SolrSearchResult> solrSearchResults = solrQueryResponse.getSolrSearchResults();
for (SolrSearchResult solrSearchResult : solrSearchResults) {
itemsArrayBuilder.add(solrSearchResult.json(showRelevance, showEntityIds, showApiUrls, metadataFields, getDatasetFileCount(solrSearchResult)));
itemsArrayBuilder.add(solrSearchResult.toJsonObject(showRelevance, showEntityIds, showApiUrls, metadataFields));
}

JsonObjectBuilder spelling_alternatives = Json.createObjectBuilder();
for (Map.Entry<String, List<String>> entry : solrQueryResponse.getSpellingSuggestionsByToken().entrySet()) {
spelling_alternatives.add(entry.getKey(), entry.getValue().toString());
}

JsonArrayBuilder facets = Json.createArrayBuilder();
JsonObjectBuilder facetCategoryBuilder = Json.createObjectBuilder();
for (FacetCategory facetCategory : solrQueryResponse.getFacetCategoryList()) {
JsonObjectBuilder facetCategoryBuilderFriendlyPlusData = Json.createObjectBuilder();
JsonArrayBuilder facetLabelBuilderData = Json.createArrayBuilder();
for (FacetLabel facetLabel : facetCategory.getFacetLabel()) {
JsonObjectBuilder countBuilder = Json.createObjectBuilder();
countBuilder.add(facetLabel.getName(), facetLabel.getCount());
facetLabelBuilderData.add(countBuilder);
}
facetCategoryBuilderFriendlyPlusData.add("friendly", facetCategory.getFriendlyName());
facetCategoryBuilderFriendlyPlusData.add("labels", facetLabelBuilderData);
facetCategoryBuilder.add(facetCategory.getName(), facetCategoryBuilderFriendlyPlusData);
}
facets.add(facetCategoryBuilder);

JsonObjectBuilder value = Json.createObjectBuilder()
.add("q", query)
Expand All @@ -202,22 +210,6 @@ public Response search(
.add("spelling_alternatives", spelling_alternatives)
.add("items", itemsArrayBuilder.build());
if (showFacets) {
JsonArrayBuilder facets = Json.createArrayBuilder();
JsonObjectBuilder facetCategoryBuilder = Json.createObjectBuilder();
for (FacetCategory facetCategory : solrQueryResponse.getFacetCategoryList()) {
JsonObjectBuilder facetCategoryBuilderFriendlyPlusData = Json.createObjectBuilder();
JsonArrayBuilder facetLabelBuilderData = Json.createArrayBuilder();
for (FacetLabel facetLabel : facetCategory.getFacetLabel()) {
JsonObjectBuilder countBuilder = Json.createObjectBuilder();
countBuilder.add(facetLabel.getName(), facetLabel.getCount());
facetLabelBuilderData.add(countBuilder);
}
facetCategoryBuilderFriendlyPlusData.add("friendly", facetCategory.getFriendlyName());
facetCategoryBuilderFriendlyPlusData.add("labels", facetLabelBuilderData);
facetCategoryBuilder.add(facetCategory.getName(), facetCategoryBuilderFriendlyPlusData);
}
facets.add(facetCategoryBuilder);

value.add("facets", facets);
}
value.add("count_in_response", solrSearchResults.size());
Expand All @@ -240,15 +232,6 @@ public Response search(
}
}

private Long getDatasetFileCount(SolrSearchResult solrSearchResult) {
DvObject dvObject = solrSearchResult.getEntity();
if (dvObject.isInstanceofDataset()) {
DatasetVersion datasetVersion = ((Dataset) dvObject).getVersionFromId(solrSearchResult.getDatasetVersionId());
return datasetVersionFilesServiceBean.getFileMetadataCount(datasetVersion);
}
return null;
}

private User getUser(ContainerRequestContext crc) throws WrappedResponse {
User userToExecuteSearchAs = GuestUser.get();
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,15 @@ public JsonArrayBuilder getRelevance() {
return matchedFieldsArray;
}

public JsonObject toJsonObject(boolean showRelevance, boolean showEntityIds, boolean showApiUrls) {
return toJsonObject(showRelevance, showEntityIds, showApiUrls, null);
}

public JsonObject toJsonObject(boolean showRelevance, boolean showEntityIds, boolean showApiUrls,
List<String> metadataFields) {
return json(showRelevance, showEntityIds, showApiUrls, metadataFields).build();
}

/**
* Add additional fields for the MyData page
*
Expand Down Expand Up @@ -441,10 +450,11 @@ public JsonObjectBuilder getJsonForMyData() {
} // getJsonForMydata

public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, boolean showApiUrls) {
return json(showRelevance, showEntityIds, showApiUrls, null, null);
return json(showRelevance, showEntityIds, showApiUrls, null);
}

public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, boolean showApiUrls, List<String> metadataFields, Long datasetFileCount) {
public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, boolean showApiUrls,
List<String> metadataFields) {

if (this.type == null) {
return jsonObjectBuilder();
Expand Down Expand Up @@ -561,7 +571,7 @@ public JsonObjectBuilder json(boolean showRelevance, boolean showEntityIds, bool
subjects.add(subject);
}
nullSafeJsonBuilder.add("subjects", subjects);
nullSafeJsonBuilder.add("fileCount", datasetFileCount);
nullSafeJsonBuilder.add("fileCount", dv.getFileMetadatas().size());
nullSafeJsonBuilder.add("versionId", dv.getId());
nullSafeJsonBuilder.add("versionState", dv.getVersionState().toString());
if (this.isPublishedState()) {
Expand Down

0 comments on commit 84e4c08

Please sign in to comment.