You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2008/08/08 12:44:55 UTC

svn commit: r683935 - in /myfaces/trinidad/branches/1.2.9.1-branch: trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/URLUtils.java trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/URLUtils.java

Author: matzew
Date: Fri Aug  8 03:44:55 2008
New Revision: 683935

URL: http://svn.apache.org/viewvc?rev=683935&view=rev
Log:
move URLUtils to API...

Added:
    myfaces/trinidad/branches/1.2.9.1-branch/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/URLUtils.java
Modified:
    myfaces/trinidad/branches/1.2.9.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/URLUtils.java

Added: myfaces/trinidad/branches/1.2.9.1-branch/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/URLUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.9.1-branch/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/URLUtils.java?rev=683935&view=auto
==============================================================================
--- myfaces/trinidad/branches/1.2.9.1-branch/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/URLUtils.java (added)
+++ myfaces/trinidad/branches/1.2.9.1-branch/trinidad-api/src/main/java/org/apache/myfaces/trinidad/util/URLUtils.java Fri Aug  8 03:44:55 2008
@@ -0,0 +1,91 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.myfaces.trinidad.util;
+
+import java.io.File;
+import java.io.IOException;
+
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+
+public final class URLUtils
+{
+  private URLUtils()
+  {
+  }
+
+  public static long getLastModified(URL url) throws IOException
+  {
+    if ("file".equals(url.getProtocol()))
+    {
+      String externalForm = url.toExternalForm();
+      // Remove the "file:"
+      File file = new File(externalForm.substring(5));
+
+      return file.lastModified();
+    }
+    else
+    {
+      return getLastModified(url.openConnection());
+    }
+  }
+
+  public static long getLastModified(URLConnection connection) throws IOException
+  {
+    long modified;
+    if (connection instanceof JarURLConnection)
+    {
+      // The following hack is required to work-around a JDK bug.
+      // getLastModified() on a JAR entry URL delegates to the actual JAR file
+      // rather than the JAR entry.
+      // This opens internally, and does not close, an input stream to the JAR
+      // file.
+      // In turn, you cannot close it by yourself, because it's internal.
+      // The work-around is to get the modification date of the JAR file
+      // manually,
+      // and then close that connection again.
+
+      URL jarFileUrl = ((JarURLConnection) connection).getJarFileURL();
+      URLConnection jarFileConnection = jarFileUrl.openConnection();
+
+      try
+      {
+        modified = jarFileConnection.getLastModified();
+      }
+      finally
+      {
+        try
+        {
+          jarFileConnection.getInputStream().close();
+        }
+        catch (Exception exception)
+        {
+          // Ignored
+        }
+      }
+    }
+    else
+    {
+      modified = connection.getLastModified();
+    }
+
+    return modified;
+  }
+}
\ No newline at end of file

Modified: myfaces/trinidad/branches/1.2.9.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/URLUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.9.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/URLUtils.java?rev=683935&r1=683934&r2=683935&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.9.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/URLUtils.java (original)
+++ myfaces/trinidad/branches/1.2.9.1-branch/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/URLUtils.java Fri Aug  8 03:44:55 2008
@@ -18,22 +18,21 @@
  */
 package org.apache.myfaces.trinidadinternal.util;
 
-import java.io.InputStream;
-import java.io.IOException;
 import java.io.File;
+import java.io.IOException;
 
-import java.net.UnknownServiceException;
+import java.net.JarURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 
-public class URLUtils
+@Deprecated
+public final class URLUtils
 {
   private URLUtils()
   {
   }
 
-
-  static public long getLastModified(URL url) throws IOException
+  public static long getLastModified(URL url) throws IOException
   {
     if ("file".equals(url.getProtocol()))
     {
@@ -45,25 +44,49 @@
     }
     else
     {
-      URLConnection connection = url.openConnection();
-      long modified = connection.getLastModified();
+      return getLastModified(url.openConnection());
+    }
+  }
+
+  public static long getLastModified(URLConnection connection) throws IOException
+  {
+    long modified;
+    if (connection instanceof JarURLConnection)
+    {
+      // The following hack is required to work-around a JDK bug.
+      // getLastModified() on a JAR entry URL delegates to the actual JAR file
+      // rather than the JAR entry.
+      // This opens internally, and does not close, an input stream to the JAR
+      // file.
+      // In turn, you cannot close it by yourself, because it's internal.
+      // The work-around is to get the modification date of the JAR file
+      // manually,
+      // and then close that connection again.
+
+      URL jarFileUrl = ((JarURLConnection) connection).getJarFileURL();
+      URLConnection jarFileConnection = jarFileUrl.openConnection();
+
       try
       {
-        InputStream is = connection.getInputStream();
-        if (is != null)
-          is.close();
-      }
-      // If the connection doesn't support getInputStream(),
-      // or there's an IOException (Tomcat throws an exception
-      // on directory views, for example), that's OK.
-      catch (UnknownServiceException use)
-      {
+        modified = jarFileConnection.getLastModified();
       }
-      catch (IOException ioe)
+      finally
       {
+        try
+        {
+          jarFileConnection.getInputStream().close();
+        }
+        catch (Exception exception)
+        {
+          // Ignored
+        }
       }
-
-      return modified;
     }
+    else
+    {
+      modified = connection.getLastModified();
+    }
+
+    return modified;
   }
-}
+}
\ No newline at end of file