1 28 29 package com.opencms.template.cache; 30 31 import org.opencms.file.CmsObject; 32 import org.opencms.main.CmsException; 33 import org.opencms.workplace.editors.CmsDefaultPageEditor; 34 35 import com.opencms.core.I_CmsResponse; 36 import com.opencms.legacy.CmsLegacyException; 37 import com.opencms.legacy.CmsXmlTemplateLoader; 38 import com.opencms.template.CmsCacheDirectives; 39 40 import java.util.Enumeration ; 41 import java.util.Hashtable ; 42 43 55 public class CmsUri { 56 57 61 private CmsElementDescriptor m_startingElement; 62 63 67 private CmsElementDefinitionCollection m_elementDefinitions = null; 68 69 76 public CmsUri(CmsElementDescriptor startingElement, CmsElementDefinition def, 77 boolean https){ 78 this(startingElement, new CmsElementDefinitionCollection()); 79 m_elementDefinitions.add(def); 80 } 81 82 89 public CmsUri(CmsElementDescriptor startingElement, CmsElementDefinitionCollection definitions) { 90 m_startingElement = startingElement; 91 m_elementDefinitions = definitions; 92 } 93 94 public byte[] callCanonicalRoot(CmsElementCache elementCache, CmsObject cms, Hashtable parameters) throws CmsException { 95 checkReadAccess(cms); 97 A_CmsElement elem = elementCache.getElementLocator().get(cms, m_startingElement, parameters); 99 100 if(elem == null){ 101 throw new CmsLegacyException("Couldn't create start element for this uri, have a look at the log file for details."); 102 } 103 try { 105 Enumeration els = m_elementDefinitions.getAllElementNames(); 106 while(els.hasMoreElements()){ 107 String currentElement = (String )els.nextElement(); 108 CmsElementDefinition eldef = m_elementDefinitions.get(currentElement); 109 parameters.put(currentElement +"._TEMPLATE_", eldef.getTemplateName()); 110 parameters.put(currentElement +"._CLASS_", eldef.getClassName()); 111 if(eldef.getTemplateSelector()!= null) { 112 parameters.put(currentElement +"._TEMPLATESELECTOR_", eldef.getTemplateSelector()); 113 } else { 114 parameters.put(currentElement +"._TEMPLATESELECTOR_", "default"); 115 } 116 } 117 } catch(NullPointerException exc) { 118 } 120 121 CmsCacheDirectives proxySettings = new CmsCacheDirectives(true); 123 elem.checkProxySettings(cms, proxySettings, parameters); 124 125 if(m_elementDefinitions != null){ 127 Enumeration elementNames = m_elementDefinitions.getAllElementNames(); 128 while(elementNames.hasMoreElements()){ 129 String name = (String )elementNames.nextElement(); 130 CmsElementDefinition currentDef = m_elementDefinitions.get(name); 131 132 if (CmsDefaultPageEditor.XML_BODY_ELEMENT.equalsIgnoreCase(name)) { 133 if (currentDef.getTemplateName() != null) { 136 cms.getRequestContext().setAttribute(CmsDefaultPageEditor.XML_BODY_ELEMENT, currentDef.getTemplateName()); 137 } 138 } 139 140 A_CmsElement currentEle = elementCache.getElementLocator().get( 141 cms, new CmsElementDescriptor(currentDef.getClassName(), 142 currentDef.getTemplateName()), parameters); 143 if(currentEle == null){ 144 throw new CmsLegacyException("Couldn't create element '"+name+"', have a look at the log file for details."); 145 } 146 currentEle.checkProxySettings(cms, proxySettings, parameters); 147 } 148 } 149 150 I_CmsResponse resp = CmsXmlTemplateLoader.getResponse(cms.getRequestContext()); 151 if(!resp.containsHeader("Cache-Control")) { 153 if(proxySettings.isProxyPrivateCacheable() 156 && cms.getRequestContext().currentProject().getId() == org.opencms.file.CmsProject.ONLINE_PROJECT_ID){ 157 resp.setHeader("Cache-Control", "max-age=300"); 159 if(!proxySettings.isProxyPublicCacheable()){ 160 resp.addHeader("Cache-Control", "private"); 161 } 162 }else{ 163 resp.setHeader("Cache-Control", "no-cache"); 166 resp.setHeader("Pragma", "no-cache"); 168 } 169 } 170 171 172 return elem.getContent(elementCache, cms, m_elementDefinitions, com.opencms.core.I_CmsConstants.C_ROOT_TEMPLATE_NAME, parameters, null); 173 } 174 179 public void checkReadAccess(CmsObject cms) throws CmsException{ 180 return; 181 } 217 218 public CmsElementDescriptor getElementDescriptor() { 219 return m_startingElement; 220 } 221 }
| Popular Tags
|