Skip to content

Commit 66f56df

Browse files
committed
adding fix to pre existing thumbnails
1 parent ce0d500 commit 66f56df

File tree

2 files changed

+33
-19
lines changed

2 files changed

+33
-19
lines changed

src/main/java/edu/harvard/iq/dataverse/dataaccess/ImageThumbConverter.java

+21-10
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@
3535
import javax.imageio.stream.ImageOutputStream;
3636

3737
import edu.harvard.iq.dataverse.DataFile;
38+
import edu.harvard.iq.dataverse.DataFileServiceBean;
3839
import edu.harvard.iq.dataverse.util.FileUtil;
3940
import edu.harvard.iq.dataverse.util.SystemConfig;
4041
import java.io.ByteArrayOutputStream;
41-
import java.io.FileNotFoundException;
4242
import java.io.FileOutputStream;
4343
import java.io.OutputStream;
4444
import java.nio.channels.Channel;
4545
import java.nio.channels.Channels;
46-
import java.nio.channels.FileChannel;
4746
import java.nio.channels.ReadableByteChannel;
4847
import java.nio.channels.WritableByteChannel;
4948
import java.nio.file.Path;
5049
import java.nio.file.Paths;
51-
import java.util.logging.Level;
5250
import java.util.logging.Logger;
51+
52+
import jakarta.enterprise.inject.spi.CDI;
5353
import org.apache.commons.io.IOUtils;
5454
//import org.primefaces.util.Base64;
5555
import java.util.Base64;
@@ -172,15 +172,26 @@ public static InputStreamIO getImageThumbnailAsInputStream(StorageIO<DataFile> s
172172
return null;
173173
}
174174
int cachedThumbnailSize = (int) storageIO.getAuxObjectSize(THUMBNAIL_SUFFIX + size);
175+
InputStreamIO inputStreamIO = cachedThumbnailSize > 0 ? new InputStreamIO(cachedThumbnailInputStream, cachedThumbnailSize) : null;
175176

176-
InputStreamIO inputStreamIO = new InputStreamIO(cachedThumbnailInputStream, cachedThumbnailSize);
177-
178-
inputStreamIO.setMimeType(THUMBNAIL_MIME_TYPE);
177+
if (inputStreamIO != null) {
178+
inputStreamIO.setMimeType(THUMBNAIL_MIME_TYPE);
179179

180-
String fileName = storageIO.getFileName();
181-
if (fileName != null) {
182-
fileName = fileName.replaceAll("\\.[^\\.]*$", THUMBNAIL_FILE_EXTENSION);
183-
inputStreamIO.setFileName(fileName);
180+
String fileName = storageIO.getFileName();
181+
if (fileName != null) {
182+
fileName = fileName.replaceAll("\\.[^\\.]*$", THUMBNAIL_FILE_EXTENSION);
183+
inputStreamIO.setFileName(fileName);
184+
}
185+
} else {
186+
if (storageIO.getDataFile() != null && cachedThumbnailSize == 0) {
187+
// We found an older 0 length thumbnail. Newer image uploads will not have this issue.
188+
// Once cleaned up, this thumbnail will no longer have this issue
189+
logger.warning("Cleaning up zero sized thumbnail ID: "+ storageIO.getDataFile().getId());
190+
storageIO.getDataFile().setPreviewImageFail(true);
191+
storageIO.getDataFile().setPreviewImageAvailable(false);
192+
DataFileServiceBean datafileService = CDI.current().select(DataFileServiceBean.class).get();
193+
datafileService.save(storageIO.getDataFile());
194+
}
184195
}
185196
return inputStreamIO;
186197
} catch (Exception ioex) {

src/main/java/edu/harvard/iq/dataverse/dataset/DatasetUtil.java

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
package edu.harvard.iq.dataverse.dataset;
22

3-
import edu.harvard.iq.dataverse.DataFile;
4-
import edu.harvard.iq.dataverse.Dataset;
5-
import edu.harvard.iq.dataverse.DatasetField;
6-
import edu.harvard.iq.dataverse.DatasetVersion;
7-
import edu.harvard.iq.dataverse.FileMetadata;
8-
import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
3+
import edu.harvard.iq.dataverse.*;
94
import edu.harvard.iq.dataverse.authorization.groups.impl.ipaddress.ip.IpAddress;
105
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
116
import edu.harvard.iq.dataverse.dataaccess.DataAccess;
@@ -33,15 +28,14 @@
3328
import java.util.*;
3429
import java.util.logging.Logger;
3530
import javax.imageio.ImageIO;
31+
32+
import jakarta.enterprise.inject.spi.CDI;
3633
import org.apache.commons.io.IOUtils;
37-
import static edu.harvard.iq.dataverse.dataaccess.DataAccess.getStorageIO;
3834
import edu.harvard.iq.dataverse.datasetutility.FileSizeChecker;
3935
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
4036
import edu.harvard.iq.dataverse.license.License;
41-
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
4237
import edu.harvard.iq.dataverse.util.StringUtil;
4338
import static edu.harvard.iq.dataverse.util.json.JsonPrinter.json;
44-
import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder;
4539

4640
import org.apache.commons.io.FileUtils;
4741
import org.apache.commons.lang3.EnumUtils;
@@ -479,8 +473,17 @@ public static InputStream getLogoAsInputStream(Dataset dataset) {
479473
}
480474

481475
try {
476+
boolean origImageFailed = thumbnailFile.isPreviewImageFail();
482477
InputStreamIO isIO = ImageThumbConverter.getImageThumbnailAsInputStream(thumbnailFile.getStorageIO(),
483478
ImageThumbConverter.DEFAULT_DATASETLOGO_SIZE);
479+
if (!origImageFailed && thumbnailFile.isPreviewImageFail()) {
480+
// We found an older 0 length thumbnail. Newer image uploads will not have this issue.
481+
// Once cleaned up, this thumbnail will no longer have this issue
482+
// ImageThumbConverter fixed the DataFile
483+
// Now we need to update dataset since this is a bad logo
484+
DatasetServiceBean datasetService = CDI.current().select(DatasetServiceBean.class).get();
485+
datasetService.removeDatasetThumbnail(dataset);
486+
}
484487
in = isIO != null ? isIO.getInputStream() : null;
485488
} catch (IOException ioex) {
486489
logger.warning("getLogo(): Failed to get logo from DataFile for " + dataset.getStorageIdentifier()

0 commit comments

Comments
 (0)