📄 cmsxmltemplateloader.java
字号:
public synchronized void cmsEvent(CmsEvent event) {
switch (event.getType()) {
case I_CmsEventListener.EVENT_FLEX_CACHE_CLEAR:
clearLoaderCache(true, true);
break;
case I_CmsEventListener.EVENT_CLEAR_ONLINE_CACHES:
clearLoaderCache(true, true);
break;
case I_CmsEventListener.EVENT_CLEAR_OFFLINE_CACHES:
clearLoaderCache(true, true);
break;
case I_CmsEventListener.EVENT_CLEAR_CACHES:
clearLoaderCache(true, true);
break;
default:
// no operation
}
}
/**
* Destroy this ResourceLoder, this is a NOOP so far.
*/
public void destroy() {
// NOOP
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#dump(org.opencms.file.CmsObject, org.opencms.file.CmsResource, java.lang.String, java.util.Locale, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public byte[] dump(
CmsObject cms,
CmsResource file,
String element,
Locale locale,
HttpServletRequest req,
HttpServletResponse res) throws CmsException {
initLegacyRequest(cms, req, res);
String absolutePath = cms.getSitePath(file);
// this will work for the "default" template class com.opencms.template.CmsXmlTemplate only
CmsXmlTemplate template = new CmsXmlTemplate();
// get the appropriate content and convert it to bytes
return template.getContent(cms, absolutePath, element, null);
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#export(org.opencms.file.CmsObject, org.opencms.file.CmsResource, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public byte[] export(CmsObject cms, CmsResource resource, HttpServletRequest req, HttpServletResponse res)
throws IOException, CmsException {
CmsFile file = CmsFile.upgrade(resource, cms);
initLegacyRequest(cms, req, res);
CmsRequestHttpServlet cmsReq = new CmsRequestHttpServlet(req, cms.getRequestContext().getFileTranslator());
return generateOutput(cms, file, cmsReq);
}
/**
* @see org.opencms.configuration.I_CmsConfigurationParameterHandler#getConfiguration()
*/
public Map getConfiguration() {
// return the configuration in an immutable form
return Collections.unmodifiableMap(m_configuration);
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#getLoaderId()
*/
public int getLoaderId() {
return C_RESOURCE_LOADER_ID;
}
/**
* Return a String describing the ResourceLoader,
* which is <code>"The OpenCms default resource loader for XMLTemplates"</code>.<p>
*
* @return a describing String for the ResourceLoader
*/
public String getResourceLoaderInfo() {
return "The OpenCms default resource loader for XMLTemplates";
}
/**
* @see org.opencms.loader.I_CmsLoaderIncludeExtension#includeExtension(java.lang.String, java.lang.String, boolean, java.util.Map, javax.servlet.ServletRequest, javax.servlet.ServletResponse)
*/
public String includeExtension(
String target,
String element,
boolean editable,
Map parameterMap,
ServletRequest req,
ServletResponse res) throws CmsException {
// the Flex controller provides access to the interal OpenCms structures
CmsFlexController controller = CmsFlexController.getController(req);
// simple sanity check, controller should never be null here
if (controller == null) {
return target;
}
// special code to handle XmlTemplate based file includes
if (element != null) {
if (!("body".equals(element) || "(default)".equals(element))) {
// add template selector for multiple body XML files
CmsJspTagInclude.addParameter(parameterMap, CmsXmlTemplate.C_FRAME_SELECTOR, element, true);
}
}
boolean isPageTarget;
try {
// check if the target does exist in the OpenCms VFS
CmsResource targetResource = controller.getCmsObject().readResource(target);
isPageTarget = ((CmsResourceTypePage.getStaticTypeId() == targetResource.getTypeId()));
} catch (CmsException e) {
controller.setThrowable(e, target);
throw new CmsLegacyException("File not found: " + target, e);
}
String bodyAttribute = (String)controller.getCmsObject().getRequestContext().getAttribute(
CmsDefaultPageEditor.XML_BODY_ELEMENT);
if (bodyAttribute == null) {
// no body attribute is set: this is NOT a sub-element in a XML mastertemplate
if (isPageTarget) {
// add body file path to target
if (!target.startsWith(CmsCompatibleCheck.VFS_PATH_BODIES)) {
target = CmsCompatibleCheck.VFS_PATH_BODIES + target.substring(1);
}
// save target as "element replace" parameter for body loader
CmsJspTagInclude.addParameter(
parameterMap,
CmsXmlTemplateLoader.C_ELEMENT_REPLACE,
"body:" + target,
true);
target = C_BODYLOADER_URI;
}
} else {
// body attribute is set: this is a sub-element in a XML mastertemplate
if (target.equals(controller.getCmsObject().getRequestContext().getUri())) {
// target can be ignored, set body attribute as "element replace" parameter
CmsJspTagInclude.addParameter(parameterMap, CmsXmlTemplateLoader.C_ELEMENT_REPLACE, "body:"
+ bodyAttribute, true);
// redirect target to body loader
target = C_BODYLOADER_URI;
} else {
if (isPageTarget) {
// add body file path to target
if (isPageTarget && !target.startsWith(CmsCompatibleCheck.VFS_PATH_BODIES)) {
target = CmsCompatibleCheck.VFS_PATH_BODIES + target.substring(1);
}
// save target as "element replace" parameter
CmsJspTagInclude.addParameter(parameterMap, CmsXmlTemplateLoader.C_ELEMENT_REPLACE, "body:"
+ target, true);
target = C_BODYLOADER_URI;
}
}
}
return target;
}
/**
* @see org.opencms.configuration.I_CmsConfigurationParameterHandler#initConfiguration()
*/
public void initConfiguration() {
ExtendedProperties config = new ExtendedProperties();
config.putAll(m_configuration);
// check if the element cache is enabled
boolean elementCacheEnabled = config.getBoolean("elementcache.enabled", false);
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(". Loader init : XMLTemplate element cache "
+ (elementCacheEnabled ? "enabled" : "disabled"));
}
if (elementCacheEnabled) {
try {
m_elementCache = new CmsElementCache(config.getInteger("elementcache.uri", 10000), config.getInteger(
"elementcache.elements",
50000), config.getInteger("elementcache.variants", 100));
} catch (Exception e) {
if (CmsLog.INIT.isWarnEnabled()) {
CmsLog.INIT.warn(". Loader init : XMLTemplate element cache non-critical error "
+ e.toString());
}
}
m_variantDeps = new Hashtable();
m_elementCache.getElementLocator().setExternDependencies(m_variantDeps);
} else {
m_elementCache = null;
}
if (CmsLog.INIT.isInfoEnabled()) {
CmsLog.INIT.info(". Loader init : " + this.getClass().getName() + " initialized");
}
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#isStaticExportEnabled()
*/
public boolean isStaticExportEnabled() {
return true;
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#isStaticExportProcessable()
*/
public boolean isStaticExportProcessable() {
return true;
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#isUsableForTemplates()
*/
public boolean isUsableForTemplates() {
return true;
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#isUsingUriWhenLoadingTemplate()
*/
public boolean isUsingUriWhenLoadingTemplate() {
return true;
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#load(org.opencms.file.CmsObject, org.opencms.file.CmsResource, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void load(CmsObject cms, CmsResource resource, HttpServletRequest req, HttpServletResponse res)
throws CmsException {
initLegacyRequest(cms, req, res);
processXmlTemplate(cms, CmsFile.upgrade(resource, cms));
}
/**
* @see org.opencms.loader.I_CmsResourceLoader#service(org.opencms.file.CmsObject, org.opencms.file.CmsResource, javax.servlet.ServletRequest, javax.servlet.ServletResponse)
*/
public void service(CmsObject cms, CmsResource file, ServletRequest req, ServletResponse res)
throws CmsException, IOException {
long timer1 = 0;
if (DEBUG > 0) {
timer1 = System.currentTimeMillis();
System.err.println("============ CmsXmlTemplateLoader loading: " + cms.getSitePath(file));
System.err.println("CmsXmlTemplateLoader.service() cms uri is: " + cms.getRequestContext().getUri());
}
// save the original context settings
String rnc = cms.getRequestContext().getEncoding().trim();
// String oldUri = cms.getRequestContext().getUri();
initLegacyRequest(cms, (HttpServletRequest)req, (HttpServletResponse)res);
I_CmsRequest cms_req = CmsXmlTemplateLoader.getRequest(cms.getRequestContext());
HttpServletRequest originalreq = cms_req.getOriginalRequest();
try {
// get the CmsRequest
byte[] result = null;
org.opencms.file.CmsFile fx = cms.readFile(cms.getSitePath(file));
// care about encoding issues
String dnc = OpenCms.getSystemInfo().getDefaultEncoding().trim();
String enc = cms.readPropertyObject(
cms.getSitePath(fx),
CmsPropertyDefinition.PROPERTY_CONTENT_ENCODING,
true).getValue(dnc).trim();
// fake the called URI (otherwise XMLTemplate / ElementCache would not work)
cms_req.setOriginalRequest((HttpServletRequest)req);
cms.getRequestContext().setEncoding(enc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -