Author: markt
Date: Wed Sep 12 20:51:55 2012
New Revision: 1384119

URL: http://svn.apache.org/viewvc?rev=1384119&view=rev
Log:
Implement some TODOs:
 - getEtag()
 - getLastModifiedHttp()

Modified:
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/util/ConcurrentDateFormat.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/JarResource.java
    
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/ResourceBase.java

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/util/ConcurrentDateFormat.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/util/ConcurrentDateFormat.java?rev=1384119&r1=1384118&r2=1384119&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/util/ConcurrentDateFormat.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/util/ConcurrentDateFormat.java
 Wed Sep 12 20:51:55 2012
@@ -35,6 +35,19 @@ public class ConcurrentDateFormat {
     private final TimeZone timezone;
     private final Queue<SimpleDateFormat> queue = new 
ConcurrentLinkedQueue<>();
 
+    public static final String RFC1123_DATE = "EEE, dd MMM yyyy HH:mm:ss zzz";
+    public static final TimeZone GMT = TimeZone.getTimeZone("GMT");
+
+    private static final ConcurrentDateFormat FORMAT_RFC1123;
+
+    static {
+        FORMAT_RFC1123 = new ConcurrentDateFormat(RFC1123_DATE, Locale.US, 
GMT);
+    }
+
+    public static String formatRfc1123(Date date) {
+        return FORMAT_RFC1123.format(date);
+    }
+
     public ConcurrentDateFormat(String format, Locale locale,
             TimeZone timezone) {
         this.format = format;

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java?rev=1384119&r1=1384118&r2=1384119&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
 Wed Sep 12 20:51:55 2012
@@ -48,12 +48,6 @@ public class FileResource extends Resour
     }
 
     @Override
-    public String getLastModifiedHttp() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     public boolean exists() {
         return resource.exists();
     }
@@ -102,12 +96,6 @@ public class FileResource extends Resour
     }
 
     @Override
-    public String getETag() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     public InputStream getInputStream() {
         if (resource.exists()) {
             try {

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/JarResource.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/JarResource.java?rev=1384119&r1=1384118&r2=1384119&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/JarResource.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/JarResource.java
 Wed Sep 12 20:51:55 2012
@@ -49,12 +49,6 @@ public class JarResource extends Resourc
     }
 
     @Override
-    public String getLastModifiedHttp() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     public boolean exists() {
         return true;
     }
@@ -101,13 +95,6 @@ public class JarResource extends Resourc
     }
 
     @Override
-    public String getETag() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-
-    @Override
     public InputStream getInputStream() {
         try {
             return base.getInputStream(resource);

Modified: 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/ResourceBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/ResourceBase.java?rev=1384119&r1=1384118&r2=1384119&view=diff
==============================================================================
--- 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/ResourceBase.java
 (original)
+++ 
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/ResourceBase.java
 Wed Sep 12 20:51:55 2012
@@ -18,9 +18,11 @@ package org.apache.catalina.webresources
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Date;
 
 import org.apache.catalina.WebResource;
 import org.apache.catalina.WebResourceRoot;
+import org.apache.catalina.util.ConcurrentDateFormat;
 import org.apache.juli.logging.Log;
 import org.apache.tomcat.util.res.StringManager;
 
@@ -33,6 +35,7 @@ public abstract class ResourceBase imple
     private final String webAppPath;
 
     private String mimeType = null;
+    private volatile String weakETag;
 
 
     protected ResourceBase(WebResourceRoot root, String webAppPath) {
@@ -54,7 +57,32 @@ public abstract class ResourceBase imple
 
 
     @Override
+    public final String getLastModifiedHttp() {
+        return ConcurrentDateFormat.formatRfc1123(new Date(getLastModified()));
+    }
+
+    @Override
+    public final String getETag() {
+        if (weakETag == null) {
+            synchronized (this) {
+                if (weakETag == null) {
+                    long contentLength = getContentLength();
+                    long lastModified = getLastModified();
+                    if ((contentLength >= 0) || (lastModified >= 0)) {
+                        weakETag = "W/\"" + contentLength + "-" +
+                                   lastModified + "\"";
+                    }
+                }
+            }
+        }
+        return weakETag;
+    }
+
+    @Override
     public final void setMimeType(String mimeType) {
+        // TODO This is only called from the DefaultServlet. If resources are
+        //      not cached, there is no point in recording the mime type in the
+        //      WebResource
         this.mimeType = mimeType;
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to