/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.exportimport.internal.background.task;
import com.liferay.exportimport.kernel.model.ExportImportConfiguration;
import com.liferay.exportimport.kernel.service.ExportImportLocalServiceUtil;
import com.liferay.portal.kernel.backgroundtask.BackgroundTask;
import com.liferay.portal.kernel.backgroundtask.BackgroundTaskConstants;
import com.liferay.portal.kernel.backgroundtask.BackgroundTaskExecutor;
import com.liferay.portal.kernel.backgroundtask.BackgroundTaskResult;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.transaction.TransactionInvokerUtil;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.Validator;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Callable;
/**
* @author Daniel Kocsis
* @author Akos Thurzo
*/
public class LayoutImportBackgroundTaskExecutor
extends BaseExportImportBackgroundTaskExecutor {
public LayoutImportBackgroundTaskExecutor() {
setBackgroundTaskStatusMessageTranslator(
new LayoutExportImportBackgroundTaskStatusMessageTranslator());
// Isolation level guarantees this will be serial in a group
setIsolationLevel(BackgroundTaskConstants.ISOLATION_LEVEL_GROUP);
}
@Override
public BackgroundTaskExecutor clone() {
LayoutImportBackgroundTaskExecutor layoutImportBackgroundTaskExecutor =
new LayoutImportBackgroundTaskExecutor();
layoutImportBackgroundTaskExecutor.
setBackgroundTaskStatusMessageTranslator(
getBackgroundTaskStatusMessageTranslator());
layoutImportBackgroundTaskExecutor.setIsolationLevel(
getIsolationLevel());
return layoutImportBackgroundTaskExecutor;
}
@Override
public BackgroundTaskResult execute(BackgroundTask backgroundTask)
throws Exception {
ExportImportConfiguration exportImportConfiguration =
getExportImportConfiguration(backgroundTask);
List<FileEntry> attachmentsFileEntries =
backgroundTask.getAttachmentsFileEntries();
File file = null;
for (FileEntry attachmentsFileEntry : attachmentsFileEntries) {
try {
file = FileUtil.createTempFile("lar");
FileUtil.write(file, attachmentsFileEntry.getContentStream());
TransactionInvokerUtil.invoke(
transactionConfig,
new LayoutImportCallable(exportImportConfiguration, file));
}
catch (IOException ioe) {
StringBundler sb = new StringBundler(3);
sb.append("Unable to process LAR file while executing ");
sb.append("LayoutImportBackgroundTaskExecutor: ");
if (!Objects.isNull(attachmentsFileEntry) &&
Validator.isNotNull(attachmentsFileEntry.getFileName())) {
sb.append(attachmentsFileEntry.getFileName());
}
else {
sb.append("unknown file name");
}
throw new SystemException(sb.toString(), ioe);
}
catch (Throwable t) {
if (_log.isDebugEnabled()) {
_log.debug(t, t);
}
else if (_log.isWarnEnabled()) {
_log.warn("Unable to import layouts: " + t.getMessage());
}
throw new SystemException(t);
}
finally {
FileUtil.delete(file);
}
}
return BackgroundTaskResult.SUCCESS;
}
private static final Log _log = LogFactoryUtil.getLog(
LayoutImportBackgroundTaskExecutor.class);
private static class LayoutImportCallable implements Callable<Void> {
public LayoutImportCallable(
ExportImportConfiguration exportImportConfiguration, File file) {
_exportImportConfiguration = exportImportConfiguration;
_file = file;
}
@Override
public Void call() throws PortalException {
ExportImportLocalServiceUtil.importLayoutsDataDeletions(
_exportImportConfiguration, _file);
ExportImportLocalServiceUtil.importLayouts(
_exportImportConfiguration, _file);
return null;
}
private final ExportImportConfiguration _exportImportConfiguration;
private final File _file;
}
}