summaryrefslogtreecommitdiff
path: root/java/common/src
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2011-07-21 13:18:51 +0000
committerRobert Gemmell <robbie@apache.org>2011-07-21 13:18:51 +0000
commit92d46872c0e9fe5f0671b8fd90ca421526dfe19f (patch)
treecf694cb03b47dfcf5ef7723ecf54b3302a9b8630 /java/common/src
parentfd61b43ca3b5d9c13d763cc5bb1e01b654a76c6c (diff)
downloadqpid-python-92d46872c0e9fe5f0671b8fd90ca421526dfe19f.tar.gz
QPID-3367: FileUtils improvements. #openFileOrDefaultResource now tries the override filename in the classpath too, before falling back to the default.
Applied patch from Keith Wall <keith.wall@gmail.com> git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1149165 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common/src')
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/FileUtils.java23
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java82
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/default.properties2
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/mydefaults.properties2
4 files changed, 98 insertions, 11 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/util/FileUtils.java b/java/common/src/main/java/org/apache/qpid/util/FileUtils.java
index 1a57af9bf7..ac8e3da3c2 100644
--- a/java/common/src/main/java/org/apache/qpid/util/FileUtils.java
+++ b/java/common/src/main/java/org/apache/qpid/util/FileUtils.java
@@ -143,8 +143,9 @@ public class FileUtils
}
/**
- * Either opens the specified filename as an input stream, or uses the default resource loaded using the
- * specified class loader, if opening the file fails or no file name is specified.
+ * Either opens the specified filename as an input stream or either the filesystem or classpath,
+ * or uses the default resource loaded using the specified class loader, if opening the file fails
+ * or no file name is specified.
*
* @param filename The name of the file to open.
* @param defaultResource The name of the default resource on the classpath if the file cannot be opened.
@@ -156,28 +157,28 @@ public class FileUtils
{
InputStream is = null;
- // Flag to indicate whether the default resource should be used. By default this is true, so that the default
- // is used when opening the file fails.
- boolean useDefault = true;
-
// Try to open the file if one was specified.
if (filename != null)
{
+ // try on filesystem
try
{
is = new BufferedInputStream(new FileInputStream(new File(filename)));
-
- // Clear the default flag because the file was succesfully opened.
- useDefault = false;
}
catch (FileNotFoundException e)
{
- // Ignore this exception, the default will be used instead.
+ is = null;
+ }
+
+ if (is == null)
+ {
+ // failed on filesystem, so try on classpath
+ is = cl.getResourceAsStream(filename);
}
}
// Load the default resource if a file was not specified, or if opening the file failed.
- if (useDefault)
+ if (is == null)
{
is = cl.getResourceAsStream(defaultResource);
}
diff --git a/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java b/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java
index 7eba5f092e..d6767eb9c0 100644
--- a/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java
+++ b/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java
@@ -27,7 +27,9 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
+import java.util.Properties;
public class FileUtilsTest extends TestCase
{
@@ -182,6 +184,20 @@ public class FileUtilsTest extends TestCase
}
}
+
+ /**
+ * Helper method to create a temporary file with test content.
+ *
+ * @param test_data The data to store in the file
+ *
+ * @return The File reference
+ */
+ private File createTestFileInTmpDir(final String testData) throws Exception
+ {
+ final File tmpFile = File.createTempFile("test", "tmp");
+
+ return createTestFile(tmpFile.getCanonicalPath(), testData);
+ }
/**
* Helper method to create a test file with a string content
*
@@ -302,8 +318,74 @@ public class FileUtilsTest extends TestCase
// expected path
}
}
+
+ /**
+ * Tests that openFileOrDefaultResource can open a file on the filesystem.
+ *
+ */
+ public void testOpenFileOrDefaultResourceOpensFileOnFileSystem() throws Exception
+ {
+ final File testFile = createTestFileInTmpDir("src=tmpfile");
+ final String filenameOnFilesystem = testFile.getCanonicalPath();
+ final String defaultResource = "org/apache/qpid/util/default.properties";
+
+
+ final InputStream is = FileUtils.openFileOrDefaultResource(filenameOnFilesystem, defaultResource, this.getClass().getClassLoader());
+ assertNotNull("Stream must not be null", is);
+ final Properties p = new Properties();
+ p.load(is);
+ assertEquals("tmpfile", p.getProperty("src"));
+ }
/**
+ * Tests that openFileOrDefaultResource can open a file on the classpath.
+ *
+ */
+ public void testOpenFileOrDefaultResourceOpensFileOnClasspath() throws Exception
+ {
+ final String mydefaultsResource = "org/apache/qpid/util/mydefaults.properties";
+ final String defaultResource = "org/apache/qpid/util/default.properties";
+
+
+ final InputStream is = FileUtils.openFileOrDefaultResource(mydefaultsResource, defaultResource, this.getClass().getClassLoader());
+ assertNotNull("Stream must not be null", is);
+ final Properties p = new Properties();
+ p.load(is);
+ assertEquals("mydefaults", p.getProperty("src"));
+ }
+
+ /**
+ * Tests that openFileOrDefaultResource returns the default resource when file cannot be found.
+ */
+ public void testOpenFileOrDefaultResourceOpensDefaultResource() throws Exception
+ {
+ final File fileThatDoesNotExist = new File("/does/not/exist.properties");
+ assertFalse("Test must not exist", fileThatDoesNotExist.exists());
+
+ final String defaultResource = "org/apache/qpid/util/default.properties";
+
+ final InputStream is = FileUtils.openFileOrDefaultResource(fileThatDoesNotExist.getCanonicalPath(), defaultResource, this.getClass().getClassLoader());
+ assertNotNull("Stream must not be null", is);
+ Properties p = new Properties();
+ p.load(is);
+ assertEquals("default.properties", p.getProperty("src"));
+ }
+
+ /**
+ * Tests that openFileOrDefaultResource returns null if neither the file nor
+ * the default resource can be found..
+ */
+ public void testOpenFileOrDefaultResourceReturnsNullWhenNeitherCanBeFound() throws Exception
+ {
+
+ final String mydefaultsResource = "org/apache/qpid/util/doesnotexisteiether.properties";
+ final String defaultResource = "org/apache/qpid/util/doesnotexisteiether.properties";
+
+ final InputStream is = FileUtils.openFileOrDefaultResource(mydefaultsResource, defaultResource, this.getClass().getClassLoader());
+ assertNull("Stream must be null", is);
+ }
+
+ /**
* Given two lists of File arrays ensure they are the same length and all entries in Before are in After
*
* @param filesBefore File[]
diff --git a/java/common/src/test/java/org/apache/qpid/util/default.properties b/java/common/src/test/java/org/apache/qpid/util/default.properties
new file mode 100644
index 0000000000..cb522ea9a7
--- /dev/null
+++ b/java/common/src/test/java/org/apache/qpid/util/default.properties
@@ -0,0 +1,2 @@
+# Used by FileUtilsTests
+src=default.properties \ No newline at end of file
diff --git a/java/common/src/test/java/org/apache/qpid/util/mydefaults.properties b/java/common/src/test/java/org/apache/qpid/util/mydefaults.properties
new file mode 100644
index 0000000000..6a49d927d0
--- /dev/null
+++ b/java/common/src/test/java/org/apache/qpid/util/mydefaults.properties
@@ -0,0 +1,2 @@
+# Used by FileUtilsTests
+src=mydefaults \ No newline at end of file