Skip to content

Commit

Permalink
Merge branch 'develop' into 3747-swift-and-compute-button #3747
Browse files Browse the repository at this point in the history
  • Loading branch information
pdurbin committed Apr 7, 2017
2 parents 6f1e12c + 308f169 commit a496eac
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 19 deletions.
11 changes: 11 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DataFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.dataaccess.DataAccess;
import edu.harvard.iq.dataverse.dataaccess.DataFileIO;
import edu.harvard.iq.dataverse.dataset.DatasetThumbnail;
import edu.harvard.iq.dataverse.ingest.IngestReport;
import edu.harvard.iq.dataverse.ingest.IngestRequest;
import edu.harvard.iq.dataverse.util.BundleUtil;
Expand Down Expand Up @@ -998,6 +999,16 @@ public String getCreateDateFormattedYYYYMMDD() {
}
return null;
}


public String getThumbnailString() {
DatasetThumbnail datasetThumbnail = FileUtil.getThumbnail(this);
if (datasetThumbnail == null) {
return null;
}
return datasetThumbnail.getBase64image();
}


} // end of class

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1015,14 +1015,15 @@ public boolean thumbnailSupported (DataFile file) {
return (contentType != null &&
(contentType.startsWith("image/") ||
contentType.equalsIgnoreCase("application/pdf") ||
(file.isTabularData() && file.hasGeospatialTag()) ||
contentType.equalsIgnoreCase(MIME_TYPE_GEO_SHAPE)));
}

/*
/*
* This method will return true if the thumbnail is *actually available* and
* ready to be downloaded. (it will try to generate a thumbnail for supported
* file types, if not yet available)
*/
*/
public boolean isThumbnailAvailable (DataFile file) {
if (file == null) {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,11 +85,25 @@ public void writeTo(DownloadInstance di, Class<?> clazz, Type type, Annotation[]
} catch (java.lang.NumberFormatException ex) {
accessObject = ImageThumbConverter.getImageThumb((FileAccessIO)accessObject);
}

// Modify the filename, to reflect that it's a PNG file now.
// (we are now generating thumbnails for tabular files -
// and the original .tab extension may be confusing some browsers!)
String fileName = accessObject.getFileName();
fileName = fileName.replaceAll("\\.[^\\.]*$", ".png");
accessObject.setFileName(fileName);
// (also, now that have tabular data files that can
// have thumbnail previews... obviously, we don't want to
// add the variable header to the image stream!
accessObject.setNoVarHeader(Boolean.TRUE);
accessObject.setVarHeader(null);
}
}


if (sf.isTabularData()) {
} else if (sf.isTabularData()) {
// We can now generate thumbnails for some tabular data files (specifically,
// tab files tagged as "geospatial"). We are going to assume that you can
// do only ONE thing at a time - request the thumbnail for the file, or
// request any tabular-specific services.

if (di.getConversionParam().equals("noVarHeader")) {
accessObject.setNoVarHeader(Boolean.TRUE);
accessObject.setVarHeader(null);
Expand Down Expand Up @@ -219,7 +233,7 @@ public void writeTo(DownloadInstance di, Class<?> clazz, Type type, Annotation[]

// before writing out any bytes from the input stream, flush
// any extra content, such as the variable header for the
// subsettable files: (??)4
// subsettable files:

if (accessObject.getVarHeader() != null) {
if (accessObject.getVarHeader().getBytes().length > 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -724,13 +724,20 @@ public Response deleteWorldMapLayerData(String jsonData){
if (mapLayerMetadata==null){
return error(Response.Status.EXPECTATION_FAILED, "No map layer metadata found.");
}



// (6) Delete the mapLayerMetadata
// (note: permissions checked here for a second time by the mapLayerMetadataService call)
//
if (!(this.mapLayerMetadataService.deleteMapLayerMetadataObject(mapLayerMetadata, wmToken.getDataverseUser()))){
return error(Response.Status.PRECONDITION_FAILED, "Failed to delete layer");
};

// (7) For the DataFile, set "previewImageAvailable" to False
//
dfile.setPreviewImageAvailable(false);
dataFileService.save(dfile);


return ok("Map layer metadata deleted.");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ public static boolean isThumbnailAvailable(DataFile file, int size) {
imageThumbFileName = generatePDFThumb(dataAccess.getFileSystemPath().toString(), size);
} else if (file.getContentType().equalsIgnoreCase("application/zipped-shapefile")) {
imageThumbFileName = generateWorldMapThumb(dataAccess.getFileSystemPath().toString(), size);
} else if (file.isTabularData() && file.hasGeospatialTag()) {
imageThumbFileName = generateWorldMapThumb(dataAccess.getFileSystemPath().toString(), size);
}
} catch (IOException ioEx) {
return false;
Expand Down Expand Up @@ -216,24 +218,27 @@ public static String getImageAsBase64FromFile(File imageFile) {
return null;
}

public static File getImageThumbAsFile(FileAccessIO fileAccess, int size ) {
public static File getImageThumbAsFile(FileAccessIO fileAccess, int size) {
String imageThumbFileName = null;
try {
if (fileAccess.getDataFile() != null && fileAccess.getDataFile().getContentType().substring(0, 6).equalsIgnoreCase("image/")) {
imageThumbFileName = generateImageThumb(fileAccess.getFileSystemPath().toString(), size);

} else if (fileAccess.getDataFile() != null && fileAccess.getDataFile().getContentType().equalsIgnoreCase("application/pdf")) {
imageThumbFileName = generatePDFThumb(fileAccess.getFileSystemPath().toString(), size);

} else if (fileAccess.getDataFile() != null && fileAccess.getDataFile().getContentType().equalsIgnoreCase("application/zipped-shapefile")) {
imageThumbFileName = generateWorldMapThumb(fileAccess.getFileSystemPath().toString(), size);


} else if (fileAccess.getDataFile() != null && fileAccess.getDataFile().isTabularData()) {
imageThumbFileName = generateWorldMapThumb(fileAccess.getFileSystemPath().toString(), size);

} else {
return null;
}

} catch (IOException ioEx) {
return null;
return null;
}

if (imageThumbFileName != null) {
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/edu/harvard/iq/dataverse/dataset/DatasetUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,18 @@ public static List<DatasetThumbnail> getThumbnailCandidates(Dataset dataset, boo
}
}
for (FileMetadata fileMetadata : dataset.getLatestVersion().getFileMetadatas()) {
DataFile dataFile = fileMetadata.getDataFile();
if (dataFile != null && dataFile.isImage() && !dataFile.isRestricted()) {
String imageSourceBase64 = ImageThumbConverter.getImageThumbAsBase64(dataFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE);
DataFile dataFile = fileMetadata.getDataFile();

if (dataFile != null && ImageThumbConverter.isThumbnailAvailable(dataFile)
&& !dataFile.isRestricted()) {
String imageSourceBase64 = null;
imageSourceBase64 = ImageThumbConverter.getImageThumbAsBase64(dataFile, ImageThumbConverter.DEFAULT_CARDIMAGE_SIZE);

if (imageSourceBase64 != null) {
DatasetThumbnail datasetThumbnail = new DatasetThumbnail(imageSourceBase64, dataFile);
thumbnails.add(datasetThumbnail);
}
}
}
}
return thumbnails;
}
Expand All @@ -88,6 +92,7 @@ public static DatasetThumbnail getThumbnail(Dataset dataset) {
}
} else {
DataFile thumbnailFile = dataset.getThumbnailFile();

if (thumbnailFile == null) {
if (dataset.isUseGenericThumbnail()) {
logger.fine(title + " does not have a thumbnail and is 'Use Generic'.");
Expand Down
9 changes: 9 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import edu.harvard.iq.dataverse.FileMetadata;
import edu.harvard.iq.dataverse.TermsOfUseAndAccess;
import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter;
import edu.harvard.iq.dataverse.dataset.DatasetThumbnail;
import edu.harvard.iq.dataverse.datasetutility.FileExceedsMaxSizeException;
import edu.harvard.iq.dataverse.ingest.IngestReport;
import edu.harvard.iq.dataverse.ingest.IngestServiceShapefileHelper;
Expand Down Expand Up @@ -1351,5 +1352,13 @@ public static String rescaleImage(File file) throws IOException {
File resizedFile = new File(pathToResizedFile);
return ImageThumbConverter.getImageAsBase64FromFile(resizedFile);
}

public static DatasetThumbnail getThumbnail(DataFile file) {

String imageSourceBase64 = ImageThumbConverter.getImageThumbAsBase64(file, ImageThumbConverter.DEFAULT_THUMBNAIL_SIZE);
DatasetThumbnail defaultDatasetThumbnail = new DatasetThumbnail(imageSourceBase64, file);
return defaultDatasetThumbnail;

}

}
3 changes: 2 additions & 1 deletion src/main/webapp/filesFragment.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,8 @@
<!-- 4.2.1 optimization: replaced dataFileServiceBean.isThumbnailAvailable(fileMetadata.dataFile, dataverseSession.user) with DatasetPage.isThumbnailAvailable(fileMetadata); see comments in the bean -->
<span class="file-thumbnail-preview-img" jsf:rendered="#{!empty fileMetadata.dataFile.id and DatasetPage.isThumbnailAvailable(fileMetadata)}"
data-container="body" data-toggle="popover" data-placement="top" data-trigger="hover" data-html="true" data-content="&lt;img src=&#34;/api/access/datafile/#{fileMetadata.dataFile.id}?imageThumb=400&#34; alt=&#34; #{bundle['file.preview']} #{fileMetadata.label}&#34; /&gt;">
<p:graphicImage value="/api/access/datafile/#{fileMetadata.dataFile.id}?imageThumb=true"/>

<h:graphicImage value="#{fileMetadata.dataFile.thumbnailString}" />
</span>

<!-- Default Icon -->
Expand Down

0 comments on commit a496eac

Please sign in to comment.