1 31 32 package org.opencms.loader; 33 34 import org.opencms.file.CmsFile; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.flex.CmsFlexController; 38 import org.opencms.main.CmsException; 39 import org.opencms.main.CmsLog; 40 import org.opencms.main.OpenCms; 41 import org.opencms.util.CmsRequestUtil; 42 import org.opencms.util.CmsStringUtil; 43 import org.opencms.workplace.CmsWorkplaceManager; 44 45 import java.io.IOException ; 46 import java.util.Collections ; 47 import java.util.Iterator ; 48 import java.util.Locale ; 49 import java.util.Map ; 50 import java.util.TreeMap ; 51 52 import javax.servlet.ServletRequest ; 53 import javax.servlet.ServletResponse ; 54 import javax.servlet.http.HttpServletRequest ; 55 import javax.servlet.http.HttpServletResponse ; 56 57 import org.apache.commons.collections.ExtendedProperties; 58 59 71 public class CmsDumpLoader implements I_CmsResourceLoader { 72 73 74 public static final int RESOURCE_LOADER_ID = 1; 75 76 77 private static long m_clientCacheMaxAge; 78 79 80 private Map m_configuration; 81 82 85 public CmsDumpLoader() { 86 87 m_configuration = new TreeMap (); 88 } 89 90 93 public void addConfigurationParameter(String paramName, String paramValue) { 94 95 m_configuration.put(paramName, paramValue); 96 } 97 98 101 public void destroy() { 102 103 } 105 106 109 public byte[] dump( 110 CmsObject cms, 111 CmsResource resource, 112 String element, 113 Locale locale, 114 HttpServletRequest req, 115 HttpServletResponse res) throws CmsException { 116 117 return CmsFile.upgrade(resource, cms).getContents(); 118 } 119 120 123 public byte[] export(CmsObject cms, CmsResource resource, HttpServletRequest req, HttpServletResponse res) 124 throws IOException , CmsException { 125 126 CmsFile file = CmsFile.upgrade(resource, cms); 127 128 if ((req != null) && (res != null)) { 131 for (Iterator i = OpenCms.getStaticExportManager().getExportHeaders().listIterator(); i.hasNext();) { 133 String header = (String )i.next(); 134 135 String [] parts = CmsStringUtil.splitAsArray(header, ':'); 137 if (parts.length == 2) { 138 res.setHeader(parts[0], parts[1]); 139 } 140 } 141 load(cms, file, req, res); 142 } 143 144 return file.getContents(); 145 } 146 147 153 public Map getConfiguration() { 154 155 return Collections.unmodifiableMap(m_configuration); 157 } 158 159 162 public int getLoaderId() { 163 164 return RESOURCE_LOADER_ID; 165 } 166 167 174 public String getResourceLoaderInfo() { 175 176 return Messages.get().getBundle().key(Messages.GUI_LOADER_DUMB_DEFAULT_DESC_0); 177 } 178 179 182 public void initConfiguration() { 183 184 ExtendedProperties config = new ExtendedProperties(); 185 config.putAll(m_configuration); 186 187 String maxAge = config.getString("client.cache.maxage"); 188 if (maxAge == null) { 189 m_clientCacheMaxAge = -1; 190 } else { 191 m_clientCacheMaxAge = Long.parseLong(maxAge); 192 } 193 194 if (CmsLog.INIT.isInfoEnabled()) { 195 if (maxAge != null) { 196 CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_CLIENT_CACHE_MAX_AGE_1, maxAge)); 197 } 198 CmsLog.INIT.info(Messages.get().getBundle().key( 199 Messages.INIT_LOADER_INITIALIZED_1, 200 this.getClass().getName())); 201 } 202 } 203 204 207 public boolean isStaticExportEnabled() { 208 209 return true; 210 } 211 212 215 public boolean isStaticExportProcessable() { 216 217 return false; 218 } 219 220 223 public boolean isUsableForTemplates() { 224 225 return false; 226 } 227 228 231 public boolean isUsingUriWhenLoadingTemplate() { 232 233 return false; 234 } 235 236 239 public void load(CmsObject cms, CmsResource resource, HttpServletRequest req, HttpServletResponse res) 240 throws IOException , CmsException { 241 242 if (canSendLastModifiedHeader(resource, req, res)) { 243 return; 245 } 246 247 CmsFile file = CmsFile.upgrade(resource, cms); 249 250 res.setStatus(HttpServletResponse.SC_OK); 252 res.setContentLength(file.getContents().length); 254 255 if (CmsWorkplaceManager.isWorkplaceUser(req)) { 256 res.setDateHeader(CmsRequestUtil.HEADER_LAST_MODIFIED, System.currentTimeMillis()); 258 CmsRequestUtil.setNoCacheHeaders(res); 259 } else { 260 res.setDateHeader(CmsRequestUtil.HEADER_LAST_MODIFIED, file.getDateLastModified()); 262 263 if (!res.containsHeader(CmsRequestUtil.HEADER_CACHE_CONTROL)) { 265 long expireTime = resource.getDateExpired(); 266 if (expireTime == CmsResource.DATE_EXPIRED_DEFAULT) { 267 expireTime--; 268 } 270 CmsFlexController.setDateExpiresHeader(res, expireTime, m_clientCacheMaxAge); 272 } 273 } 274 275 service(cms, file, req, res); 276 } 277 278 281 public void service(CmsObject cms, CmsResource resource, ServletRequest req, ServletResponse res) 282 throws CmsException, IOException { 283 284 res.getOutputStream().write(CmsFile.upgrade(resource, cms).getContents()); 285 } 286 287 299 protected boolean canSendLastModifiedHeader(CmsResource resource, HttpServletRequest req, HttpServletResponse res) { 300 301 boolean isWorkplaceUser = CmsWorkplaceManager.isWorkplaceUser(req); 303 304 if (!isWorkplaceUser) { 305 long lastModifiedHeader = req.getDateHeader(CmsRequestUtil.HEADER_IF_MODIFIED_SINCE); 307 if (lastModifiedHeader > -1) { 308 if ((resource.getState() == CmsResource.STATE_UNCHANGED) 310 && (resource.getDateLastModified() == lastModifiedHeader)) { 311 long now = System.currentTimeMillis(); 312 if ((resource.getDateReleased() < now) && (resource.getDateExpired() > now)) { 313 CmsFlexController.setDateExpiresHeader(res, resource.getDateExpired(), m_clientCacheMaxAge); 314 res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); 315 return true; 316 } 317 } 318 } 319 } 320 return false; 321 } 322 }
| Popular Tags
|