From fafb6e44af700f7103204f6cd16b5722789ea6cd Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Wed, 20 May 2026 13:40:44 -0400 Subject: [PATCH 1/6] Auto Create thumbnail so Search API will return image_url when publishing Datasets --- ...1588-search-api-doesnt-return-image-url.md | 4 ++ .../command/impl/PublishDatasetCommand.java | 14 ++++++ .../harvard/iq/dataverse/api/SearchIT.java | 50 ++++++++++++++++++- 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 doc/release-notes/11588-search-api-doesnt-return-image-url.md diff --git a/doc/release-notes/11588-search-api-doesnt-return-image-url.md b/doc/release-notes/11588-search-api-doesnt-return-image-url.md new file mode 100644 index 00000000000..6d0a474281c --- /dev/null +++ b/doc/release-notes/11588-search-api-doesnt-return-image-url.md @@ -0,0 +1,4 @@ +## BUG ## +Search API doesn't return image_url after newly created dataset is published. + +The Dataset thumbnail will be created automatically when a Dataset is published under the following conditions: The Dataset has no existing thumbnail; The Dataset has image files that can be converted to a thumbnail; The Feature Flag "disable-dataset-thumbnail-autoselect" is not enabled; diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java index df7cbc94c8d..8fab564f4e7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java @@ -1,13 +1,18 @@ package edu.harvard.iq.dataverse.engine.command.impl; +import com.rometools.utils.Lists; import edu.harvard.iq.dataverse.*; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; +import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter; +import edu.harvard.iq.dataverse.dataset.DatasetThumbnail; +import edu.harvard.iq.dataverse.dataset.DatasetUtil; import edu.harvard.iq.dataverse.engine.command.CommandContext; 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.IllegalCommandException; +import edu.harvard.iq.dataverse.settings.FeatureFlags; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.workflow.Workflow; import edu.harvard.iq.dataverse.workflow.WorkflowContext; @@ -165,6 +170,15 @@ public PublishDatasetResult execute(CommandContext ctxt) throws CommandException lock.setInfo(info); ctxt.datasets().addDatasetLock(theDataset, lock); } + + // Populate thumbnail if needed (Only look for DataFiles) + if (theDataset.getThumbnailFile() == null && !FeatureFlags.DISABLE_DATASET_THUMBNAIL_AUTOSELECT.enabled()) { + List candidatesList = DatasetUtil.getThumbnailCandidates(theDataset, false, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + if (Lists.isNotEmpty(candidatesList)) { + theDataset.setThumbnailFile(candidatesList.get(0).getDataFile()); + } + } + try { theDataset = ctxt.em().merge(theDataset); } catch (OptimisticLockException e) { diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java index 2692b6e464f..a15c638c9d4 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java @@ -37,8 +37,8 @@ import static java.lang.Thread.sleep; import java.nio.file.Path; import java.nio.file.Paths; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; + +import static org.hamcrest.CoreMatchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -2422,4 +2422,50 @@ public void testFileAddedAfterPublicationIsIndexed() { .statusCode(OK.getStatusCode()); } + @Test + public void testWithThumbnailAutoSelect() { + Response createUser = UtilIT.createRandomUser(); + createUser.prettyPrint(); + String username = UtilIT.getUsernameFromResponse(createUser); + String apiToken = UtilIT.getApiTokenFromResponse(createUser); + + Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken); + createDataverseResponse.prettyPrint(); + String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse); + UtilIT.publishDataverseViaNativeApi(dataverseAlias, apiToken); + + Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken); + createDatasetResponse.prettyPrint(); + Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse); + String datasetPersistentId = UtilIT.getDatasetPersistentIdFromResponse(createDatasetResponse); + + uploadFile(datasetId, "src/test/resources/tab/test.tab", apiToken); + long dataFileId1 = uploadFile(datasetId, "src/main/webapp/resources/images/dataverse-icon-1200.png", apiToken); + uploadFile(datasetId, "src/main/webapp/resources/images/dataverseproject.png", apiToken); + Response publishResponse = UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiToken); + publishResponse.prettyPrint(); + publishResponse.then().assertThat().statusCode(OK.getStatusCode()); + UtilIT.sleepForReindex(datasetId.toString(), apiToken, 4); + + Response search1 = UtilIT.search("id:dataset_" + datasetId, apiToken); + search1.prettyPrint(); + search1.then().assertThat() + .body("data.items[0].name", equalTo("Darwin's Finches")) + .body("data.items[0].image_url", notNullValue()) + .statusCode(200); + } + + private long uploadFile(Integer datasetId, String pathToFile, String apiToken) { + JsonObjectBuilder json = Json.createObjectBuilder() + .add("description", "Test Data") + .add("directoryLabel", "data/subdir1") + .add("categories", Json.createArrayBuilder() + .add("Data") + ); + Response addResponse = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile, json.build(), apiToken); + addResponse.prettyPrint(); + addResponse.then().assertThat().statusCode(200); + assertTrue(UtilIT.sleepForLock(datasetId.longValue(), "Ingest", apiToken, UtilIT.MAXIMUM_INGEST_LOCK_DURATION), "Failed test if Ingest Lock exceeds max duration " + pathToFile); + return UtilIT.getDataFileIdFromResponse(addResponse); + } } From 3603c9e07c83533b174d0ee458a4c0f51c5cfa63 Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Wed, 20 May 2026 13:55:48 -0400 Subject: [PATCH 2/6] clean up test --- .../java/edu/harvard/iq/dataverse/api/SearchIT.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java index a15c638c9d4..22ad0ed270f 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java @@ -2426,21 +2426,22 @@ public void testFileAddedAfterPublicationIsIndexed() { public void testWithThumbnailAutoSelect() { Response createUser = UtilIT.createRandomUser(); createUser.prettyPrint(); - String username = UtilIT.getUsernameFromResponse(createUser); + createUser.then().assertThat().statusCode(OK.getStatusCode()); String apiToken = UtilIT.getApiTokenFromResponse(createUser); Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken); createDataverseResponse.prettyPrint(); + createDataverseResponse.then().assertThat().statusCode(CREATED.getStatusCode()); String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse); UtilIT.publishDataverseViaNativeApi(dataverseAlias, apiToken); Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken); createDatasetResponse.prettyPrint(); + createDataverseResponse.then().assertThat().statusCode(CREATED.getStatusCode()); Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse); - String datasetPersistentId = UtilIT.getDatasetPersistentIdFromResponse(createDatasetResponse); uploadFile(datasetId, "src/test/resources/tab/test.tab", apiToken); - long dataFileId1 = uploadFile(datasetId, "src/main/webapp/resources/images/dataverse-icon-1200.png", apiToken); + uploadFile(datasetId, "src/main/webapp/resources/images/dataverse-icon-1200.png", apiToken); uploadFile(datasetId, "src/main/webapp/resources/images/dataverseproject.png", apiToken); Response publishResponse = UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiToken); publishResponse.prettyPrint(); @@ -2452,7 +2453,7 @@ public void testWithThumbnailAutoSelect() { search1.then().assertThat() .body("data.items[0].name", equalTo("Darwin's Finches")) .body("data.items[0].image_url", notNullValue()) - .statusCode(200); + .statusCode(OK.getStatusCode()); } private long uploadFile(Integer datasetId, String pathToFile, String apiToken) { @@ -2464,7 +2465,7 @@ private long uploadFile(Integer datasetId, String pathToFile, String apiToken) { ); Response addResponse = UtilIT.uploadFileViaNative(datasetId.toString(), pathToFile, json.build(), apiToken); addResponse.prettyPrint(); - addResponse.then().assertThat().statusCode(200); + addResponse.then().assertThat().statusCode(OK.getStatusCode()); assertTrue(UtilIT.sleepForLock(datasetId.longValue(), "Ingest", apiToken, UtilIT.MAXIMUM_INGEST_LOCK_DURATION), "Failed test if Ingest Lock exceeds max duration " + pathToFile); return UtilIT.getDataFileIdFromResponse(addResponse); } From 33d20ef4e019dbc640e157871653d320d90d5984 Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Thu, 21 May 2026 13:35:43 -0400 Subject: [PATCH 3/6] review comments --- .../java/edu/harvard/iq/dataverse/Dataset.java | 4 ++++ .../iq/dataverse/ThumbnailServiceWrapper.java | 2 +- .../impl/FinalizeDatasetPublicationCommand.java | 14 +++++++++++++- .../engine/command/impl/PublishDatasetCommand.java | 14 -------------- .../iq/dataverse/util/json/JsonPrinter.java | 3 +++ .../edu/harvard/iq/dataverse/api/SearchIT.java | 9 ++++++++- 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/Dataset.java b/src/main/java/edu/harvard/iq/dataverse/Dataset.java index 71686adbc4b..39dccdcd4ea 100644 --- a/src/main/java/edu/harvard/iq/dataverse/Dataset.java +++ b/src/main/java/edu/harvard/iq/dataverse/Dataset.java @@ -763,6 +763,10 @@ public void setThumbnailFile(DataFile thumbnailFile) { this.thumbnailFile = thumbnailFile; } + public String getThumbnailUrl() { + return thumbnailFile != null ? SystemConfig.getDataverseSiteUrlStatic() + "/api/datasets/" + this.getId() + "/logo" : null; + } + public boolean isUseGenericThumbnail() { return useGenericThumbnail; } diff --git a/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java b/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java index 46736da73d4..ab10d71177d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java @@ -212,7 +212,7 @@ public String getDatasetCardImageAsUrl(Dataset dataset, Long versionId, boolean return null; } } - String url = SystemConfig.getDataverseSiteUrlStatic() + "/api/datasets/" + dataset.getId() + "/logo"; + String url = dataset.getThumbnailUrl(); logger.fine("getDatasetCardImageAsUrl: " + url); this.dvobjectThumbnailsMap.put(datasetId,url); return url; diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java index 51e37efe2b2..e5ce7b4ba5c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.engine.command.impl; +import com.rometools.utils.Lists; import edu.harvard.iq.dataverse.ControlledVocabularyValue; import edu.harvard.iq.dataverse.CurationStatus; import edu.harvard.iq.dataverse.DataFile; @@ -17,6 +18,8 @@ import edu.harvard.iq.dataverse.UserNotification; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; +import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter; +import edu.harvard.iq.dataverse.dataset.DatasetThumbnail; import edu.harvard.iq.dataverse.dataset.DatasetUtil; import edu.harvard.iq.dataverse.engine.command.CommandContext; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; @@ -24,6 +27,7 @@ import edu.harvard.iq.dataverse.engine.command.exception.CommandException; import edu.harvard.iq.dataverse.pidproviders.PidProvider; import edu.harvard.iq.dataverse.privateurl.PrivateUrl; +import edu.harvard.iq.dataverse.settings.FeatureFlags; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.workflow.WorkflowContext; import edu.harvard.iq.dataverse.workflow.WorkflowContext.TriggerType; @@ -171,7 +175,15 @@ public Dataset execute(CommandContext ctxt) throws CommandException { //Use dataset pub date (which may not be the current date for migrated datasets) updateFiles(new Timestamp(version.getReleaseTime().getTime()), ctxt); - + + // Populate thumbnail if needed and allowed (Only look for DataFiles) + if (theDataset.getThumbnailFile() == null && !theDataset.isUseGenericThumbnail() && !FeatureFlags.DISABLE_DATASET_THUMBNAIL_AUTOSELECT.enabled()) { + List candidatesList = DatasetUtil.getThumbnailCandidates(theDataset, false, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); + if (Lists.isNotEmpty(candidatesList)) { + theDataset.setThumbnailFile(candidatesList.get(0).getDataFile()); + } + } + // // TODO: Not sure if this .merge() is necessary here - ? // I'm moving a bunch of code from PublishDatasetCommand here; and this .merge() diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java index 8fab564f4e7..df7cbc94c8d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/PublishDatasetCommand.java @@ -1,18 +1,13 @@ package edu.harvard.iq.dataverse.engine.command.impl; -import com.rometools.utils.Lists; import edu.harvard.iq.dataverse.*; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; -import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter; -import edu.harvard.iq.dataverse.dataset.DatasetThumbnail; -import edu.harvard.iq.dataverse.dataset.DatasetUtil; import edu.harvard.iq.dataverse.engine.command.CommandContext; 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.IllegalCommandException; -import edu.harvard.iq.dataverse.settings.FeatureFlags; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.workflow.Workflow; import edu.harvard.iq.dataverse.workflow.WorkflowContext; @@ -170,15 +165,6 @@ public PublishDatasetResult execute(CommandContext ctxt) throws CommandException lock.setInfo(info); ctxt.datasets().addDatasetLock(theDataset, lock); } - - // Populate thumbnail if needed (Only look for DataFiles) - if (theDataset.getThumbnailFile() == null && !FeatureFlags.DISABLE_DATASET_THUMBNAIL_AUTOSELECT.enabled()) { - List candidatesList = DatasetUtil.getThumbnailCandidates(theDataset, false, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); - if (Lists.isNotEmpty(candidatesList)) { - theDataset.setThumbnailFile(candidatesList.get(0).getDataFile()); - } - } - try { theDataset = ctxt.em().merge(theDataset); } catch (OptimisticLockException e) { diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java index 729596fb3d4..9c75c79308a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java @@ -552,6 +552,9 @@ public static JsonObjectBuilder json(Dataset ds, Boolean returnOwners) { .add("publisher", BrandingUtil.getInstallationBrandName()) .add("publicationDate", ds.getPublicationDateFormattedYYYYMMDD()) .add("storageIdentifier", ds.getStorageIdentifier()); + if (ds.getThumbnailFile() != null) { + bld.add("image_url", ds.getThumbnailUrl()); + } if (ds.getGuestbook() != null) { bld.add("guestbookId", ds.getGuestbook().getId()); } diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java index 22ad0ed270f..df1477c6e59 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SearchIT.java @@ -2437,8 +2437,9 @@ public void testWithThumbnailAutoSelect() { Response createDatasetResponse = UtilIT.createRandomDatasetViaNativeApi(dataverseAlias, apiToken); createDatasetResponse.prettyPrint(); - createDataverseResponse.then().assertThat().statusCode(CREATED.getStatusCode()); + createDatasetResponse.then().assertThat().statusCode(CREATED.getStatusCode()); Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse); + String persistentId = UtilIT.getDatasetPersistentIdFromResponse(createDatasetResponse); uploadFile(datasetId, "src/test/resources/tab/test.tab", apiToken); uploadFile(datasetId, "src/main/webapp/resources/images/dataverse-icon-1200.png", apiToken); @@ -2454,6 +2455,12 @@ public void testWithThumbnailAutoSelect() { .body("data.items[0].name", equalTo("Darwin's Finches")) .body("data.items[0].image_url", notNullValue()) .statusCode(OK.getStatusCode()); + + Response getDatasetResponse = UtilIT.getDatasetWithOwners(persistentId, apiToken, false); + getDatasetResponse.prettyPrint(); + getDatasetResponse.then().assertThat() + .body("data.image_url", notNullValue()) + .statusCode(OK.getStatusCode()); } private long uploadFile(Integer datasetId, String pathToFile, String apiToken) { From 371e90bf0eb3a90a163a07c9580213292f3a09af Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Thu, 21 May 2026 13:55:01 -0400 Subject: [PATCH 4/6] review comments --- .../command/impl/FinalizeDatasetPublicationCommand.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java index e5ce7b4ba5c..e5bf93f283d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java @@ -176,12 +176,9 @@ public Dataset execute(CommandContext ctxt) throws CommandException { //Use dataset pub date (which may not be the current date for migrated datasets) updateFiles(new Timestamp(version.getReleaseTime().getTime()), ctxt); - // Populate thumbnail if needed and allowed (Only look for DataFiles) - if (theDataset.getThumbnailFile() == null && !theDataset.isUseGenericThumbnail() && !FeatureFlags.DISABLE_DATASET_THUMBNAIL_AUTOSELECT.enabled()) { - List candidatesList = DatasetUtil.getThumbnailCandidates(theDataset, false, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE); - if (Lists.isNotEmpty(candidatesList)) { - theDataset.setThumbnailFile(candidatesList.get(0).getDataFile()); - } + // Populate thumbnail if needed and allowed + if (theDataset.getThumbnailFile() == null && !theDataset.isUseGenericThumbnail()) { + ctxt.datasetVersion().getThumbnailByVersionId(version.getId()); } // From eac1101530518c389cbf306672cf9d8bc3a7771e Mon Sep 17 00:00:00 2001 From: Steven Winship <39765413+stevenwinship@users.noreply.github.com> Date: Thu, 21 May 2026 14:11:08 -0400 Subject: [PATCH 5/6] clean up JsonPrinter --- .../java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java index 9c75c79308a..8f975a3c976 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java @@ -551,10 +551,8 @@ public static JsonObjectBuilder json(Dataset ds, Boolean returnOwners) { .add("separator", ds.getSeparator()) .add("publisher", BrandingUtil.getInstallationBrandName()) .add("publicationDate", ds.getPublicationDateFormattedYYYYMMDD()) + .add("image_url", ds.getThumbnailUrl()) .add("storageIdentifier", ds.getStorageIdentifier()); - if (ds.getThumbnailFile() != null) { - bld.add("image_url", ds.getThumbnailUrl()); - } if (ds.getGuestbook() != null) { bld.add("guestbookId", ds.getGuestbook().getId()); } From cde53e4d78dedd8adc63e3eeec96b93f62db4916 Mon Sep 17 00:00:00 2001 From: Leonid Andreev Date: Fri, 22 May 2026 16:04:35 -0400 Subject: [PATCH 6/6] Fixing an old bug that resulted in jsf triggering auto-selection of a dataset-level thumbnail in some situations. #11588 --- .../java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java b/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java index ab10d71177d..eca3f470938 100644 --- a/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/ThumbnailServiceWrapper.java @@ -208,7 +208,7 @@ public String getDatasetCardImageAsUrl(Dataset dataset, Long versionId, boolean // If no other logo we attempt to auto-select via the optimized, native // query-based method // from the DatasetVersionService: - if (!hasDatasetLogo && datasetVersionService.getThumbnailByVersionId(versionId) == null) { + if (!hasDatasetLogo && (!autoselect || datasetVersionService.getThumbnailByVersionId(versionId) == null)) { return null; } }