cmshtmlimport.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,633 行 · 第 1/5 页
JAVA
1,633 行
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;
}
/**
* Tests if all given input parameters for the HTML Import are valid, i.e. that all the
* given folders do exist. <p>
*
* @throws CmsIllegalArgumentException if some parameters are not valid
*/
public void validate() throws CmsIllegalArgumentException {
// check the input directory
File inputDir = new File(m_inputDir);
if (!inputDir.exists() || inputDir.isFile()) {
// the input directory is not valid
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_INPUTDIR_1,
m_inputDir));
}
// check the destination directory
try {
if (CmsStringUtil.isEmpty(m_destinationDir)) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_DESTDIR_1,
m_destinationDir));
}
m_cmsObject.readFolder(m_destinationDir);
} catch (CmsException e) {
// an excpetion is thrown if the folder does not exist
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_DESTDIR_1,
m_destinationDir), e);
}
// check the image gallery
// only if flag for leaving images at original location is off
if (!m_leaveImages) {
try {
CmsFolder folder = m_cmsObject.readFolder(m_imageGallery);
// check if folder is a image gallery
String name = OpenCms.getResourceManager().getResourceType(folder.getTypeId()).getTypeName();
if (!name.equals("imagegallery")) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_IMGGALLERY_INVALID_1,
m_imageGallery));
}
} catch (CmsException e) {
// an excpetion is thrown if the folder does not exist
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_IMGGALLERY_1,
m_imageGallery), e);
}
}
// check the link gallery
// only if flag for leaving external links at original location is off
if (!m_leaveExternalLinks) {
try {
CmsFolder folder = m_cmsObject.readFolder(m_linkGallery);
// check if folder is a link gallery
String name = OpenCms.getResourceManager().getResourceType(folder.getTypeId()).getTypeName();
if (!name.equals("linkgallery")) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_LINKGALLERY_INVALID_1,
m_linkGallery));
}
} catch (CmsException e) {
// an excpetion is thrown if the folder does not exist
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_LINKGALLERY_1,
m_linkGallery), e);
}
}
// check the download gallery
if ((!isExternal(m_downloadGallery)) && (!m_leaveDownloads)) {
try {
CmsFolder folder = m_cmsObject.readFolder(m_downloadGallery);
// check if folder is a download gallery
String name = OpenCms.getResourceManager().getResourceType(folder.getTypeId()).getTypeName();
if (!name.equals("downloadgallery")) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_DOWNGALLERY_INVALID_1,
m_downloadGallery));
}
} catch (CmsException e) {
// an excpetion is thrown if the folder does not exist
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_DOWNGALLERY_1,
m_downloadGallery), e);
}
}
// check the template
try {
m_cmsObject.readResource(m_template, CmsResourceFilter.ALL);
} catch (CmsException e) {
// an excpetion is thrown if the template does not exist
if (!isValidElement()) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_TEMPLATE_1,
m_template), e);
}
}
// check the element
if (!isValidElement()) {
throw new CmsIllegalArgumentException(Messages.get().container(
Messages.GUI_HTMLIMPORT_INVALID_ELEM_2,
m_element,
m_template));
}
// check if we are in an offline project
if (m_cmsObject.getRequestContext().currentProject().isOnlineProject()) {
throw new CmsIllegalArgumentException(
Messages.get().container(Messages.GUI_HTMLIMPORT_CONSTRAINT_OFFLINE_0));
}
}
/**
* 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.getLocalizedMessage(), 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);
}
}
/**
* Copies all HTML files to the VFS.<p>
*
* @param startfolder startfolder the folder to start with
*
* @throws Exception if something goes wrong
*/
private void copyHtmlFiles(String startfolder) throws Exception {
try {
File folder = new File(startfolder);
// get all subresources
File[] subresources = folder.listFiles();
// now loop through all subresources
for (int i = 0; i < subresources.length; i++) {
// if the subresource is a folder, get all subresources of it as well
if (subresources[i].isDirectory()) {
// first, create the folder in the VFS
Hashtable properties = new Hashtable();
createFolder(subresources[i].getAbsolutePath(), i, properties);
// now process all rescources inside of the folder
copyHtmlFiles(subresources[i].getAbsolutePath());
} else {
// create a new file in the VFS
String vfsFileName = (String)m_fileIndex.get(subresources[i].getAbsolutePath().replace('\\', '/'));
// check if this is an Html file, do only import and parse those
int type = getFileType(vfsFileName);
if (CmsResourceTypePlain.getStaticTypeId() == type) {
Hashtable properties = new Hashtable();
// the subresource is a file, so start the parsing process
String content = "";
try {
content = parseHtmlFile(subresources[i], properties);
} catch (CmsException e) {
m_report.println(e);
}
properties.put("template", m_template);
// create the file in the VFS
createFile(subresources[i].getAbsolutePath(), i, content, properties);
}
}
}
} catch (Exception e) {
LOG.error(e.getLocalizedMessage(), e);
}
}
/**
* Copies all files except HTML files to the VFS.<p>
*
* @param startfolder startfolder the folder to start with
*/
private void copyOtherFiles(String startfolder) {
try {
File folder = new File(startfolder);
// get all subresources
File[] subresources = folder.listFiles();
// now loop through all subresources
for (int i = 0; i < subresources.length; i++) {
// if the subresource is a folder, get all subresources of it as well
if (subresources[i].isDirectory()) {
copyOtherFiles(subresources[i].getAbsolutePath());
} else {
// do not import the "meta.properties" file
if (!subresources[i].getName().equals(META_PROPERTIES)) {
// create a new file in the VFS
String vfsFileName = (String)m_fileIndex.get(subresources[i].getAbsolutePath().replace(
'\\',
'/'));
// get the file type of the FS file
int type = getFileType(vfsFileName);
if (CmsResourceTypePlain.getStaticTypeId() != type) {
if (isExternal(vfsFileName)) {
m_report.print(
Messages.get().container(Messages.RPT_SKIP_EXTERNAL_0),
I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
subresources[i]));
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.println(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
vfsFileName));
} else {
m_report.print(Messages.get().container(Messages.RPT_IMPORT_0), I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
vfsFileName));
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_DOTS_0));
// get the content of the FS file
byte[] content = getFileBytes(subresources[i]);
// get the filename from the fileIndex list
// check if there are some image infos stored for this resource
List properties = new ArrayList();
String altText = (String)m_imageInfo.get(subresources[i].getAbsolutePath().replace(
'\\',
'/'));
CmsProperty property1 = new CmsProperty(
CmsPropertyDefinition.PROPERTY_DESCRIPTION,
altText,
altText);
CmsProperty property2 = new CmsProperty(
CmsPropertyDefinition.PROPERTY_TITLE,
altText,
altText);
// add them to the title and description property
if (altText != null) {
properties.add(property1);
properties.add(property2);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?