Skip to content

Commit

Permalink
search files: pass in desired version (i.e DRAFT) #2455
Browse files Browse the repository at this point in the history
We'll need to make datasetVersionId searchable per #2038. It sure seems
like the rules about draft files established in #528 will have to
change. :/

Issue #2460 created about database deadlocks. :(

Issue #2464 created about having to edit metadata of a published dataset
before we can delete a file via SWORD. :(

Issue #2461 created about how the native API allows version less than
v1.0 to be published. :(
  • Loading branch information
pdurbin committed Aug 18, 2015
1 parent 35c42ad commit eddb44e
Show file tree
Hide file tree
Showing 3 changed files with 195 additions and 28 deletions.
26 changes: 24 additions & 2 deletions src/main/java/edu/harvard/iq/dataverse/api/Index.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import edu.harvard.iq.dataverse.DatasetFieldType;
import edu.harvard.iq.dataverse.DatasetServiceBean;
import edu.harvard.iq.dataverse.DatasetVersion;
import edu.harvard.iq.dataverse.DatasetVersionServiceBean;
import edu.harvard.iq.dataverse.DatasetVersionServiceBean.RetrieveDatasetVersionResponse;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.DataverseServiceBean;
import edu.harvard.iq.dataverse.DvObject;
Expand Down Expand Up @@ -72,6 +74,8 @@ public class Index extends AbstractApiBean {
@EJB
DatasetServiceBean datasetService;
@EJB
DatasetVersionServiceBean datasetVersionService;
@EJB
DataFileServiceBean dataFileService;
@EJB
DvObjectServiceBean dvObjectService;
Expand Down Expand Up @@ -626,7 +630,7 @@ public Response deleteTimestamp(@PathParam("dvObjectId") long dvObjectId) {

@GET
@Path("filesearch")
public Response filesearch(@QueryParam("persistentId") String persistentId, @QueryParam("q") String userSuppliedQuery) {
public Response filesearch(@QueryParam("persistentId") String persistentId, @QueryParam("semanticVersion") String semanticVersion, @QueryParam("q") String userSuppliedQuery) {
Dataset dataset = datasetService.findByGlobalId(persistentId);
if (dataset == null) {
return errorResponse(Status.BAD_REQUEST, "Could not find dataset with persistent id " + persistentId);
Expand All @@ -639,16 +643,27 @@ public Response filesearch(@QueryParam("persistentId") String persistentId, @Que
}
} catch (WrappedResponse ex) {
}
DatasetVersion datasetVersion = dataset.getLatestVersion();
RetrieveDatasetVersionResponse datasetVersionResponse = datasetVersionService.retrieveDatasetVersionByPersistentId(persistentId, semanticVersion);
if (datasetVersionResponse == null) {
return errorResponse(Status.BAD_REQUEST, "Problem searching for files. Could not find dataset version based on " + persistentId + " and " + semanticVersion);
}
DatasetVersion datasetVersion = datasetVersionResponse.getDatasetVersion();
FileView fileView = searchFilesService.getFileView(datasetVersion, user, userSuppliedQuery);
if (fileView == null) {
return errorResponse(Status.BAD_REQUEST, "Problem searching for files. Null returned from getFileView.");
}
JsonArrayBuilder filesFound = Json.createArrayBuilder();
JsonArrayBuilder cards = Json.createArrayBuilder();
JsonArrayBuilder fileIds = Json.createArrayBuilder();
for (SolrSearchResult result : fileView.getSolrSearchResults()) {
cards.add(result.getNameSort());
fileIds.add(result.getEntityId());
JsonObjectBuilder fileFound = Json.createObjectBuilder();
fileFound.add("name", result.getNameSort());
fileFound.add("entityId", result.getEntityId().toString());
fileFound.add("datasetVersionId", result.getDatasetVersionId());
fileFound.add("datasetId", result.getParent().get(SearchFields.ID));
filesFound.add(fileFound);
}
JsonArrayBuilder facets = Json.createArrayBuilder();
for (FacetCategory facetCategory : fileView.getFacetCategoryList()) {
Expand All @@ -658,14 +673,21 @@ public Response filesearch(@QueryParam("persistentId") String persistentId, @Que
for (String filterQuery : fileView.getFilterQueries()) {
filterQueries.add(filterQuery);
}
JsonArrayBuilder allDatasetVersionIds = Json.createArrayBuilder();
for (DatasetVersion dsVersion : dataset.getVersions()) {
allDatasetVersionIds.add(dsVersion.getId());
}
JsonObjectBuilder data = Json.createObjectBuilder();
data.add("filesFound", filesFound);
data.add("cards", cards);
data.add("fileIds", fileIds);
data.add("facets", facets);
data.add("user", user.getIdentifier());
data.add("persistentID", persistentId);
data.add("query", fileView.getQuery());
data.add("filterQueries", filterQueries);
data.add("allDataverVersionIds", allDatasetVersionIds);
data.add("semanticVersion", datasetVersion.getSemanticVersion());
return okResponse(data);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package edu.harvard.iq.dataverse.search;

import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetVersion;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.authorization.users.User;
Expand All @@ -25,6 +24,13 @@ public FileView getFileView(DatasetVersion datasetVersion, User user, String use
List<String> filterQueries = new ArrayList<>();
filterQueries.add(SearchFields.TYPE + ":" + SearchConstants.FILES);
filterQueries.add(SearchFields.PARENT_ID + ":" + datasetVersion.getDataset().getId());
/**
* @todo In order to support searching for files based on dataset
* version for https://github.com/IQSS/dataverse/issues/2455 we're going
* to need to make the dataset version id searchable, perhaps as part of
* https://github.com/IQSS/dataverse/issues/2038
*/
// filterQueries.add(SearchFields.DATASET_VERSION_ID + ":" + datasetVersion.getId());
String finalQuery = SearchUtil.determineFinalQuery(userSuppliedQuery);
SortBy sortBy = getSortBy(finalQuery);
String sortField = sortBy.getField();
Expand Down
Loading

0 comments on commit eddb44e

Please sign in to comment.