Skip to content

Commit

Permalink
made the "includeFiles" option true by default, cleaned up the ".find…
Browse files Browse the repository at this point in the history
…Deep()" logic. #9763
  • Loading branch information
landreev committed Aug 30, 2023
1 parent 4c28979 commit ccd6b7d
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 38 deletions.
8 changes: 4 additions & 4 deletions src/main/java/edu/harvard/iq/dataverse/Dataset.java
Original file line number Diff line number Diff line change
Expand Up @@ -676,11 +676,11 @@ public Timestamp getCitationDate() {
Timestamp citationDate = null;
//Only calculate if this dataset doesn't use an alternate date field for publication date
if (citationDateDatasetFieldType == null) {
List<DatasetVersion> versions = this.versions;
//List<DatasetVersion> versions = this.versions;
// TODo - is this ever not version 1.0 (or draft if not published yet)
DatasetVersion oldest = versions.get(versions.size() - 1);
//DatasetVersion oldest = versions.get(versions.size() - 1);
citationDate = super.getPublicationDate();
if (oldest.isPublished()) {
/*if (oldest.isPublished()) {
List<FileMetadata> fms = oldest.getFileMetadatas();
for (FileMetadata fm : fms) {
Embargo embargo = fm.getDataFile().getEmbargo();
Expand All @@ -691,7 +691,7 @@ public Timestamp getCitationDate() {
}
}
}
}
}*/
}
return citationDate;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,7 @@ public DatasetVersion findDeep(Object pk) {
.setHint("eclipselink.left-join-fetch", "o.fileMetadatas.datasetVersion")
.setHint("eclipselink.left-join-fetch", "o.fileMetadatas.dataFile.releaseUser")
.setHint("eclipselink.left-join-fetch", "o.fileMetadatas.dataFile.creator")
.setHint("eclipselink.left-join-fetch", "o.fileMetadatas.dataFile.dataFileTags")
.getSingleResult();
}

Expand Down
40 changes: 12 additions & 28 deletions src/main/java/edu/harvard/iq/dataverse/api/Datasets.java
Original file line number Diff line number Diff line change
Expand Up @@ -467,19 +467,13 @@ public Response useDefaultCitationDate(@Context ContainerRequestContext crc, @Pa
@AuthRequired
@Path("{id}/versions")
public Response listVersions(@Context ContainerRequestContext crc, @PathParam("id") String id, @QueryParam("includeFiles") Boolean includeFiles, @QueryParam("limit") Integer limit, @QueryParam("offset") Integer offset) {
// @todo: when full versions list - including files - is requested, consider
// using datasetservice.findDeep() (needs testing on "monstrous" datasets
// with a lot of versions!)

return response( req -> {
Dataset dataset = findDatasetOrDie(id);
if (includeFiles == null ? false : includeFiles) {
dataset = datasetService.findDeep(dataset.getId());
}
//return ok( execCommand( new ListVersionsCommand(req, findDatasetOrDie(id), offset, limit) )
return ok( execCommand( new ListVersionsCommand(req, dataset, offset, limit) )

return ok( execCommand( new ListVersionsCommand(req, dataset, offset, limit, (includeFiles == null ? true : includeFiles)) )
.stream()
.map( d -> json(d, includeFiles == null ? false : includeFiles) )
.map( d -> json(d, includeFiles == null ? true : includeFiles) )
.collect(toJsonArray()));
}, getRequestUser(crc));
}
Expand All @@ -491,8 +485,15 @@ public Response getVersion(@Context ContainerRequestContext crc, @PathParam("id"
return response( req -> {
// @todo: consider using DatasetVersionServiceBean.findDeep() here 
DatasetVersion dsv = getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId), uriInfo, headers);
return (dsv == null || dsv.getId() == null) ? notFound("Dataset version not found")
: ok(json(dsv, includeFiles == null ? false : includeFiles));

if (dsv == null || dsv.getId() == null) {
return notFound("Dataset version not found");
}

if (includeFiles == null ? true : includeFiles) {
dsv = datasetversionService.findDeep(dsv.getId());
}
return ok(json(dsv, includeFiles == null ? true : includeFiles));
}, getRequestUser(crc));
}

Expand All @@ -512,23 +513,6 @@ public Response getVersionFiles(@Context ContainerRequestContext crc, @PathParam
}, getRequestUser(crc));
}

//@todo: remember to delete this! (for experiments only!)
@GET
@AuthRequired
@Path("{id}/versions/{versionId}/files2")
public Response getVersionFiles2(@Context ContainerRequestContext crc, @PathParam("id") String datasetId, @PathParam("versionId") Long versionId, @QueryParam("limit") Integer limit, @QueryParam("offset") Integer offset, @QueryParam("orderCriteria") String orderCriteria, @Context UriInfo uriInfo, @Context HttpHeaders headers) {
return response( req -> {
//DatasetVersion datasetVersion = getDatasetVersionOrDie(req, versionId, findDatasetOrDie(datasetId), uriInfo, headers);
DatasetVersionServiceBean.FileMetadatasOrderCriteria fileMetadatasOrderCriteria;
try {
fileMetadatasOrderCriteria = orderCriteria != null ? DatasetVersionServiceBean.FileMetadatasOrderCriteria.valueOf(orderCriteria) : DatasetVersionServiceBean.FileMetadatasOrderCriteria.NameAZ;
} catch (IllegalArgumentException e) {
return error(Response.Status.BAD_REQUEST, "Invalid order criteria: " + orderCriteria);
}
return ok(jsonFileMetadatas(datasetversionService.getFileMetadatasByDbId(versionId, limit, offset, fileMetadatasOrderCriteria)));
}, getRequestUser(crc));
}

@GET
@AuthRequired
@Path("{id}/dirindex")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.exception.CommandExecutionException;
import java.util.LinkedList;
import java.util.List;

Expand All @@ -28,31 +29,45 @@ public class ListVersionsCommand extends AbstractCommand<List<DatasetVersion>> {
private final Dataset ds;
private final Integer limit;
private final Integer offset;
private final Boolean deepLookup;

public ListVersionsCommand(DataverseRequest aRequest, Dataset aDataset) {
this(aRequest, aDataset, null, null);
}

public ListVersionsCommand(DataverseRequest aRequest, Dataset aDataset, Integer offset, Integer limit) {
this(aRequest, aDataset, null, null, false);
}

public ListVersionsCommand(DataverseRequest aRequest, Dataset aDataset, Integer offset, Integer limit, boolean deepLookup) {
super(aRequest, aDataset);
ds = aDataset;
this.offset = offset;
this.limit = limit;
this.deepLookup = deepLookup;
}

@Override
public List<DatasetVersion> execute(CommandContext ctxt) throws CommandException {

boolean includeUnpublished = ctxt.permissions().request(getRequest()).on(ds).has(Permission.EditDataset);

if (offset == null && limit == null) {
// @todo: this fragment can be dropped, and the service-based method below
// can be used for both cases.
// @todo: on the other hand, consider using datasetservice.findDeep()
// when a full list of versions is requested.
if (offset == null && limit == null) {

List<DatasetVersion> outputList = new LinkedList<>();
for (DatasetVersion dsv : ds.getVersions()) {
if (dsv.isReleased() || includeUnpublished) {
if (deepLookup) {
// @todo: when "deep"/extended lookup is requested, and
// we call .findDeep() to look up each version again,
// there is probably a more economical way to obtain the
// numeric ids of the versions, by a direct single query,
// rather than go through ds.getVersions() like we are now.
dsv = ctxt.datasetVersion().findDeep(dsv.getId());
if (dsv == null) {
throw new CommandExecutionException("Failed to look up full list of dataset versions", this);
}
}
outputList.add(dsv);
}
}
Expand Down

0 comments on commit ccd6b7d

Please sign in to comment.