/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (http://www.alkacon.com)
*
* 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.
*
* For further information about Alkacon Software GmbH, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.importexport;
import org.opencms.file.CmsObject;
import org.opencms.main.CmsException;
import org.opencms.main.CmsIllegalArgumentException;
import org.opencms.module.CmsModuleXmlHandler;
import org.opencms.report.I_CmsReport;
import org.opencms.security.CmsRoleViolationException;
import org.opencms.util.CmsStringUtil;
import org.opencms.xml.CmsXmlException;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
/**
* Import/export handler implementation for VFS data.<p>
*
* @since 6.0.0
*/
public class CmsVfsImportExportHandler implements I_CmsImportExportHandler {
/** The description of this import/export handler. */
private long m_contentAge;
/** The description of this import/export handler.<p> */
private String m_description;
/** The export parameters. */
private CmsExportParameters m_exportParams;
/** The VFS paths to be exported. */
private List m_exportPaths;
/** The name of the export file in the real file system. */
private boolean m_exportUserdata;
/** The name of the export file in the real file system.<p> */
private String m_fileName;
/** The import parameters. */
private CmsImportParameters m_importParams;
/** Boolean flag to decide whether VFS resources under /system/ should be exported or not. */
private boolean m_includeSystem;
/** Boolean flag to decide whether unchanged resources should be exported or not. */
private boolean m_includeUnchanged;
/** Boolean flag to indicate that only the resources of the current project should be exported. */
private boolean m_projectOnly;
/** Boolean flag to indicate if the folders are exported recursively or not. */
private boolean m_recursive;
/**
* Creates a new VFS import/export handler.<p>
*/
public CmsVfsImportExportHandler() {
super();
m_description = Messages.get().getBundle().key(Messages.GUI_CMSIMPORTHANDLER_DEFAULT_DESC_0);
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#exportData(org.opencms.file.CmsObject, org.opencms.report.I_CmsReport)
*/
public void exportData(CmsObject cms, I_CmsReport report)
throws CmsImportExportException, CmsRoleViolationException {
CmsExportParameters parameters = getExportParams();
if (parameters == null) {
parameters = new CmsExportParameters(
getFileName(),
null,
true,
isExportUserdata(),
false,
getExportPaths(),
isIncludeSystem(),
isIncludeUnchanged(),
getContentAge(),
isRecursive(),
isProjectOnly());
}
report.println(Messages.get().container(Messages.RPT_EXPORT_DB_BEGIN_0), I_CmsReport.FORMAT_HEADLINE);
new CmsExport(cms, report).exportData(parameters);
report.println(Messages.get().container(Messages.RPT_EXPORT_DB_END_0), I_CmsReport.FORMAT_HEADLINE);
}
/**
* Returns the timestamp to limit the resources to be exported by date.<p>
*
* Only resources that have been modified after this date will be exported.<p>
*
* @return the timestamp to limit the resources to be exported by date
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public long getContentAge() {
return m_contentAge;
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#getDescription()
*/
public String getDescription() {
return m_description;
}
/**
* Returns the export parameters.<p>
*
* @return the export parameters
*/
public CmsExportParameters getExportParams() {
return m_exportParams;
}
/**
* Returns the list with VFS paths to be exported.<p>
*
* @return the list with VFS paths to be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public List getExportPaths() {
return m_exportPaths;
}
/**
* Returns the name of the export file in the real file system.<p>
*
* @return the name of the export file in the real file system
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public String getFileName() {
return m_fileName;
}
/**
* Returns the import parameters.<p>
*
* @return the import parameters
*/
public CmsImportParameters getImportParameters() {
return m_importParams;
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#importData(CmsObject, I_CmsReport)
*/
public synchronized void importData(CmsObject cms, I_CmsReport report)
throws CmsImportExportException, CmsXmlException, CmsRoleViolationException {
report.println(Messages.get().container(Messages.RPT_IMPORT_DB_BEGIN_0), I_CmsReport.FORMAT_HEADLINE);
CmsImport vfsImport = new CmsImport(cms, report);
vfsImport.importData(getImportParameters());
report.println(Messages.get().container(Messages.RPT_IMPORT_DB_END_0), I_CmsReport.FORMAT_HEADLINE);
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#importData(org.opencms.file.CmsObject, java.lang.String, java.lang.String, org.opencms.report.I_CmsReport)
*
* @deprecated use {@link #importData(CmsObject, I_CmsReport)} instead
*/
public void importData(CmsObject cms, String importFile, String importPath, I_CmsReport report)
throws CmsXmlException, CmsImportExportException, CmsRoleViolationException, CmsException {
CmsImportParameters parameters = new CmsImportParameters(importFile, importPath, true);
setImportParameters(parameters);
importData(cms, report);
}
/**
* Returns the boolean flag to decide whether user/group data should be exported or not.<p>
*
* @return true, if user/group data should be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public boolean isExportUserdata() {
return m_exportUserdata;
}
/**
* Returns the boolean flag to decide whether VFS resources under /system/ should be exported or not.<p>
*
* @return true, if VFS resources under /system/ should not be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public boolean isIncludeSystem() {
return m_includeSystem;
}
/**
* Returns the boolean flag to decide whether unchanged resources should be exported or not.<p>
*
* @return true, if unchanged resources should not be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public boolean isIncludeUnchanged() {
return m_includeUnchanged;
}
/**
* Returns the projectOnly.<p>
*
* @return the projectOnly
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public boolean isProjectOnly() {
return m_projectOnly;
}
/**
* Returns the recursive flag.<p>
*
* @return the recursive flag
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public boolean isRecursive() {
return m_recursive;
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#matches(org.dom4j.Document)
*/
public boolean matches(Document manifest) {
Element rootElement = manifest.getRootElement();
boolean hasModuleNode = (rootElement.selectNodes(
"./" + CmsModuleXmlHandler.N_MODULE + "/" + CmsModuleXmlHandler.N_NAME).size() > 0);
boolean hasInfoNode = (rootElement.selectNodes("./" + CmsImportExportManager.N_INFO).size() == 1);
return (!hasModuleNode && hasInfoNode);
}
/**
* Sets the timestamp to limit the resources to be exported by date.<p>
*
* Only resources that have been modified after this date will be exported.<p>
*
* @param contentAge the timestamp to limit the resources to be exported by date
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setContentAge(long contentAge) {
if (contentAge < 0) {
String ageString = Long.toString(contentAge);
throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_BAD_CONTENT_AGE_1, ageString));
}
m_contentAge = contentAge;
}
/**
* @see org.opencms.importexport.I_CmsImportExportHandler#setDescription(java.lang.String)
*/
public void setDescription(String description) {
m_description = description;
}
/**
* Sets the export parameters.<p>
*
* @param exportParams the parameters to set
*/
public void setExportParams(CmsExportParameters exportParams) {
m_exportParams = exportParams;
}
/**
* Sets the list with VFS paths to be exported.<p>
*
* @param exportPaths the list with VFS paths to be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setExportPaths(List exportPaths) {
m_exportPaths = exportPaths;
}
/**
* Sets the boolean flag to decide whether user/group data should be exported or not.<p>
*
* @param exportUserdata true, if user/group data should not be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setExportUserdata(boolean exportUserdata) {
m_exportUserdata = exportUserdata;
}
/**
* Sets the name of the export file in the real file system.<p>
*
* @param fileName the name of the export file in the real file system
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setFileName(String fileName) {
if (CmsStringUtil.isEmpty(fileName) || !fileName.trim().equals(fileName)) {
throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_BAD_FILE_NAME_1, fileName));
}
m_fileName = fileName;
}
/**
* Sets the import parameters.<p>
*
* @param importParams the parameters to set
*/
public void setImportParameters(CmsImportParameters importParams) {
m_importParams = importParams;
}
/**
* Sets the boolean flag to decide whether VFS resources under /system/ should be exported or not.<p>
*
* @param excludeSystem true, if VFS resources under /system/ should not be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setIncludeSystem(boolean excludeSystem) {
m_includeSystem = excludeSystem;
}
/**
* Sets the boolean flag to decide whether unchanged resources should be exported or not.<p>
*
* @param excludeUnchanged true, if unchanged resources should not be exported
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setIncludeUnchanged(boolean excludeUnchanged) {
m_includeUnchanged = excludeUnchanged;
}
/**
* Sets the projectOnly.<p>
*
* @param projectOnly the projectOnly to set
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setProjectOnly(boolean projectOnly) {
m_projectOnly = projectOnly;
}
/**
* Sets the recursive flag.<p>
*
* @param recursive the recursive flag to set
*
* @deprecated use {@link #setExportParams(CmsExportParameters)} instead
*/
public void setRecursive(boolean recursive) {
m_recursive = recursive;
}
}