private void _queueGeneration(FileVersion sourceFileVersion, FileVersion destinationFileVersion) { if (_fileVersionIds.contains(destinationFileVersion.getFileVersionId())) { return; } boolean generateImages = false; String extension = destinationFileVersion.getExtension(); if (extension.equals("pdf")) { generateImages = true; } else if (DocumentConversionUtil.isEnabled()) { String[] conversions = DocumentConversionUtil.getConversions(extension); for (String conversion : conversions) { if (conversion.equals("pdf")) { generateImages = true; break; } } } if (generateImages) { _fileVersionIds.add(destinationFileVersion.getFileVersionId()); sendGenerationMessage( DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR, sourceFileVersion, destinationFileVersion); } }
private void _generateImages(FileVersion sourceFileVersion, FileVersion destinationFileVersion) throws Exception { InputStream inputStream = null; try { if (sourceFileVersion != null) { copy(sourceFileVersion, destinationFileVersion); return; } if (_hasImages(destinationFileVersion)) { return; } String extension = destinationFileVersion.getExtension(); if (extension.equals("pdf")) { if (destinationFileVersion instanceof LiferayFileVersion) { try { LiferayFileVersion liferayFileVersion = (LiferayFileVersion) destinationFileVersion; File file = liferayFileVersion.getFile(false); _generateImages(destinationFileVersion, file); return; } catch (UnsupportedOperationException uoe) { } } inputStream = destinationFileVersion.getContentStream(false); _generateImages(destinationFileVersion, inputStream); } else if (DocumentConversionUtil.isEnabled()) { inputStream = destinationFileVersion.getContentStream(false); String tempFileId = DLUtil.getTempFileId( destinationFileVersion.getFileEntryId(), destinationFileVersion.getVersion()); File file = DocumentConversionUtil.convert(tempFileId, inputStream, extension, "pdf"); _generateImages(destinationFileVersion, file); } } catch (NoSuchFileEntryException nsfee) { } finally { StreamUtil.cleanUp(inputStream); _fileVersionIds.remove(destinationFileVersion.getFileVersionId()); } }
protected void testVersionUpdate( String addFileName, byte[] addBytes, String addMimeType, String updateFileName, byte[] updateBytes, String updateMimeType) throws PortalException, SystemException { String description = StringPool.BLANK; String changeLog = StringPool.BLANK; ServiceContext serviceContext = ServiceTestUtil.getServiceContext(group.getGroupId()); FileEntry fileEntry = DLAppServiceUtil.addFileEntry( group.getGroupId(), parentFolder.getFolderId(), addFileName, addMimeType, addFileName, description, changeLog, addBytes, serviceContext); fileEntry = DLAppServiceUtil.updateFileEntry( fileEntry.getFileEntryId(), updateFileName, updateMimeType, updateFileName, description, changeLog, false, updateBytes, serviceContext); FileVersion fileVersion = fileEntry.getFileVersion(); Assert.assertEquals(DLFileEntryConstants.VERSION_DEFAULT, fileVersion.getVersion()); Assert.assertEquals(updateMimeType, fileVersion.getMimeType()); Assert.assertEquals(updateBytes.length, fileVersion.getSize()); Assert.assertEquals(fileVersion.getExtension(), fileEntry.getExtension()); Assert.assertEquals(fileVersion.getMimeType(), fileEntry.getMimeType()); Assert.assertEquals(fileVersion.getSize(), fileEntry.getSize()); }
private void _generateImages(FileVersion fileVersion) throws Exception { try { if (_hasImages(fileVersion)) { return; } String extension = fileVersion.getExtension(); if (extension.equals("pdf")) { if (fileVersion instanceof LiferayFileVersion) { try { LiferayFileVersion liferayFileVersion = (LiferayFileVersion) fileVersion; File file = liferayFileVersion.getFile(false); _generateImages(fileVersion, file); return; } catch (UnsupportedOperationException uoe) { } } InputStream inputStream = fileVersion.getContentStream(false); _generateImages(fileVersion, inputStream); } else if (DocumentConversionUtil.isEnabled()) { InputStream inputStream = fileVersion.getContentStream(false); String tempFileId = DLUtil.getTempFileId(fileVersion.getFileEntryId(), fileVersion.getVersion()); File file = DocumentConversionUtil.convert(tempFileId, inputStream, extension, "pdf"); _generateImages(fileVersion, file); } } catch (NoSuchFileEntryException nsfee) { } finally { _fileVersionIds.remove(fileVersion.getFileVersionId()); } }
protected void compareVersions(RenderRequest renderRequest) throws Exception { long sourceFileVersionId = ParamUtil.getLong(renderRequest, "sourceFileVersionId"); long targetFileVersionId = ParamUtil.getLong(renderRequest, "targetFileVersionId"); FileVersion sourceFileVersion = _dlAppService.getFileVersion(sourceFileVersionId); InputStream sourceIs = sourceFileVersion.getContentStream(false); String sourceExtension = sourceFileVersion.getExtension(); if (sourceExtension.equals("css") || sourceExtension.equals("htm") || sourceExtension.equals("html") || sourceExtension.equals("js") || sourceExtension.equals("txt") || sourceExtension.equals("xml")) { String sourceContent = HtmlUtil.escape(StringUtil.read(sourceIs)); sourceIs = new UnsyncByteArrayInputStream(sourceContent.getBytes(StringPool.UTF8)); } FileVersion targetFileVersion = _dlAppLocalService.getFileVersion(targetFileVersionId); InputStream targetIs = targetFileVersion.getContentStream(false); String targetExtension = targetFileVersion.getExtension(); if (targetExtension.equals("css") || targetExtension.equals("htm") || targetExtension.equals("html") || targetExtension.equals("js") || targetExtension.equals("txt") || targetExtension.equals("xml")) { String targetContent = HtmlUtil.escape(StringUtil.read(targetIs)); targetIs = new UnsyncByteArrayInputStream(targetContent.getBytes(StringPool.UTF8)); } if (DocumentConversionUtil.isEnabled()) { if (DocumentConversionUtil.isConvertBeforeCompare(sourceExtension)) { String sourceTempFileId = DLUtil.getTempFileId( sourceFileVersion.getFileEntryId(), sourceFileVersion.getVersion()); sourceIs = new FileInputStream( DocumentConversionUtil.convert(sourceTempFileId, sourceIs, sourceExtension, "txt")); } if (DocumentConversionUtil.isConvertBeforeCompare(targetExtension)) { String targetTempFileId = DLUtil.getTempFileId( targetFileVersion.getFileEntryId(), targetFileVersion.getVersion()); targetIs = new FileInputStream( DocumentConversionUtil.convert(targetTempFileId, targetIs, targetExtension, "txt")); } } List<DiffResult>[] diffResults = DiffUtil.diff(new InputStreamReader(sourceIs), new InputStreamReader(targetIs)); renderRequest.setAttribute( WebKeys.SOURCE_NAME, sourceFileVersion.getTitle() + StringPool.SPACE + sourceFileVersion.getVersion()); renderRequest.setAttribute( WebKeys.TARGET_NAME, targetFileVersion.getTitle() + StringPool.SPACE + targetFileVersion.getVersion()); renderRequest.setAttribute(WebKeys.DIFF_RESULTS, diffResults); }
protected void sendFile( HttpServletRequest request, HttpServletResponse response, User user, String[] pathArray) throws Exception { // Retrieve file details FileEntry fileEntry = getFileEntry(pathArray); if (fileEntry == null) { throw new NoSuchFileEntryException(); } String version = ParamUtil.getString(request, "version"); if (Validator.isNull(version)) { if (Validator.isNotNull(fileEntry.getVersion())) { version = fileEntry.getVersion(); } } String tempFileId = DLUtil.getTempFileId(fileEntry.getFileEntryId(), version); FileVersion fileVersion = fileEntry.getFileVersion(version); String fileName = fileVersion.getTitle(); String extension = fileVersion.getExtension(); if (Validator.isNotNull(extension) && !fileName.endsWith(StringPool.PERIOD + extension)) { fileName += StringPool.PERIOD + extension; } // Handle requested conversion boolean converted = false; String targetExtension = ParamUtil.getString(request, "targetExtension"); int imageThumbnail = ParamUtil.getInteger(request, "imageThumbnail"); int documentThumbnail = ParamUtil.getInteger(request, "documentThumbnail"); int previewFileIndex = ParamUtil.getInteger(request, "previewFileIndex"); boolean audioPreview = ParamUtil.getBoolean(request, "audioPreview"); boolean imagePreview = ParamUtil.getBoolean(request, "imagePreview"); boolean videoPreview = ParamUtil.getBoolean(request, "videoPreview"); int videoThumbnail = ParamUtil.getInteger(request, "videoThumbnail"); InputStream inputStream = null; long contentLength = 0; if ((imageThumbnail > 0) && (imageThumbnail <= 3)) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(ImageProcessorUtil.getThumbnailType(fileVersion)); int thumbnailIndex = imageThumbnail - 1; inputStream = ImageProcessorUtil.getThumbnailAsStream(fileVersion, thumbnailIndex); contentLength = ImageProcessorUtil.getThumbnailFileSize(fileVersion, thumbnailIndex); converted = true; } else if ((documentThumbnail > 0) && (documentThumbnail <= 3)) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(PDFProcessor.THUMBNAIL_TYPE); int thumbnailIndex = documentThumbnail - 1; inputStream = PDFProcessorUtil.getThumbnailAsStream(fileVersion, thumbnailIndex); contentLength = PDFProcessorUtil.getThumbnailFileSize(fileVersion, thumbnailIndex); converted = true; } else if (previewFileIndex > 0) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(PDFProcessor.PREVIEW_TYPE); inputStream = PDFProcessorUtil.getPreviewAsStream(fileVersion, previewFileIndex); contentLength = PDFProcessorUtil.getPreviewFileSize(fileVersion, previewFileIndex); converted = true; } else if (audioPreview || videoPreview) { String type = ParamUtil.getString(request, "type"); fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(type); if (audioPreview) { inputStream = AudioProcessorUtil.getPreviewAsStream(fileVersion, type); contentLength = AudioProcessorUtil.getPreviewFileSize(fileVersion, type); } else { inputStream = VideoProcessorUtil.getPreviewAsStream(fileVersion, type); contentLength = VideoProcessorUtil.getPreviewFileSize(fileVersion, type); } converted = true; } else if (imagePreview) { String type = ImageProcessorUtil.getPreviewType(fileVersion); fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(type); inputStream = ImageProcessorUtil.getPreviewAsStream(fileVersion); contentLength = ImageProcessorUtil.getPreviewFileSize(fileVersion); converted = true; } else if ((videoThumbnail > 0) && (videoThumbnail <= 3)) { fileName = FileUtil.stripExtension(fileName) .concat(StringPool.PERIOD) .concat(VideoProcessor.THUMBNAIL_TYPE); int thumbnailIndex = videoThumbnail - 1; inputStream = VideoProcessorUtil.getThumbnailAsStream(fileVersion, thumbnailIndex); contentLength = VideoProcessorUtil.getThumbnailFileSize(fileVersion, thumbnailIndex); converted = true; } else { inputStream = fileVersion.getContentStream(true); contentLength = fileVersion.getSize(); if (Validator.isNotNull(targetExtension)) { File convertedFile = DocumentConversionUtil.convert(tempFileId, inputStream, extension, targetExtension); if (convertedFile != null) { fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(targetExtension); inputStream = new FileInputStream(convertedFile); contentLength = convertedFile.length(); converted = true; } } } // Determine proper content type String contentType = null; if (converted) { contentType = MimeTypesUtil.getContentType(fileName); } else { contentType = fileVersion.getMimeType(); } // Support range HTTP header response.setHeader(HttpHeaders.ACCEPT_RANGES, HttpHeaders.ACCEPT_RANGES_BYTES_VALUE); List<Range> ranges = null; try { ranges = ServletResponseUtil.getRanges(request, response, contentLength); } catch (IOException ioe) { if (_log.isErrorEnabled()) { _log.error(ioe); } response.setHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + contentLength); response.sendError(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); return; } if ((ranges == null) || ranges.isEmpty()) { ServletResponseUtil.sendFile( request, response, fileName, inputStream, contentLength, contentType); } else { if (_log.isDebugEnabled()) { _log.debug("Request has range header " + request.getHeader(HttpHeaders.RANGE)); } ServletResponseUtil.write( request, response, fileName, ranges, inputStream, contentLength, contentType); } }
protected void getFile( long fileEntryId, long folderId, String name, String title, String version, long fileShortcutId, String uuid, long groupId, String targetExtension, HttpServletRequest request, HttpServletResponse response) throws Exception { if (name.startsWith("DLFE-")) { name = name.substring(5); } name = FileUtil.stripExtension(name); FileEntry fileEntry = null; if (Validator.isNotNull(uuid) && (groupId > 0)) { fileEntry = DLAppServiceUtil.getFileEntryByUuidAndGroupId(uuid, groupId); folderId = fileEntry.getFolderId(); } if (fileEntryId > 0) { fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId); } else if (fileShortcutId <= 0) { if (Validator.isNotNull(title)) { fileEntry = DLAppServiceUtil.getFileEntry(groupId, folderId, title); } else if (Validator.isNotNull(name)) { DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.fetchFileEntryByName(groupId, folderId, name); if (dlFileEntry == null) { // LPS-30374 List<DLFileEntry> dlFileEntries = DLFileEntryLocalServiceUtil.getFileEntries(folderId, name); if (!dlFileEntries.isEmpty()) { dlFileEntry = dlFileEntries.get(0); } } if (dlFileEntry != null) { ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); PermissionChecker permissionChecker = themeDisplay.getPermissionChecker(); DLFileEntryPermission.check(permissionChecker, dlFileEntry, ActionKeys.VIEW); fileEntry = new LiferayFileEntry(dlFileEntry); } } } else { DLFileShortcut fileShortcut = DLAppServiceUtil.getFileShortcut(fileShortcutId); fileEntryId = fileShortcut.getToFileEntryId(); fileEntry = DLAppServiceUtil.getFileEntry(fileEntryId); } if (Validator.isNull(version)) { if ((fileEntry != null) && Validator.isNotNull(fileEntry.getVersion())) { version = fileEntry.getVersion(); } else { throw new NoSuchFileEntryException(); } } FileVersion fileVersion = fileEntry.getFileVersion(version); InputStream is = fileVersion.getContentStream(true); String fileName = fileVersion.getTitle(); long contentLength = fileVersion.getSize(); String contentType = fileVersion.getMimeType(); if (Validator.isNotNull(targetExtension)) { String id = DLUtil.getTempFileId(fileEntry.getFileEntryId(), version); String sourceExtension = fileVersion.getExtension(); if (!fileName.endsWith(StringPool.PERIOD + sourceExtension)) { fileName += StringPool.PERIOD + sourceExtension; } File convertedFile = DocumentConversionUtil.convert(id, is, sourceExtension, targetExtension); if (convertedFile != null) { fileName = FileUtil.stripExtension(fileName).concat(StringPool.PERIOD).concat(targetExtension); is = new FileInputStream(convertedFile); contentLength = convertedFile.length(); contentType = MimeTypesUtil.getContentType(fileName); } } ServletResponseUtil.sendFile(request, response, fileName, is, contentLength, contentType); }
private void _generateVideo(FileVersion sourceFileVersion, FileVersion destinationFileVersion) throws Exception { if (!XugglerUtil.isEnabled() || _hasVideo(destinationFileVersion)) { return; } InputStream inputStream = null; File[] previewTempFiles = new File[_PREVIEW_TYPES.length]; File videoTempFile = null; try { if (sourceFileVersion != null) { copy(sourceFileVersion, destinationFileVersion); return; } File file = null; if (!hasPreviews(destinationFileVersion) || !hasThumbnails(destinationFileVersion)) { if (destinationFileVersion instanceof LiferayFileVersion) { try { LiferayFileVersion liferayFileVersion = (LiferayFileVersion) destinationFileVersion; file = liferayFileVersion.getFile(false); } catch (UnsupportedOperationException uoe) { } } if (file == null) { inputStream = destinationFileVersion.getContentStream(false); videoTempFile = FileUtil.createTempFile(destinationFileVersion.getExtension()); FileUtil.write(videoTempFile, inputStream); file = videoTempFile; } } if (!hasPreviews(destinationFileVersion)) { String tempFileId = DLUtil.getTempFileId( destinationFileVersion.getFileEntryId(), destinationFileVersion.getVersion()); for (int i = 0; i < _PREVIEW_TYPES.length; i++) { previewTempFiles[i] = getPreviewTempFile(tempFileId, _PREVIEW_TYPES[i]); } try { _generateVideoXuggler(destinationFileVersion, file, previewTempFiles); } catch (Exception e) { _log.error(e, e); } } if (!hasThumbnails(destinationFileVersion)) { try { _generateThumbnailXuggler( destinationFileVersion, file, PropsValues.DL_FILE_ENTRY_PREVIEW_VIDEO_HEIGHT, PropsValues.DL_FILE_ENTRY_PREVIEW_VIDEO_WIDTH); } catch (Exception e) { _log.error(e, e); } } } catch (NoSuchFileEntryException nsfee) { if (_log.isDebugEnabled()) { _log.debug(nsfee, nsfee); } } finally { StreamUtil.cleanUp(inputStream); _fileVersionIds.remove(destinationFileVersion.getFileVersionId()); for (int i = 0; i < previewTempFiles.length; i++) { FileUtil.delete(previewTempFiles[i]); } FileUtil.delete(videoTempFile); } }