You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2003/09/02 09:43:01 UTC
cvs commit: incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/net/protocol/file FileURLConnection.java
jdillon 2003/09/02 00:43:01
Modified: modules/common/src/java/org/apache/geronimo/common/net/protocol/file
FileURLConnection.java
Log:
o Added conditional check for windows os and sync'ing the native
file descriptor before calls to getContentLength() and getLastModified()
ala maybeSync()
Revision Changes Path
1.2 +72 -4 incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/net/protocol/file/FileURLConnection.java
Index: FileURLConnection.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/net/protocol/file/FileURLConnection.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FileURLConnection.java 1 Sep 2003 15:18:25 -0000 1.1
+++ FileURLConnection.java 2 Sep 2003 07:43:01 -0000 1.2
@@ -65,6 +65,9 @@
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
+import java.io.FilePermission;
+import java.io.FileDescriptor;
+import java.io.SyncFailedException;
import java.net.URLConnection;
import java.net.URL;
@@ -77,10 +80,15 @@
import java.util.Collections;
import java.security.Permission;
-import java.io.FilePermission;
+
+//
+// HACK: The current SNAPSHOT of commons-lang is old, inlined required methods for now
+//
+// import org.apache.commons.lang.SystemUtils;
import org.apache.geronimo.common.NullArgumentException;
import org.apache.geronimo.common.Primitives;
+import org.apache.geronimo.common.ThrowableHandler;
import sun.net.www.ParseUtil;
@@ -95,6 +103,7 @@
extends URLConnection
{
protected File file;
+ protected FileDescriptor fd;
public FileURLConnection(final URL url, final File file)
throws MalformedURLException, IOException
@@ -139,7 +148,10 @@
connect();
}
- return new BufferedInputStream(new FileInputStream(file));
+ FileInputStream fis = new FileInputStream(file);
+ fd = fis.getFD();
+
+ return new BufferedInputStream(fis);
}
/**
@@ -155,7 +167,10 @@
connect();
}
- return new BufferedOutputStream(new FileOutputStream(file));
+ FileOutputStream fos = new FileOutputStream(file);
+ fd = fos.getFD();
+
+ return new BufferedOutputStream(fos);
}
/**
@@ -190,6 +205,57 @@
return new FilePermission(filename, perms);
}
+ //
+ // HACK: The current SNAPSHOT of commons-lang is old, inlined required methods for now
+ //
+
+ private static String getSystemProperty(String property) {
+ try {
+ return System.getProperty(property);
+ } catch (SecurityException ex) {
+ // we are not allowed to look at this property
+ System.err.println(
+ "Caught a SecurityException reading the system property '" + property
+ + "'; the SystemUtils property value will default to null."
+ );
+ return null;
+ }
+ }
+
+ private static final String OS_NAME = getSystemProperty("os.name");
+
+ private static boolean getOSMatches(String osNamePrefix) {
+ if (OS_NAME == null) {
+ return false;
+ }
+ return OS_NAME.startsWith(osNamePrefix);
+ }
+
+ private static final boolean IS_OS_WINDOWS = getOSMatches("Windows");
+
+ /**
+ * Conditionaly sync the underlying file descriptor if we are running
+ * on windows, so that the file details update.
+ */
+ private void maybeSync()
+ {
+ if (fd != null && fd.valid()) {
+ //
+ // HACK: The current SNAPSHOT of commons-lang is old,
+ // inlined required methods for now
+ //
+
+ if (IS_OS_WINDOWS) {
+ try {
+ fd.sync();
+ }
+ catch (SyncFailedException e) {
+ ThrowableHandler.addWarning(e);
+ }
+ }
+ }
+ }
+
/**
* Always return the last-modified from the file.
*
@@ -198,6 +264,7 @@
*/
public long getLastModified()
{
+ maybeSync();
return file.lastModified();
}
@@ -216,6 +283,7 @@
*/
public int getContentLength()
{
+ maybeSync();
return Primitives.toInt(file.length());
}