📄 cmsexport.java
字号:
}
}
}
m_exportedResources.add(path);
}
// export the files
addFiles(fileNames);
// export all body files that have not already been exported
addPageBodyFiles();
// write the XML
getSaxWriter().writeClose(m_resourceNode);
parent.remove(m_resourceNode);
m_resourceNode = null;
}
/**
* Returns the OpenCms context object this export was initialized with.<p>
*
* @return the OpenCms context object this export was initialized with
*/
protected CmsObject getCms() {
return m_cms;
}
/**
* Returns the name of the export file.<p>
*
* @return the name of the export file
*/
protected String getExportFileName() {
return m_exportFileName;
}
/**
* Returns the name of the main export node.<p>
*
* @return the name of the main export node
*/
protected String getExportNodeName() {
return CmsImportExportManager.N_EXPORT;
}
/**
* Returns the zip output stream to write to.<p>
*
* @return the zip output stream to write to
*/
protected ZipOutputStream getExportZipStream() {
return m_exportZipStream;
}
/**
* Returns the report to write progess messages to.<p>
*
* @return the report to write progess messages to
*/
protected I_CmsReport getReport() {
return m_report;
}
/**
* Returns the name for the main resource node.<p>
*
* @return the name for the main resource node
*/
protected String getResourceNodeName() {
return "files";
}
/**
* Returns the SAX baesed xml writer to write the XML output to.<p>
*
* @return the SAX baesed xml writer to write the XML output to
*/
protected SAXWriter getSaxWriter() {
return m_saxWriter;
}
/**
* Checks if a property should be written to the export or not.<p>
*
* @param property the property to check
* @return if true, the property is to be ignored, otherwise it should be exported
*/
protected boolean isIgnoredProperty(CmsProperty property) {
if (property == null) {
return true;
}
// default implementation is to export all properties not null
return false;
}
/**
* Opens the export ZIP file and initializes the internal XML document for the manifest.<p>
*
* @return the node in the XML document where all files are appended to
* @throws SAXException if something goes wrong procesing the manifest.xml
* @throws IOException if something goes wrong while closing the export file
*/
protected Element openExportFile() throws IOException, SAXException {
// create the export-zipstream
setExportZipStream(new ZipOutputStream(new FileOutputStream(getExportFileName())));
// generate the SAX XML writer
CmsXmlSaxWriter saxHandler = new CmsXmlSaxWriter(
new StringWriter(4096),
OpenCms.getSystemInfo().getDefaultEncoding());
saxHandler.setEscapeXml(true);
saxHandler.setEscapeUnknownChars(true);
// initialize the dom4j writer object as member variable
setSaxWriter(new SAXWriter(saxHandler, saxHandler));
// the XML document to write the XMl to
Document doc = DocumentHelper.createDocument();
// start the document
saxHandler.startDocument();
// the node in the XML document where the file entries are appended to
String exportNodeName = getExportNodeName();
// add main export node to XML document
Element exportNode = doc.addElement(exportNodeName);
getSaxWriter().writeOpen(exportNode);
// add the info element. it contains all infos for this export
Element info = exportNode.addElement(CmsImportExportManager.N_INFO);
info.addElement(CmsImportExportManager.N_CREATOR).addText(getCms().getRequestContext().currentUser().getName());
info.addElement(CmsImportExportManager.N_OC_VERSION).addText(OpenCms.getSystemInfo().getVersionNumber());
info.addElement(CmsImportExportManager.N_DATE).addText(CmsDateUtil.getHeaderDate(System.currentTimeMillis()));
info.addElement(CmsImportExportManager.N_PROJECT).addText(
getCms().getRequestContext().currentProject().getName());
info.addElement(CmsImportExportManager.N_VERSION).addText(CmsImportExportManager.EXPORT_VERSION);
// write the XML
digestElement(exportNode, info);
return exportNode;
}
/**
* Sets the OpenCms context object this export was initialized with.<p>
*
* @param cms the OpenCms context object this export was initialized with
*/
protected void setCms(CmsObject cms) {
m_cms = cms;
}
/**
* Sets the name of the export file.<p>
*
* @param exportFileName the name of the export file
*/
protected void setExportFileName(String exportFileName) {
// ensure the export file name ends with ".zip"
if (!exportFileName.toLowerCase().endsWith(".zip")) {
m_exportFileName = exportFileName + ".zip";
} else {
m_exportFileName = exportFileName;
}
}
/**
* Sets the zip output stream to write to.<p>
*
* @param exportZipStream the zip output stream to write to
*/
protected void setExportZipStream(ZipOutputStream exportZipStream) {
m_exportZipStream = exportZipStream;
}
/**
* Sets the report to write progess messages to.<p>
*
* @param report the report to write progess messages to
*/
protected void setReport(I_CmsReport report) {
m_report = report;
}
/**
* Sets the SAX baesed xml writer to write the XML output to.<p>
*
* @param saxWriter the SAX baesed xml writer to write the XML output to
*/
protected void setSaxWriter(SAXWriter saxWriter) {
m_saxWriter = saxWriter;
}
/**
* Adds all files in fileNames to the manifest.xml file.<p>
*
* @param fileNames list of path Strings, e.g. <code>/folder/index.html</code>
*
* @throws CmsImportExportException if something goes wrong
* @throws IOException if a file could not be exported
* @throws SAXException if something goes wrong procesing the manifest.xml
*/
private void addFiles(List fileNames) throws CmsImportExportException, IOException, SAXException {
if (fileNames != null) {
for (int i = 0; i < fileNames.size(); i++) {
String fileName = (String)fileNames.get(i);
try {
CmsFile file = getCms().readFile(fileName, CmsResourceFilter.IGNORE_EXPIRATION);
if (!file.getState().isDeleted() && !CmsWorkplace.isTemporaryFile(file)) {
if (checkExportResource(fileName)) {
if (m_recursive) {
addParentFolders(fileName);
}
if (isInExportableProject(file)) {
exportFile(file);
}
}
}
} catch (CmsImportExportException e) {
throw e;
} catch (CmsException e) {
if (e instanceof CmsVfsException) { // file not found
CmsMessageContainer message = Messages.get().container(
Messages.ERR_IMPORTEXPORT_ERROR_ADDING_FILE_1,
fileName);
if (LOG.isDebugEnabled()) {
LOG.debug(message.key(), e);
}
throw new CmsImportExportException(message, e);
}
}
}
}
}
/**
* Exports all page body files that have not explicityl been added by the user.<p>
*
* @throws CmsImportExportException if something goes wrong
* @throws IOException if a file could not be exported
* @throws SAXException if something goes wrong procesing the manifest.xml
*/
private void addPageBodyFiles() throws CmsImportExportException, IOException, SAXException {
Iterator i;
List bodyFileNames = new ArrayList();
String bodyPath = CmsCompatibleCheck.VFS_PATH_BODIES.substring(
0,
CmsCompatibleCheck.VFS_PATH_BODIES.lastIndexOf("/"));
// check all exported page files if their body has already been exported
i = m_exportedPageFiles.iterator();
while (i.hasNext()) {
String filename = (String)i.next();
// check if the site path is within the filename. If so, this export is
// started from the root site and the path to the bodies must be modifed
// this is not nice, but it works.
if (filename.startsWith(CmsResource.VFS_FOLDER_SITES)) {
filename = filename.substring(CmsResource.VFS_FOLDER_SITES.length() + 1, filename.length());
filename = filename.substring(filename.indexOf("/"), filename.length());
}
String body = bodyPath + filename;
bodyFileNames.add(body);
}
// now export the body files that have not already been exported
addFiles(bodyFileNames);
}
/**
* Adds the parent folders of the given resource to the config file,
* starting at the top, excluding the root folder.<p>
*
* @param resourceName the name of a resource in the VFS
* @throws CmsImportExportException if something goes wrong
* @throws SAXException if something goes wrong procesing the manifest.xml
*/
private void addParentFolders(String resourceName) throws CmsImportExportException, SAXException {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -