protected InputStream getSmallImageInputStream( PortletDataContext portletDataContext, Element attachmentElement) { InputStream inputStream = null; String path = attachmentElement.attributeValue("path"); FileEntry fileEntry = (FileEntry) portletDataContext.getZipEntryAsObject(path); String binPath = attachmentElement.attributeValue("bin-path"); if (Validator.isNull(binPath) && portletDataContext.isPerformDirectBinaryImport()) { try { inputStream = FileEntryUtil.getContentStream(fileEntry); } catch (Exception e) { } } else { inputStream = portletDataContext.getZipEntryAsInputStream(binPath); } if (inputStream == null) { if (_log.isWarnEnabled()) { _log.warn("Unable to import small image file entry " + fileEntry.getFileEntryId()); } } return inputStream; }
@Override protected void doImportStagedModel(PortletDataContext portletDataContext, BlogsEntry entry) throws Exception { long userId = portletDataContext.getUserId(entry.getUserUuid()); Element entryElement = portletDataContext.getImportDataStagedModelElement(entry); String content = _blogsEntryExportImportContentProcessor.replaceImportContentReferences( portletDataContext, entry, entry.getContent()); entry.setContent(content); Calendar displayDateCal = CalendarFactoryUtil.getCalendar(); displayDateCal.setTime(entry.getDisplayDate()); int displayDateMonth = displayDateCal.get(Calendar.MONTH); int displayDateDay = displayDateCal.get(Calendar.DATE); int displayDateYear = displayDateCal.get(Calendar.YEAR); int displayDateHour = displayDateCal.get(Calendar.HOUR); int displayDateMinute = displayDateCal.get(Calendar.MINUTE); if (displayDateCal.get(Calendar.AM_PM) == Calendar.PM) { displayDateHour += 12; } boolean allowPingbacks = entry.isAllowPingbacks(); boolean allowTrackbacks = entry.isAllowTrackbacks(); String[] trackbacks = StringUtil.split(entry.getTrackbacks()); ServiceContext serviceContext = portletDataContext.createServiceContext(entry); BlogsEntry importedEntry = null; if (portletDataContext.isDataStrategyMirror()) { serviceContext.setAttribute("urlTitle", entry.getUrlTitle()); BlogsEntry existingEntry = fetchStagedModelByUuidAndGroupId(entry.getUuid(), portletDataContext.getScopeGroupId()); if (existingEntry == null) { serviceContext.setUuid(entry.getUuid()); importedEntry = _blogsEntryLocalService.addEntry( userId, entry.getTitle(), entry.getSubtitle(), entry.getDescription(), entry.getContent(), displayDateMonth, displayDateDay, displayDateYear, displayDateHour, displayDateMinute, allowPingbacks, allowTrackbacks, trackbacks, entry.getCoverImageCaption(), null, null, serviceContext); } else { importedEntry = _blogsEntryLocalService.updateEntry( userId, existingEntry.getEntryId(), entry.getTitle(), entry.getSubtitle(), entry.getDescription(), entry.getContent(), displayDateMonth, displayDateDay, displayDateYear, displayDateHour, displayDateMinute, allowPingbacks, allowTrackbacks, trackbacks, entry.getCoverImageCaption(), new ImageSelector(), new ImageSelector(), serviceContext); } } else { importedEntry = _blogsEntryLocalService.addEntry( userId, entry.getTitle(), entry.getSubtitle(), entry.getDescription(), entry.getContent(), displayDateMonth, displayDateDay, displayDateYear, displayDateHour, displayDateMinute, allowPingbacks, allowTrackbacks, trackbacks, entry.getCoverImageCaption(), null, null, serviceContext); } if ((entry.getCoverImageFileEntryId() == 0) && Validator.isNull(entry.getCoverImageURL()) && (entry.getSmallImageFileEntryId() == 0) && Validator.isNull(entry.getSmallImageURL()) && !entry.isSmallImage()) { portletDataContext.importClassedModel(entry, importedEntry); return; } // Cover image ImageSelector coverImageSelector = null; List<Element> attachmentElements = portletDataContext.getReferenceDataElements( entry, DLFileEntry.class, PortletDataContext.REFERENCE_TYPE_WEAK); if (Validator.isNotNull(entry.getCoverImageURL())) { coverImageSelector = new ImageSelector(entry.getCoverImageURL()); } else if (entry.getCoverImageFileEntryId() != 0) { coverImageSelector = _getImageSelector( portletDataContext, entry.getCoverImageFileEntryId(), attachmentElements); } if (coverImageSelector != null) { _blogsEntryLocalService.addCoverImage(importedEntry.getEntryId(), coverImageSelector); } // Small image ImageSelector smallImageSelector = null; if (entry.isSmallImage()) { String smallImagePath = entryElement.attributeValue("small-image-path"); if (Validator.isNotNull(entry.getSmallImageURL())) { smallImageSelector = new ImageSelector(entry.getSmallImageURL()); } else if (Validator.isNotNull(smallImagePath)) { String smallImageFileName = entry.getSmallImageId() + StringPool.PERIOD + entry.getSmallImageType(); InputStream inputStream = null; try { inputStream = portletDataContext.getZipEntryAsInputStream(smallImagePath); smallImageSelector = new ImageSelector( FileUtil.getBytes(inputStream), smallImageFileName, MimeTypesUtil.getContentType(smallImageFileName), null); } finally { StreamUtil.cleanUp(inputStream); } } else if (entry.getSmallImageFileEntryId() != 0) { smallImageSelector = _getImageSelector( portletDataContext, entry.getSmallImageFileEntryId(), attachmentElements); } } if (smallImageSelector != null) { _blogsEntryLocalService.addSmallImage(importedEntry.getEntryId(), smallImageSelector); } if ((coverImageSelector != null) || (smallImageSelector != null)) { importedEntry = _blogsEntryLocalService.getBlogsEntry(importedEntry.getEntryId()); } portletDataContext.importClassedModel(entry, importedEntry); }
@Override protected void doImportStagedModel(PortletDataContext portletDataContext, FileEntry fileEntry) throws Exception { long userId = portletDataContext.getUserId(fileEntry.getUserUuid()); if (!fileEntry.isDefaultRepository()) { // References has been automatically imported, nothing to do here return; } Map<Long, Long> folderIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(Folder.class); long folderId = MapUtil.getLong(folderIds, fileEntry.getFolderId(), fileEntry.getFolderId()); long[] assetCategoryIds = portletDataContext.getAssetCategoryIds(DLFileEntry.class, fileEntry.getFileEntryId()); String[] assetTagNames = portletDataContext.getAssetTagNames(DLFileEntry.class, fileEntry.getFileEntryId()); ServiceContext serviceContext = portletDataContext.createServiceContext(fileEntry, DLFileEntry.class); serviceContext.setAttribute("sourceFileName", "A." + fileEntry.getExtension()); serviceContext.setUserId(userId); Element fileEntryElement = portletDataContext.getImportDataElement(fileEntry); String binPath = fileEntryElement.attributeValue("bin-path"); InputStream is = null; if (Validator.isNull(binPath) && portletDataContext.isPerformDirectBinaryImport()) { try { is = FileEntryUtil.getContentStream(fileEntry); } catch (Exception e) { if (_log.isWarnEnabled()) { _log.warn("Unable to retrieve content for file entry " + fileEntry.getFileEntryId(), e); } return; } } else { is = portletDataContext.getZipEntryAsInputStream(binPath); } if (is == null) { if (_log.isWarnEnabled()) { _log.warn("No file found for file entry " + fileEntry.getFileEntryId()); } return; } importMetaData(portletDataContext, fileEntryElement, fileEntry, serviceContext); FileEntry importedFileEntry = null; String titleWithExtension = DLUtil.getTitleWithExtension(fileEntry); String extension = fileEntry.getExtension(); String periodAndExtension = StringPool.PERIOD.concat(extension); if (portletDataContext.isDataStrategyMirror()) { FileEntry existingFileEntry = fetchStagedModelByUuidAndGroupId( fileEntry.getUuid(), portletDataContext.getScopeGroupId()); FileVersion fileVersion = fileEntry.getFileVersion(); if (existingFileEntry == null) { String fileEntryTitle = fileEntry.getTitle(); FileEntry existingTitleFileEntry = FileEntryUtil.fetchByR_F_T( portletDataContext.getScopeGroupId(), folderId, fileEntryTitle); if (existingTitleFileEntry != null) { if ((fileEntry.getGroupId() == portletDataContext.getSourceGroupId()) && portletDataContext.isDataStrategyMirrorWithOverwriting()) { DLAppLocalServiceUtil.deleteFileEntry(existingTitleFileEntry.getFileEntryId()); } else { boolean titleHasExtension = false; if (fileEntryTitle.endsWith(periodAndExtension)) { fileEntryTitle = FileUtil.stripExtension(fileEntryTitle); titleHasExtension = true; } for (int i = 1; ; i++) { fileEntryTitle += StringPool.SPACE + i; titleWithExtension = fileEntryTitle + periodAndExtension; existingTitleFileEntry = FileEntryUtil.fetchByR_F_T( portletDataContext.getScopeGroupId(), folderId, titleWithExtension); if (existingTitleFileEntry == null) { if (titleHasExtension) { fileEntryTitle += periodAndExtension; } break; } } } } serviceContext.setAttribute("fileVersionUuid", fileVersion.getUuid()); serviceContext.setUuid(fileEntry.getUuid()); importedFileEntry = DLAppLocalServiceUtil.addFileEntry( userId, portletDataContext.getScopeGroupId(), folderId, titleWithExtension, fileEntry.getMimeType(), fileEntryTitle, fileEntry.getDescription(), null, is, fileEntry.getSize(), serviceContext); if (fileEntry.isInTrash()) { importedFileEntry = DLAppServiceUtil.moveFileEntryToTrash(importedFileEntry.getFileEntryId()); } } else { FileVersion latestExistingFileVersion = existingFileEntry.getLatestFileVersion(true); boolean indexEnabled = serviceContext.isIndexingEnabled(); boolean deleteFileEntry = false; boolean updateFileEntry = false; if (!Validator.equals(fileVersion.getUuid(), latestExistingFileVersion.getUuid())) { deleteFileEntry = true; updateFileEntry = true; } else { InputStream existingFileVersionInputStream = null; try { existingFileVersionInputStream = latestExistingFileVersion.getContentStream(false); } catch (Exception e) { if (_log.isDebugEnabled()) { _log.debug(e, e); } } finally { if (existingFileVersionInputStream != null) { existingFileVersionInputStream.close(); } } if (existingFileVersionInputStream == null) { updateFileEntry = true; } } try { serviceContext.setIndexingEnabled(false); if (updateFileEntry) { DLFileVersion alreadyExistingFileVersion = DLFileVersionLocalServiceUtil.getFileVersionByUuidAndGroupId( fileVersion.getUuid(), existingFileEntry.getGroupId()); if (alreadyExistingFileVersion != null) { serviceContext.setAttribute( "existingDLFileVersionId", alreadyExistingFileVersion.getFileVersionId()); } serviceContext.setUuid(fileVersion.getUuid()); importedFileEntry = DLAppLocalServiceUtil.updateFileEntry( userId, existingFileEntry.getFileEntryId(), titleWithExtension, fileEntry.getMimeType(), fileEntry.getTitle(), fileEntry.getDescription(), null, false, is, fileEntry.getSize(), serviceContext); } else { DLAppLocalServiceUtil.updateAsset( userId, existingFileEntry, latestExistingFileVersion, assetCategoryIds, assetTagNames, null); importedFileEntry = existingFileEntry; } if (importedFileEntry.getFolderId() != folderId) { importedFileEntry = DLAppLocalServiceUtil.moveFileEntry( userId, importedFileEntry.getFileEntryId(), folderId, serviceContext); } if (importedFileEntry instanceof LiferayFileEntry) { LiferayFileEntry liferayFileEntry = (LiferayFileEntry) importedFileEntry; Indexer<DLFileEntry> indexer = IndexerRegistryUtil.nullSafeGetIndexer(DLFileEntry.class); indexer.reindex((DLFileEntry) liferayFileEntry.getModel()); } if (deleteFileEntry && ExportImportThreadLocal.isStagingInProcess()) { DLAppServiceUtil.deleteFileVersion( latestExistingFileVersion.getFileEntryId(), latestExistingFileVersion.getVersion()); } } finally { serviceContext.setIndexingEnabled(indexEnabled); } } } else { try { importedFileEntry = DLAppLocalServiceUtil.addFileEntry( userId, portletDataContext.getScopeGroupId(), folderId, titleWithExtension, fileEntry.getMimeType(), fileEntry.getTitle(), fileEntry.getDescription(), null, is, fileEntry.getSize(), serviceContext); } catch (DuplicateFileException dfe) { String title = fileEntry.getTitle(); String[] titleParts = title.split("\\.", 2); title = titleParts[0] + StringUtil.randomString(); if (titleParts.length > 1) { title += StringPool.PERIOD + titleParts[1]; } if (!title.endsWith(periodAndExtension)) { title += periodAndExtension; } importedFileEntry = DLAppLocalServiceUtil.addFileEntry( userId, portletDataContext.getScopeGroupId(), folderId, title, fileEntry.getMimeType(), title, fileEntry.getDescription(), null, is, fileEntry.getSize(), serviceContext); } } if (portletDataContext.getBooleanParameter( DLPortletDataHandler.NAMESPACE, "previews-and-thumbnails")) { DLProcessorRegistryUtil.importGeneratedFiles( portletDataContext, fileEntry, importedFileEntry, fileEntryElement); } portletDataContext.importClassedModel(fileEntry, importedFileEntry, DLFileEntry.class); Map<Long, Long> fileEntryIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(FileEntry.class); fileEntryIds.put(fileEntry.getFileEntryId(), importedFileEntry.getFileEntryId()); }