// -*- mode: java; c-basic-offset: 2; -*- // Copyright 2009-2011 Google, All Rights reserved // Copyright 2011-2012 MIT, All rights reserved // Released under the Apache License, Version 2.0 // http://www.apache.org/licenses/LICENSE-2.0 package com.google.appinventor.server.util; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Utility class for dealing with "If-Modified-Since" and * "Last-Modified" headers for servlet requests and responses. * * @author sharon@google.com (Sharon Perl) */ public class ModifiedHeaders { // Object used to safely set cache headers in responses private static final CacheHeaders CACHE_HEADERS = new CacheHeadersImpl(); /** * Compares the "If-Modified-Since" header in this request (ir present) to * the last build date (if known) in order to determine whether the requested * data has been modified since the prior request. * * @param req the request * @return {@code true} iff we're sure that request is for a resource that * has not been modified since the prior request */ public static boolean notModified(HttpServletRequest req) { long ifModDate = req.getDateHeader("If-Modified-Since"); if (BuildData.getTimestamp() > 0 && ifModDate > 0) { if (ifModDate >= BuildData.getTimestamp()) { return true; } } return false; } /** * Sets headers such that, if the last build time is known, it is included in * the "Last-Modified" header and validation is required for reuse. If the * build time is not known, this makes the response uncacheable. * * @param resp the response */ public static void setHeaders(HttpServletResponse resp) { if (BuildData.getTimestamp() == 0) { CACHE_HEADERS.setNotCacheable(resp); } else { resp.setDateHeader("Last-Modified", BuildData.getTimestamp()); CACHE_HEADERS.setCacheablePrivate(resp); } } }