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]