cmshtmlimport.java
来自「找了很久才找到到源代码」· Java 代码 · 共 1,633 行 · 第 1/5 页
JAVA
1,633 行
// create the file
if (!m_overwrite) {
m_cmsObject.createResource(vfsFileName, type, content, properties);
} else {
try {
CmsLock lock = m_cmsObject.getLock(vfsFileName);
if (lock.getType() != CmsLockType.EXCLUSIVE) {
m_cmsObject.lockResource(vfsFileName);
}
m_cmsObject.deleteResource(vfsFileName, CmsResource.DELETE_PRESERVE_SIBLINGS);
} catch (CmsException e) {
// the file did not exist, so create it
} finally {
m_cmsObject.createResource(vfsFileName, type, content, properties);
}
m_report.print(
Messages.get().container(Messages.RPT_OVERWRITE_0),
I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_DOTS_0));
}
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);
}
}
/**
* Creates all external links, which were found during the HTML-page processing.<p>
*
*/
private void createExternalLinks() {
// loop through all links
Iterator i = m_externalLinks.iterator();
while (i.hasNext()) {
String linkUrl = (String)i.next();
String filename = getExternalLinkFile(linkUrl);
m_report.print(Messages.get().container(Messages.RPT_CREATE_EXTERNAL_LINK_0), I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
filename));
m_report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
List properties = new ArrayList();
CmsProperty property1 = new CmsProperty(
CmsPropertyDefinition.PROPERTY_TITLE,
"Link to " + linkUrl,
"Link to " + linkUrl);
properties.add(property1);
try {
m_cmsObject.createResource(
m_linkGallery + filename,
CmsResourceTypePointer.getStaticTypeId(),
linkUrl.getBytes(),
properties);
} catch (CmsException e) {
// do nothing here, an exception will be thrown if this link already exisits
}
m_report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
I_CmsReport.FORMAT_OK);
}
}
/**
* Creates a file in the VFS.<p>
*
* @param filename the complete filename in the real file system
* @param position the default nav pos of this folder
* @param content the html content of the file
* @param properties the file properties
*/
private void createFile(String filename, int position, String content, Hashtable properties) {
String vfsFileName = (String)m_fileIndex.get(filename.replace('\\', '/'));
if (vfsFileName != null) {
try {
m_report.print(Messages.get().container(Messages.RPT_CREATE_FILE_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));
// check if we have to set the navpos property.
if ((properties.get(CmsPropertyDefinition.PROPERTY_NAVPOS) == null)
&& (properties.get(CmsPropertyDefinition.PROPERTY_NAVTEXT) != null)) {
// set the position in the folder as navpos
// we have to add one to the postion, since it is counted from 0
properties.put(CmsPropertyDefinition.PROPERTY_NAVPOS, (position + 1) + "");
}
// create new xml page
Locale locale = new Locale(m_locale);
CmsXmlPage page = new CmsXmlPage(locale, OpenCms.getSystemInfo().getDefaultEncoding());
page.addValue(m_element, locale);
page.setStringValue(m_cmsObject, m_element, locale, content);
// check links
CmsLinkTable linkTable = page.getLinkTable(m_element, locale);
Iterator i = linkTable.iterator();
while (i.hasNext()) {
CmsLink link = (CmsLink)i.next();
String target = link.getTarget();
// do only update internal links
if (link.isInternal()) {
target = m_cmsObject.getRequestContext().getFileTranslator().translateResource(target);
// update link
link.updateLink(target, link.getAnchor(), link.getQuery());
link.checkConsistency(m_cmsObject);
}
}
// marshal xml page and get the content
byte[] contentByteArray = page.marshal();
List oldProperties = new ArrayList();
if (!m_overwrite) {
m_cmsObject.createResource(
vfsFileName,
CmsResourceTypeXmlPage.getStaticTypeId(),
contentByteArray,
new ArrayList());
} else {
try {
// try if the file is there
oldProperties = m_cmsObject.readPropertyObjects(vfsFileName, false);
CmsLock lock = m_cmsObject.getLock(vfsFileName);
if (lock.getType() != CmsLockType.EXCLUSIVE) {
m_cmsObject.lockResource(vfsFileName);
}
m_cmsObject.deleteResource(vfsFileName, CmsResource.DELETE_PRESERVE_SIBLINGS);
} catch (CmsException e) {
// the file did not exist, so we do not have to delete it
} finally {
// create the new resource
m_report.print(Messages.get().container(Messages.RPT_OVERWRITE_0), I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_DOTS_0));
m_cmsObject.createResource(
vfsFileName,
CmsResourceTypeXmlPage.getStaticTypeId(),
contentByteArray,
new ArrayList());
}
}
// create all properties and put them in an ArrayList
Iterator it = properties.entrySet().iterator();
List propertyList = new ArrayList();
while (it.hasNext()) {
// get property and value
Map.Entry entry = (Map.Entry)it.next();
String propertyKey = (String)entry.getKey();
String propertyVal = (String)entry.getValue();
// create new Property Object
CmsProperty property = new CmsProperty(propertyKey, propertyVal, propertyVal);
// create implicitly if Property doesn't exist already
property.setAutoCreatePropertyDefinition(true);
// add new property to the list
propertyList.add(property);
}
// try to write the properties
try {
m_cmsObject.writePropertyObjects(vfsFileName, propertyList);
// write the old properties if available
m_cmsObject.writePropertyObjects(vfsFileName, oldProperties);
} catch (CmsException e1) {
e1.printStackTrace();
}
m_report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
I_CmsReport.FORMAT_OK);
} catch (CmsException e) {
m_report.println(e);
LOG.error(e.getLocalizedMessage(), e);
}
}
}
/**
* Creates a folder in the VFS.<p>
*
* @param foldername the complete foldername in the real file system
* @param position the default nav pos of this folder
* @param properties the file properties
*/
private void createFolder(String foldername, int position, Hashtable properties) {
String vfsFolderName = (String)m_fileIndex.get(foldername.replace('\\', '/'));
m_report.print(Messages.get().container(Messages.RPT_CREATE_FOLDER_0), I_CmsReport.FORMAT_NOTE);
m_report.print(org.opencms.report.Messages.get().container(
org.opencms.report.Messages.RPT_ARGUMENT_1,
vfsFolderName));
m_report.print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0));
if (vfsFolderName != null) {
String path = vfsFolderName.substring(
0,
vfsFolderName.substring(0, vfsFolderName.length() - 1).lastIndexOf("/"));
String folder = vfsFolderName.substring(path.length(), vfsFolderName.length());
try {
// try to find a meta.properties file in the folder
String propertyFileName = foldername + File.separator + META_PROPERTIES;
boolean metaPropertiesFound = false;
ExtendedProperties propertyFile = new ExtendedProperties();
try {
propertyFile.load(new FileInputStream(new File(propertyFileName)));
metaPropertiesFound = true;
} catch (Exception e1) {
// do nothing if the propertyfile could not be loaded since it is not required
// that such s file does exist
}
// now copy all values from the propertyfile to the already found properties of the
// new folder in OpenCms
// only do this if we have found a meta.properties file
if (metaPropertiesFound) {
Enumeration enu = propertyFile.keys();
String property = "";
while (enu.hasMoreElements()) {
// get property and value
try {
property = (String)enu.nextElement();
String propertyvalue = (String)propertyFile.get(property);
// copy to the properties of the OpenCms folder
properties.put(property, propertyvalue);
} catch (Exception e2) {
// just skip this property if it could ne be read.
e2.printStackTrace();
}
}
// check if we have to set the navpos property.
if (properties.get(CmsPropertyDefinition.PROPERTY_NAVPOS) == null) {
// set the position in the folder as navpos
// we have to add one to the postion, since it is counted from 0
properties.put(CmsPropertyDefinition.PROPERTY_NAVPOS, (position + 1) + "");
}
// check if we have to set the navpos property.
if (properties.get(CmsPropertyDefinition.PROPERTY_NAVTEXT) == null) {
// set the foldername in the folder as navtext
String navtext = folder.substring(1, 2).toUpperCase()
+ folder.substring(2, folder.length() - 1);
properties.put(CmsPropertyDefinition.PROPERTY_NAVTEXT, navtext);
}
} else {
// if there was no meta.properties file, no properties should be added to the
// folder
properties = new Hashtable();
}
// try to read the folder, it its there we must not create it again
try {
m_cmsObject.readFolder(path + folder);
m_cmsObject.lockResource(path + folder);
} catch (CmsException e1) {
// the folder was not there, so create it
m_cmsObject.createResource(path + folder, CmsResourceTypeFolder.getStaticTypeId());
}
// create all properties and put them in an ArrayList
Enumeration enu = properties.keys();
List propertyList = new ArrayList();
while (enu.hasMoreElements()) {
// get property and value
String propertyKey = (String)enu.nextElement();
String propertyVal = (String)properties.get(propertyKey);
CmsProperty property = new CmsProperty(propertyKey, propertyVal, propertyVal);
// create implicitly if Property doesn't exist already
property.setAutoCreatePropertyDefinition(true);
// add new property to the list
propertyList.add(property);
}
// try to write the property Objects
try {
m_cmsObject.writePropertyObjects(path + folder, propertyList);
} catch (CmsException e1) {
e1.printStackTrace();
}
m_report.println(
org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0),
I_CmsReport.FORMAT_OK);
} catch (CmsException e) {
m_report.println(e);
LOG.error(e.getLocalizedMessage(), e);
}
}
}
/**
* Compares 2 pathes for the base part which have both equal.
*
* @param path1 the first path to compare
* @param path2 the second path to compare
* @return the base path of both which are equal
*/
private String getBasePath(String path1, String path2) {
StringBuffer base = new StringBuffer();
path1 = path1.replace('\\', '/');
path2 = path2.replace('\\', '/');
String[] parts1 = path1.split("/");
String[] parts2 = path2.split("/");
for (int i = 0; i < parts1.length; i++) {
if (i >= parts2.length) {
break;
}
if (parts1[i].equals(parts2[i])) {
base.append(parts1[i] + "/");
}
}
return base.toString();
}
/**
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?