Hi,

This imports a small change from libgcj. It brings us a little closer to
merging these classes. But not that much because we actually need a
slightly different implementation that initializes the DateFormat lazily
because of bootstrap concerns (DateFormat uses regex, regex uses
ResourceBundles, ResourceBundles uses jar connections, ...).

2004-11-17  Bryce McKinlay  <[EMAIL PROTECTED]>

       * gnu/java/net/protocol/jar/Connection.java (getHeaderField):
       Implemented.
       (getLastModified): Implemented.

Committed,

Mark
Index: gnu/java/net/protocol/jar/Connection.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/net/protocol/jar/Connection.java,v
retrieving revision 1.11
diff -u -r1.11 Connection.java
--- gnu/java/net/protocol/jar/Connection.java	17 Nov 2005 10:58:47 -0000	1.11
+++ gnu/java/net/protocol/jar/Connection.java	17 Nov 2005 17:55:43 -0000
@@ -47,7 +47,10 @@
 import java.net.ProtocolException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Hashtable;
+import java.util.Locale;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.zip.ZipFile;
@@ -60,6 +63,12 @@
  */
 public final class Connection extends JarURLConnection
 {
+  /**
+   * HTTP-style DateFormat, used to format the last-modified header.
+   * Lazy initialized since jar files are used during bootstrapping.
+   */
+  private static SimpleDateFormat dateFormat;
+
   private JarFile jar_file;
   private JarEntry jar_entry;
   private URL jar_url;
@@ -167,11 +176,58 @@
     return jar_file;
   }
 
+  public String getHeaderField(String field)
+  {
+    try
+      {
+	if (!connected)
+	  connect();
+
+	if (field.equals("content-type"))
+          return guessContentTypeFromName(getJarEntry().getName());
+	else if (field.equals("content-length"))
+          return Long.toString(getJarEntry().getSize());
+	else if (field.equals("last-modified"))
+	  {
+	    // Both creating and manipulating dateFormat need synchronization.
+	    synchronized (this.getClass())
+	      {
+		if (dateFormat == null)
+		  dateFormat = new SimpleDateFormat
+		    ("EEE, dd MMM yyyy hh:mm:ss 'GMT'",
+		     new Locale ("En", "Us", "Unix"));
+
+        	return dateFormat.format(new Date(getJarEntry().getTime()));
+	      }
+	  }
+      }
+    catch (IOException e)
+      {
+        // Fall through.
+      }
+    return null;
+  }
+
   public int getContentLength()
   {
     if (!connected)
       return -1;
 
     return (int) jar_entry.getSize();
+  }
+
+  public long getLastModified()
+  {
+    if (!connected)
+      return -1;
+
+    try
+      {
+	return getJarEntry().getTime();
+      }
+    catch (IOException e)
+      {
+	return -1;
+      }
   }
 }

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Classpath-patches mailing list
Classpath-patches@gnu.org
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to