📄 cmsstaticexportmanager.java
字号:
* @param request the request to check for export data
* @param cms an initialized cms context (should be initialized with the "Guest" user only
* @return the export data for the request, if null is returned no export is required
*/
public CmsStaticExportData getExportData(HttpServletRequest request, CmsObject cms) {
if (!isStaticExportEnabled()) {
// export is disabled
return null;
}
// build the rfs name for the export "on demand"
String rfsName = request.getParameter(EXPORT_MARKER);
if ((rfsName == null)) {
rfsName = (String)request.getAttribute(EXPORT_ATTRIBUTE_ERROR_REQUEST_URI);
}
if (request.getHeader(CmsRequestUtil.HEADER_OPENCMS_EXPORT) != null) {
// this is a request created by the static export and directly send to 404 handler
// so remove the leading handler identification
int prefix = rfsName.startsWith(getExportUrlPrefix()) ? getExportUrlPrefix().length() : 0;
if (prefix > 0) {
rfsName = rfsName.substring(prefix);
} else {
return null;
}
}
if (!isValidRfsName(rfsName)) {
// this is not an export request, no further processing is required
return null;
}
return getExportData(rfsName, null, cms);
}
/**
* Returns the export data for a requested resource, if null is returned no export is required.<p>
*
* @param vfsName the VFS name of the resource requested
* @param cms an initialized cms context (should be initialized with the "Guest" user only
* @return the export data for the request, if null is returned no export is required
*/
public CmsStaticExportData getExportData(String vfsName, CmsObject cms) {
return getExportData(getRfsName(cms, vfsName), vfsName, cms);
}
/**
* Gets the export enbled value as a string representation.<p>
*
* @return <code>"true"</code> or <code>"false"</code>
*/
public String getExportEnabled() {
return String.valueOf(m_staticExportEnabled);
}
/**
* Returns the current folder matcher.<p>
*
* @return the current folder matcher
*/
public CmsExportFolderMatcher getExportFolderMatcher() {
return m_exportFolderMatcher;
}
/**
* Returns list of resouces patterns which are part of the export.<p>
*
* @return the of resouces patterns which are part of the export.
*/
public List getExportFolderPatterns() {
return Collections.unmodifiableList(m_exportFolders);
}
/**
* Returns specific http headers for the static export.<p>
*
* If the header <code>Cache-Control</code> is set, OpenCms will not use its default headers.<p>
*
* @return the list of http export headers
*/
public List getExportHeaders() {
return Collections.unmodifiableList(m_exportHeaders);
}
/**
* Returns the list of all resources that have the "exportname" property set.<p>
*
* @return the list of all resources that have the "exportname" property set
*/
public Map getExportnames() {
return m_exportnameResources;
}
/**
* Returns the export path for the static export, that is the folder where the
* static exported resources will be written to.<p>
*
* The returned value will be a direcory like prefix. The value is configured
* in the <code>opencms-importexport.xml</code> configuration file. An optimization
* of the configured value will be performed, where all relative path infprmation is resolved
* (for example <code>/export/../static</code> will be resolved to <code>/export</code>.
* Moreover, if the configured path ends with a <code>/</code>, this will be cut off
* (for example <code>/export/</code> becomes <code>/export</code>.<p>
*
* This is resource name based, and based on the rfs-rules defined in the
* <code>opencms-importexport.xml</code> configuration file.
*
* @param vfsName the name of the resource to export
*
* @return the export path for the static export, that is the folder where the
*
* @see #getRfsPrefix(String)
* @see #getVfsPrefix()
*/
public String getExportPath(String vfsName) {
if (vfsName != null) {
Iterator it = m_rfsRules.iterator();
while (it.hasNext()) {
CmsStaticExportRfsRule rule = (CmsStaticExportRfsRule)it.next();
if (rule.getSource().matcher(vfsName).matches()) {
return rule.getExportPath();
}
}
}
return m_staticExportPath;
}
/**
* Returns the original configured export path for the static export without the complete rfs path, to be used
* when re-writing the configuration.<p>
*
* This is required <b>only</b> to serialize the configuration again exactly as it was configured.
* This method should <b>not</b> be used otherwise. Use <code>{@link #getExportPath(String)}</code>
* to obtain the export path to use when exporting.<p>
*
* @return the original configured export path for the static export without the complete rfs path
*/
public String getExportPathForConfiguration() {
return m_staticExportPathConfigured;
}
/**
* Returns true if the default value for the resource property "export" is true.<p>
*
* @return true if the default value for the resource property "export" is true
*/
public boolean getExportPropertyDefault() {
return m_exportPropertyDefault;
}
/**
* Returns the export Rules.<p>
*
* @return the export Rules
*/
public List getExportRules() {
return Collections.unmodifiableList(m_exportRules);
}
/**
* Gets the list of resouce suffixes which will be exported by default.<p>
*
* @return list of resouce suffixe
*/
public List getExportSuffixes() {
return m_exportSuffixes;
}
/**
* Returns the export URL used for internal requests for exporting resources that require a
* request / response (like JSP).<p>
*
* @return the export URL used for internal requests for exporting resources like JSP
*/
public String getExportUrl() {
return m_exportUrl;
}
/**
* Returns the export URL used for internal requests with unsubstituted context values, to be used
* when re-writing the configuration.<p>
*
* This is required <b>only</b> to serialize the configuration again exactly as it was configured.
* This method should <b>not</b> be used otherwise. Use <code>{@link #getExportUrl()}</code>
* to obtain the export path to use when exporting.<p>
*
* @return the export URL used for internal requests with unsubstituted context values
*/
public String getExportUrlForConfiguration() {
return m_exportUrlConfigured;
}
/**
* Returns the export URL used for internal requests for exporting resources that require a
* request / response (like JSP) without http://servername.<p>
*
* @return the export URL used for internal requests for exporting resources like JSP without http://servername
*/
public String getExportUrlPrefix() {
return m_exportUrlPrefix;
}
/**
* Returns the static export handler class.<p>
*
* If not set, a new <code>{@link CmsAfterPublishStaticExportHandler}</code> is created and returned.<p>
*
* @return the static export handler class.
*/
public I_CmsStaticExportHandler getHandler() {
if (m_handler == null) {
setHandler(CmsOnDemandStaticExportHandler.class.getName());
}
return m_handler;
}
/**
* Gets the plain export optimization value as a string representation.<p>
*
* @return <code>"true"</code> or <code>"false"</code>
*/
public String getPlainExportOptimization() {
return String.valueOf(m_quickPlainExport);
}
/**
* Returns true if the quick plain export is enabled.<p>
*
* @return true if the quick plain export is enabled
*/
public boolean getQuickPlainExport() {
return m_quickPlainExport;
}
/**
* Gets the relative links value as a string representation.<p>
*
* @return <code>"true"</code> or <code>"false"</code>
*/
public String getRelativeLinks() {
return String.valueOf(m_exportRelativeLinks);
}
/**
* Returns the remote addr used for internal requests.<p>
*
* @return the remote addr
*/
public String getRemoteAddr() {
return m_remoteAddr;
}
/**
* Returns the remote address.<p>
*
* @return the remote address
*/
public String getRemoteAddress() {
return m_remoteAddr;
}
/**
* Returns the static export rfs name for a given vfs resoure.<p>
*
* @param cms an initialized cms context
* @param vfsName the name of the vfs resource
*
* @return the static export rfs name for a give vfs resoure
*
* @see #getVfsName(CmsObject, String)
* @see #getRfsName(CmsObject, String, String)
*/
public String getRfsName(CmsObject cms, String vfsName) {
return getRfsName(cms, vfsName, null);
}
/**
* Returns the static export rfs name for a given vfs resoure where the link to the
* resource includes request parameters.<p>
*
* @param cms an initialized cms context
* @param vfsName the name of the vfs resource
* @param parameters the parameters of the link pointing to the resource
*
* @return the static export rfs name for a give vfs resoure
*/
public String getRfsName(CmsObject cms, String vfsName, String parameters) {
String rfsName = vfsName;
try {
// check if the resource folder (or a parent folder) has the "exportname" property set
CmsProperty exportNameProperty = cms.readPropertyObject(
CmsResource.getFolderPath(rfsName),
CmsPropertyDefinition.PROPERTY_EXPORTNAME,
true);
if (exportNameProperty.isNullProperty()) {
// if "exportname" is not set we must add the site root
rfsName = cms.getRequestContext().addSiteRoot(rfsName);
} else {
// "exportname" property is set
String exportname = exportNameProperty.getValue();
if (exportname.charAt(0) != '/') {
exportname = '/' + exportname;
}
if (exportname.charAt(exportname.length() - 1) != '/') {
exportname = exportname + '/';
}
String value = null;
boolean cont;
String resourceName = rfsName;
do {
// find out where the export name was set, to replace these parent folders in the RFS name
try {
CmsProperty prop = cms.readPropertyObject(
resourceName,
CmsPropertyDefinition.PROPERTY_EXPORTNAME,
false);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -