You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by wg...@apache.org on 2005/10/06 07:14:52 UTC

svn commit: r306528 - in /jakarta/velocity/core/trunk: src/java/org/apache/velocity/runtime/resource/loader/ src/test/org/apache/velocity/test/ test/absolute/ test/absolute/compare/

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:wglass@forio.com">Will Glass-Husain</a> 
  * @author <a href="mailto:mailmur@yahoo.com">Aki Nieminen</a> 
  * @author <a href="mailto:jvanzyl@apache.org">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:wglass@apache.org">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 @@
+#*
+
+@test 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: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org