You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2013/09/28 21:31:28 UTC

svn commit: r1527228 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration/io/FileHandler.java test/java/org/apache/commons/configuration/io/TestFileHandler.java

Author: oheger
Date: Sat Sep 28 19:31:27 2013
New Revision: 1527228

URL: http://svn.apache.org/r1527228
Log:
Added support for a location strategy to FileHandler.

FileHandler now provides methods for setting and querying the
FileLocationStrategy of the underlying FileLocator.

Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/io/FileHandler.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/io/TestFileHandler.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/io/FileHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/io/FileHandler.java?rev=1527228&r1=1527227&r2=1527228&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/io/FileHandler.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration/io/FileHandler.java Sat Sep 28 19:31:27 2013
@@ -557,6 +557,41 @@ public class FileHandler
     }
 
     /**
+     * Returns the {@code FileLocationStrategy} to be applied when accessing the
+     * associated file. This method never returns <b>null</b>. If a
+     * {@code FileLocationStrategy} has been set, it is returned. Otherwise,
+     * result is the default {@code FileLocationStrategy}.
+     *
+     * @return the {@code FileLocationStrategy} to be used
+     */
+    public FileLocationStrategy getLocationStrategy()
+    {
+        return FileLocatorUtils.obtainLocationStrategy(getFileLocator());
+    }
+
+    /**
+     * Sets the {@code FileLocationStrategy} to be applied when accessing the
+     * associated file. The strategy is stored in the underlying
+     * {@link FileLocator}. The argument can be <b>null</b>; this causes the
+     * default {@code FileLocationStrategy} to be used.
+     *
+     * @param strategy the {@code FileLocationStrategy}
+     * @see FileLocatorUtils#DEFAULT_LOCATION_STRATEGY
+     */
+    public void setLocationStrategy(final FileLocationStrategy strategy)
+    {
+        new Updater()
+        {
+            @Override
+            protected void updateBuilder(FileLocatorBuilder builder)
+            {
+                builder.locationStrategy(strategy);
+            }
+
+        }.update();
+    }
+
+    /**
      * Locates the referenced file if necessary and ensures that the associated
      * {@link FileLocator} is fully initialized. When accessing the referenced
      * file the information stored in the associated {@code FileLocator} is

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/io/TestFileHandler.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/io/TestFileHandler.java?rev=1527228&r1=1527227&r2=1527228&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/io/TestFileHandler.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration/io/TestFileHandler.java Sat Sep 28 19:31:27 2013
@@ -217,6 +217,37 @@ public class TestFileHandler
     }
 
     /**
+     * Tests whether a newly created instance uses the default location
+     * strategy.
+     */
+    @Test
+    public void testGetLocationStrategyDefault()
+    {
+        FileHandler handler = new FileHandler();
+        assertNull("Strategy in locator", handler.getFileLocator()
+                .getLocationStrategy());
+        assertSame("Wrong default strategy",
+                FileLocatorUtils.DEFAULT_LOCATION_STRATEGY,
+                handler.getLocationStrategy());
+    }
+
+    /**
+     * Tests whether the location strategy can be changed.
+     */
+    @Test
+    public void testSetLocationStrategy()
+    {
+        FileLocationStrategy strategy =
+                EasyMock.createMock(FileLocationStrategy.class);
+        EasyMock.replay(strategy);
+        FileHandler handler = new FileHandler();
+        handler.setLocationStrategy(strategy);
+        assertSame("Wrong strategy in locator", strategy, handler
+                .getFileLocator().getLocationStrategy());
+        assertSame("Wrong strategy", strategy, handler.getLocationStrategy());
+    }
+
+    /**
      * Tests whether a URL can be set.
      */
     @Test
@@ -1334,6 +1365,8 @@ public class TestFileHandler
     {
         final String encoding = "TestEncoding";
         final FileSystem fileSystem = new DefaultFileSystem();
+        final FileLocationStrategy locationStrategy =
+                new ProvidedURLLocationStrategy();
         final int loops = 8;
 
         for (int i = 0; i < loops; i++)
@@ -1363,7 +1396,15 @@ public class TestFileHandler
                     handler.setEncoding(encoding);
                 };
             };
-            List<Thread> threads = Arrays.asList(t1, t2, t3);
+            Thread t4 = new Thread()
+            {
+                @Override
+                public void run()
+                {
+                    handler.setLocationStrategy(locationStrategy);
+                }
+            };
+            List<Thread> threads = Arrays.asList(t1, t2, t3, t4);
             for (Thread t : threads)
             {
                 t.start();
@@ -1378,6 +1419,8 @@ public class TestFileHandler
             assertNull("Got a URL", locator.getSourceURL());
             assertEquals("Wrong encoding", encoding, locator.getEncoding());
             assertSame("Wrong file system", fileSystem, locator.getFileSystem());
+            assertSame("Wrong location strategy", locationStrategy,
+                    locator.getLocationStrategy());
         }
     }