📄 cmshtmlimport.java
字号:
*
* @return the leaveExternalLinks
*/
public String getLeaveExternalLinks() {
return m_leaveExternalLinks;
}
/**
* Returns the leaveImages.<p>
*
* @return the leaveImages
*/
public String getLeaveImages() {
return m_leaveImages;
}
/**
* Returns the linkGallery.<p>
*
* @return the linkGallery
*/
public String getLinkGallery() {
return m_linkGallery;
}
/**
* Returns the locale.<p>
*
* @return the locale
*/
public Locale getLocale() {
return m_locale;
}
/**
* Returns the overwrite flag.<p>
*
* @return the overwrite flag
*/
public String getOverwrite() {
return m_overwrite;
}
/**
* Returns the startPattern.<p>
*
* @return the startPattern
*/
public String getStartPattern() {
return m_startPattern;
}
/**
* Returns the template.<p>
*
* @return the template
*/
public String getTemplate() {
return m_template;
}
/**
* Returns the output of the HtmlImportThread.<p>
*
* @return log output of the import threat
*/
public String getThreadOutput() {
String output = "";
// check if we have a thread
if (m_htmlImportThread != null) {
// is it still alive?
if (m_htmlImportThread.isAlive()) {
output = m_htmlImportThread.getReportUpdate();
}
}
return output;
}
/**
* Sets the keepBrokenLinks.<p>
*
* @param keepBrokenLinks the keepBrokenLinks to set
*/
public void setKeepBrokenLinks(String keepBrokenLinks) {
m_keepBrokenLinks = keepBrokenLinks;
}
/**
* Sets the leaveExternalLinks.<p>
*
* @param leaveExternalLinks the leaveExternalLinks to set
*/
public void setLeaveExternalLinks(String leaveExternalLinks) {
m_leaveExternalLinks = leaveExternalLinks;
}
/**
* Imports all resources from the real filesystem, stores them into the correct locations
* in the OpenCms VFS and modifies all links. This method is called form the JSP to start the
* import process.<p>
* @param report StringBuffer for reporting
* @throws Exception if something goes wrong
*/
public void startImport(I_CmsReport report) throws Exception {
try {
m_report = report;
m_report.println(Messages.get().container(Messages.RPT_HTML_IMPORT_BEGIN_0), I_CmsReport.FORMAT_HEADLINE);
// first build the index of all resources
buildIndex(m_inputDir);
// build list with all parent resources of input directory for links to outside import folder
buildParentPath();
// copy and parse all html files first. during the copy process we will collect all
// required data for downloads and images
copyHtmlFiles(m_inputDir);
// now copy the other files
copyOtherFiles(m_inputDir);
// finally create all the external links
createExternalLinks();
m_report.println(Messages.get().container(Messages.RPT_HTML_IMPORT_END_0), I_CmsReport.FORMAT_HEADLINE);
} catch (Exception e) {
e.printStackTrace();
} finally {
// clear memory
clear();
}
}
/**
* Add a new external link to the storage of external links.<p>
*
* All links in this storage are later used to create entries in the external link gallery.
* @param externalLink link to an external resource
* @return the complete path to the external link file, if one is created.
*/
public String storeExternalLink(String externalLink) {
if (!m_leaveExternalLinksMode) {
m_externalLinks.add(externalLink);
return getExternalLinkFile(externalLink);
}
return null;
}
/**
* Add a new image info to the storage of image infos.<p>
*
* The image infoes are later used to set the description properties of the images.
* @param image the name of the image
* @param altText the alt-text of the image
*/
public void storeImageInfo(String image, String altText) {
m_imageInfo.put(image, altText);
}
/**
* Checks if the HtmlImportThread is still alive.<p>
*
* @return true or false
*/
public boolean threadAlive() {
boolean alive = false;
if (m_htmlImportThread != null) {
alive = m_htmlImportThread.isAlive();
}
return alive;
}
/**
* Translated a link into the real filesystem to its new location in the OpenCms VFS.<p>
*
* This is needed by the HtmlConverter to get the correct links for link translation.
* @param link link to the real filesystem
* @return string containing absulute link into the OpenCms VFS
*/
public String translateLink(String link) {
String translatedLink = null;
translatedLink = (String)m_fileIndex.get(link.replace('\\', '/'));
if (translatedLink == null) {
// its an anchor link, so copy use it
if (link.startsWith("#")) {
translatedLink = link;
}
// relative link to opencms root
else if (link.startsWith("/")) {
// strip cms context path
if (link.startsWith(OpenCms.getSystemInfo().getOpenCmsContext())) {
link = link.substring(OpenCms.getSystemInfo().getOpenCmsContext().length());
}
// check if resource exists
if ((m_keepBrokenLinksMode) || (m_cmsObject.existsResource(link))) {
translatedLink = link;
}
}
// // link to subdir
// else if ((link.startsWith(m_inputDir.replace('\\', '/'))) && (link.length() >= m_inputDir.length() + 1)) {
// // create a 'faked' link into the VFS. Original link was
// // directing to a missing page, so let the link so to the
// // same page inside of OpenCms.
// String relativeFSName = link.substring(m_inputDir.length() + 1);
// String relative = m_destinationDir + relativeFSName;
//
// if ((m_keepBrokenLinksMode) || (m_cmsObject.existsResource(relative))) {
// translatedLink = relative;
// }
// }
else {
String fileBase = getBasePath(m_inputDir, link);
String cmsBase = (String)m_parents.get(fileBase);
if (cmsBase != null) {
String outLink = cmsBase + link.substring(fileBase.length()).replace('\\', '/');
if ((m_keepBrokenLinksMode) || (m_cmsObject.existsResource(outLink))) {
translatedLink = outLink;
}
}
}
}
// if the link goes to a directory, lets link to the index page within
if ((translatedLink != null) && translatedLink.endsWith("/")) {
translatedLink += "index.html";
}
// final check: if the translated link is still null the original link found
// was broken
// lets link it to the same page, the link is found on
if (translatedLink == null) {
translatedLink = "#";
}
return translatedLink;
}
/**
* Builds an index of all files to be imported and determines their new names in the OpenCms.<p>
*
* @param startfolder the folder to start with
*
* @throws Exception if something goes wrong
*/
private void buildIndex(String startfolder) throws Exception {
File folder = new File(startfolder);
// get all subresources
File[] subresources = folder.listFiles();
// now loop through all subresources and add them to the index list
for (int i = 0; i < subresources.length; i++) {
try {
String relativeFSName = subresources[i].getAbsolutePath().substring(m_inputDir.length() + 1);
String absoluteVFSName = getVfsName(relativeFSName, subresources[i].getName(), subresources[i].isFile());
m_report.print(Messages.get().container(Messages.RPT_CREATE_INDEX_0), I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
relativeFSName.replace('\\', '/')));
m_report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
m_report.print(Messages.get().container(Messages.RPT_ARROW_RIGHT_0), I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
absoluteVFSName));
m_report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
m_fileIndex.put(subresources[i].getAbsolutePath().replace('\\', '/'), absoluteVFSName);
// if the subresource is a folder, get all subresources of it as well
if (subresources[i].isDirectory()) {
buildIndex(subresources[i].getAbsolutePath());
}
m_report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
I_CmsReport.FORMAT_OK);
} catch (Exception e) {
LOG.error(e);
m_report.println(e);
}
}
}
/**
* Builds a map with all parents of the destination dir to the real file system.
* So links to resources of outside the import folder can be found.
*
*/
private void buildParentPath() {
String destFolder = m_destinationDir;
String inputDir = m_inputDir.replace('\\', '/');
if (!inputDir.endsWith("/")) {
inputDir += "/";
}
int pos = inputDir.lastIndexOf("/");
while ((pos > 0) && (destFolder != null)) {
inputDir = inputDir.substring(0, pos);
m_parents.put(inputDir + "/", destFolder);
pos = inputDir.lastIndexOf("/", pos-1);
destFolder = CmsResource.getParentFolder(destFolder);
}
}
/**
* Clear all used indices and lists.<p>
*
* This should only be done when the import has been done.
*/
private void clear() {
m_fileIndex = null;
m_externalLinks = null;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -