Author: wglass
Date: Wed Oct  5 22:14:48 2005
New Revision: 306528

URL: http://svn.apache.org/viewcvs?rev=306528&view=rev
Log:
treat the template name as an absolute path when the template path is empty.  
See VELOCITY-144 for a discussion about this patch.

Added:
    
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/AbsoluteFileResourceLoaderTestCase.java
    jakarta/velocity/core/trunk/test/absolute/
    jakarta/velocity/core/trunk/test/absolute/absolute.vm
    jakarta/velocity/core/trunk/test/absolute/compare/
    jakarta/velocity/core/trunk/test/absolute/compare/absolute.cmp
Modified:
    
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java

Modified: 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java
URL: 
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java?rev=306528&r1=306527&r2=306528&view=diff
==============================================================================
--- 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java
 (original)
+++ 
jakarta/velocity/core/trunk/src/java/org/apache/velocity/runtime/resource/loader/FileResourceLoader.java
 Wed Oct  5 22:14:48 2005
@@ -35,8 +35,11 @@
 import org.apache.commons.collections.ExtendedProperties;
 
 /**
- * A loader for templates stored on the file system.
+ * A loader for templates stored on the file system.  Treats the template
+ * as relative to the configured root path.  If the root path is empty
+ * treats the template name as an absolute path.
  *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Will Glass-Husain</a> 
  * @author <a href="mailto:[EMAIL PROTECTED]">Aki Nieminen</a> 
  * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
  * @version $Id$
@@ -161,7 +164,7 @@
     {
         try 
         {
-            File file = new File( path, template );   
+            File file = getFile(path,template);
         
             if ( file.canRead() )
             {
@@ -206,13 +209,13 @@
         for (int i = 0; currentFile == null && i < paths.size(); i++)
         {
             String testPath = (String) paths.get(i);
-            File testFile = new File(testPath, fileName);
+            File testFile = getFile(testPath, fileName);
             if (testFile.canRead())
             {
                 currentFile = testFile;
             }
         }
-        File file = new File(path, fileName);
+        File file = getFile(path, fileName);
         if (currentFile == null || !file.exists())
         {
             /*
@@ -244,7 +247,7 @@
     public long getLastModified(Resource resource)
     {
         String path = (String) templatePaths.get(resource.getName());
-        File file = new File(path, resource.getName());
+        File file = getFile(path, resource.getName());
 
         if (file.canRead())
         {
@@ -254,5 +257,26 @@
         {
             return 0;
         }            
+    }
+
+
+    /**
+     * Create a File based on either a relative path if given, or absolute 
path otherwise
+     */
+    private File getFile(String path, String template)
+    {
+
+        File file = null;
+
+        if("".equals(path))
+        {
+            file = new File( template );
+        }
+        else
+        {
+            file = new File ( path, template );
+        }
+
+        return file;
     }
 }

Added: 
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/AbsoluteFileResourceLoaderTestCase.java
URL: 
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/AbsoluteFileResourceLoaderTestCase.java?rev=306528&view=auto
==============================================================================
--- 
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/AbsoluteFileResourceLoaderTestCase.java
 (added)
+++ 
jakarta/velocity/core/trunk/src/test/org/apache/velocity/test/AbsoluteFileResourceLoaderTestCase.java
 Wed Oct  5 22:14:48 2005
@@ -0,0 +1,143 @@
+package org.apache.velocity.test;

+

+/*

+ * Copyright 2001-2005 The Apache Software Foundation.

+ *

+ * Licensed 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.

+ */

+

+import java.io.BufferedWriter;

+import java.io.FileOutputStream;

+import java.io.OutputStreamWriter;

+import java.io.Writer;

+

+import junit.framework.Test;

+

+import org.apache.velocity.Template;

+import org.apache.velocity.VelocityContext;

+import org.apache.velocity.app.Velocity;

+import org.apache.velocity.runtime.RuntimeSingleton;

+

+/**

+ * Test use of an absolute path with the FileResourceLoader

+ *

+ * @author <a href="mailto:[EMAIL PROTECTED]">Will Glass-Husain</a>

+ * @version $Id: MultipleFileResourcePathTest.java,v 1.8 2001/10/22 03:53:26 
jon Exp $

+ */

+public class AbsoluteFileResourceLoaderTestCase extends BaseTestCase

+{

+     /**

+     * VTL file extension.

+     */

+    private static final String TMPL_FILE_EXT = "vm";

+

+    /**

+     * Comparison file extension.

+     */

+    private static final String CMP_FILE_EXT = "cmp";

+

+    /**

+     * Comparison file extension.

+     */

+    private static final String RESULT_FILE_EXT = "res";

+

+    /**

+     * Path to template file.  This will get combined with the 

+     * application directory to form an absolute path

+     */

+    private final static String TEMPLATE_PATH = "test/absolute/absolute";

+

+    /**

+     * Results relative to the build directory.

+     */

+    private static final String RESULTS_DIR = "target/test/absolute/results";

+

+    /**

+     * Results relative to the build directory.

+     */

+    private static final String COMPARE_DIR = "test/absolute/compare";

+

+    /**

+     * Default constructor.

+     */

+    AbsoluteFileResourceLoaderTestCase()

+    {

+        super("AbsoluteFileResourceLoaderTest");

+

+        try

+        {

+            assureResultsDirectoryExists(RESULTS_DIR);

+

+

+            // signify we want to use an absolute path

+            Velocity.addProperty(

+                Velocity.FILE_RESOURCE_LOADER_PATH, "");

+

+            Velocity.init();

+        }

+        catch (Exception e)

+        {

+            System.err.println("Cannot setup AbsoluteFileResourceLoaderTest!");

+            e.printStackTrace();

+            System.exit(1);

+        }

+    }

+

+    public static Test suite ()

+    {

+        return new AbsoluteFileResourceLoaderTestCase();

+    }

+

+    /**

+     * Runs the test.

+     */

+    public void runTest ()

+    {

+        try

+        {

+

+            String curdir = System.getProperty("user.dir");

+            String f = getFileName(curdir, TEMPLATE_PATH, TMPL_FILE_EXT);

+

+            System.out.println("Retrieving template at absolute path: " + f);

+

+            Template template1 = RuntimeSingleton.getTemplate(f);

+

+            FileOutputStream fos1 =

+                new FileOutputStream (

+                    getFileName(RESULTS_DIR, "absolute", RESULT_FILE_EXT));

+

+            Writer writer1 = new BufferedWriter(new OutputStreamWriter(fos1));

+

+            /*

+             *  put the Vector into the context, and merge both

+             */

+

+            VelocityContext context = new VelocityContext();

+

+            template1.merge(context, writer1);

+            writer1.flush();

+            writer1.close();

+

+            if (!isMatch(RESULTS_DIR, COMPARE_DIR, "absolute",

+                    RESULT_FILE_EXT, CMP_FILE_EXT))

+            {

+                fail("Output incorrect.");

+            }

+        }

+        catch (Exception e)

+        {

+            fail(e.getMessage());

+        }

+    }

+}


Added: jakarta/velocity/core/trunk/test/absolute/absolute.vm
URL: 
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/test/absolute/absolute.vm?rev=306528&view=auto
==============================================================================
--- jakarta/velocity/core/trunk/test/absolute/absolute.vm (added)
+++ jakarta/velocity/core/trunk/test/absolute/absolute.vm Wed Oct  5 22:14:48 
2005
@@ -0,0 +1,12 @@
+#*

+

[EMAIL PROTECTED] absolute.vm

+

+This template is used for Velocity regression testing.

+If you alter this template make sure you change the

+corresponding comparison file so that the regression

+test doesn't fail incorrectly.

+

+*#

+

+I am absolute.vm


Added: jakarta/velocity/core/trunk/test/absolute/compare/absolute.cmp
URL: 
http://svn.apache.org/viewcvs/jakarta/velocity/core/trunk/test/absolute/compare/absolute.cmp?rev=306528&view=auto
==============================================================================
--- jakarta/velocity/core/trunk/test/absolute/compare/absolute.cmp (added)
+++ jakarta/velocity/core/trunk/test/absolute/compare/absolute.cmp Wed Oct  5 
22:14:48 2005
@@ -0,0 +1,3 @@
+

+

+I am absolute.vm




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to