geirm 01/10/21 20:45:15
Modified: src/java/org/apache/velocity/texen/ant TexenTask.java
src/java/org/apache/velocity/texen/util PropertiesUtil.java
Log:
These should be the patches from Stephane Bailliez <[EMAIL PROTECTED]>
that I am committing with the assumption that they will be reviewed by
"Texeneers". I say this as there seem to be some repitition of functionality -
maybe the template finding/loading stuff in Texen needs to be redone or something.
Either way, I don't really have much deep knowledge of Texen,
but this seems to pass the testbed ok.
So, those that know and love Texen, speak up.
Revision Changes Path
1.33 +22 -13
jakarta-velocity/src/java/org/apache/velocity/texen/ant/TexenTask.java
Index: TexenTask.java
===================================================================
RCS file:
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/texen/ant/TexenTask.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- TexenTask.java 2001/09/26 21:40:42 1.32
+++ TexenTask.java 2001/10/22 03:45:15 1.33
@@ -54,6 +54,7 @@
* <http://www.apache.org/>.
*/
+import java.util.StringTokenizer;
import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
@@ -81,7 +82,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
* @author <a href="[EMAIL PROTECTED]">Robert Burrell Donkin</a>
- * @version $Id: TexenTask.java,v 1.32 2001/09/26 21:40:42 jvanzyl Exp $
+ * @version $Id: TexenTask.java,v 1.33 2001/10/22 03:45:15 geirm Exp $
*/
public class TexenTask
extends Task
@@ -182,16 +183,22 @@
* loader.
*/
- public void setTemplatePath(File templatePath)
+ public void setTemplatePath(String templatePath) throws Exception
{
- try
- {
- this.templatePath = templatePath.getCanonicalPath();
- }
- catch (java.io.IOException ioe)
- {
- throw new BuildException(ioe);
- }
+ StringBuffer resolvedPath = new StringBuffer();
+ StringTokenizer st = new StringTokenizer(templatePath, ",");
+ while ( st.hasMoreTokens() )
+ {
+ // resolve relative path from basedir and leave
+ // absolute path untouched.
+ File fullPath = project.resolveFile(st.nextToken());
+ resolvedPath.append(fullPath.getCanonicalPath());
+ if ( st.hasMoreTokens() )
+ {
+ resolvedPath.append(",");
+ }
+ }
+ this.templatePath = resolvedPath.toString();
}
/**
@@ -380,12 +387,14 @@
// Setup the Velocity Runtime.
if (templatePath != null)
{
+ log("Using templatePath: " + templatePath, project.MSG_VERBOSE);
Velocity.setProperty(
Velocity.FILE_RESOURCE_LOADER_PATH, templatePath);
}
if (useClasspath)
{
+ log("Using classpath");
Velocity.addProperty(
Velocity.RESOURCE_LOADER, "classpath");
@@ -411,7 +420,7 @@
if (templatePath != null)
{
generator.setTemplatePath(templatePath);
- }
+ }
// Make sure the output directory exists, if it doesn't
// then create it.
@@ -419,10 +428,10 @@
if (! file.exists())
{
file.mkdirs();
- }
+ }
String path = outputDirectory + File.separator + outputFile;
- System.out.println(path);
+ log("Generating to file " + path, project.MSG_INFO);
FileWriter writer = new FileWriter(path);
// The generator and the output path should
1.9 +102 -45
jakarta-velocity/src/java/org/apache/velocity/texen/util/PropertiesUtil.java
Index: PropertiesUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-velocity/src/java/org/apache/velocity/texen/util/PropertiesUtil.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- PropertiesUtil.java 2001/08/30 14:14:15 1.8
+++ PropertiesUtil.java 2001/10/22 03:45:15 1.9
@@ -58,6 +58,7 @@
import java.io.InputStream;
import java.io.IOException;
import java.util.Properties;
+import java.util.StringTokenizer;
import org.apache.velocity.texen.Generator;
/**
@@ -65,30 +66,71 @@
* Usually this class is only used from a Velocity context.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Leon Messerschmidt</a>
- * @version $Id: PropertiesUtil.java,v 1.8 2001/08/30 14:14:15 jvanzyl Exp $
+ * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Bailliez</a>
+ * @version $Id: PropertiesUtil.java,v 1.9 2001/10/22 03:45:15 geirm Exp $
*/
public class PropertiesUtil
{
+ /**
+ * Load properties from either a file in the templatePath if there
+ * is one or the classPath.
+ *
+ * @param propertiesFile the properties file to load through
+ * either the templatePath or the classpath.
+ * @return a properties instance filled with the properties found
+ * in the file or an empty instance if no file was found.
+ */
public Properties load(String propertiesFile)
{
+ Properties properties = new Properties();
String templatePath = Generator.getInstance().getTemplatePath();
+ if (templatePath != null)
+ {
+ properties = loadFromTemplatePath(propertiesFile);
+ }
+ else
+ {
+ properties = loadFromClassPath(propertiesFile);
+ }
+
+ return properties;
+
+ }
+
+ /**
+ * Load a properties file from the templatePath defined in the
+ * generator. As the templatePath can contains multiple paths,
+ * it will cycle through them to find the file. The first file
+ * that can be successfully loaded is considered. (kind of
+ * like the java classpath), it is done to clone the Velocity
+ * process of loading templates.
+ *
+ * @param propertiesFile the properties file to load. It must be
+ * a relative pathname.
+ * @return a properties instance loaded with the properties from
+ * the file. If no file can be found it returns an empty instance.
+ */
+ protected Properties loadFromTemplatePath(String propertiesFile)
+ {
Properties properties = new Properties();
+ String templatePath = Generator.getInstance().getTemplatePath();
- if (templatePath != null)
+ // We might have something like the following:
+ //
+ // #set ($dbprops = $properties.load("$generator.templatePath/path/props")
+ //
+ // as we have in Torque but we want people to start using
+ //
+ // #set ($dbprops = $properties.load("path/props")
+ //
+ // so that everything works from the filesystem or from
+ // a JAR. So the actual Generator.getTemplatePath()
+ // is not deprecated but it's use in templates
+ // should be.
+ StringTokenizer st = new StringTokenizer(templatePath, ",");
+ while (st.hasMoreTokens())
{
- // We might have something like the following:
- //
- // #set ($dbprops =
$properties.load("$generator.templatePath/path/props")
- //
- // as we have in Torque but we want people to start using
- //
- // #set ($dbprops = $properties.load("path/props")
- //
- // so that everything works from the filesystem or from
- // a JAR. So the actual Generator.getTemplatePath()
- // is not deprecated but it's use in templates
- // should be.
-
+ String templateDir = st.nextToken();
try
{
// If the properties file is being pulled from the
@@ -102,47 +144,62 @@
// for the properties file to be found. We want (1)
// to work whether the generation is being run from
// the file system or from a JAR file.
- if (!propertiesFile.startsWith(templatePath))
+ String fullPath = propertiesFile;
+
+ // FIXME probably not that clever since there could be
+ // a mix of file separators and the test will fail :-(
+ if (!fullPath.startsWith(templateDir))
{
- propertiesFile = templatePath + "/" + propertiesFile;
+ fullPath = templateDir + "/" + propertiesFile;
}
-
- properties.load(new FileInputStream(propertiesFile));
+
+ properties.load(new FileInputStream(fullPath));
+ // first pick wins, we don't need to go further since
+ // we found a valid file.
+ break;
}
catch (Exception e)
{
// do nothing
}
- }
- else
+ }
+ return properties;
+ }
+
+ /**
+ * Load a properties file from the classpath
+ *
+ * @param propertiesFile the properties file to load.
+ * @return a properties instance loaded with the properties from
+ * the file. If no file can be found it returns an empty instance.
+ */
+ protected Properties loadFromClassPath(String propertiesFile)
+ {
+ Properties properties = new Properties();
+ ClassLoader classLoader = this.getClass().getClassLoader();
+
+ try
{
- ClassLoader classLoader = this.getClass().getClassLoader();
-
- try
+ // This is a hack for now to make sure that properties
+ // files referenced in the filesystem work in
+ // a JAR file. We have to deprecate the use
+ // of $generator.templatePath in templates first
+ // and this hack will allow those same templates
+ // that use $generator.templatePath to work in
+ // JAR files.
+ if (propertiesFile.startsWith("$generator"))
{
- // This is a hack for now to make sure that properties
- // files referenced in the filesystem work in
- // a JAR file. We have to deprecate the use
- // of $generator.templatePath in templates first
- // and this hack will allow those same templates
- // that use $generator.templatePath to work in
- // JAR files.
- if (propertiesFile.startsWith("$generator"))
- {
- propertiesFile = propertiesFile.substring(
- "$generator.templatePath/".length());
- }
-
- InputStream inputStream =
classLoader.getResourceAsStream(propertiesFile);
- properties.load(inputStream);
+ propertiesFile = propertiesFile.substring(
+ "$generator.templatePath/".length());
}
- catch (IOException ioe)
- {
- // do nothing
- }
+
+ InputStream inputStream =
classLoader.getResourceAsStream(propertiesFile);
+ properties.load(inputStream);
}
-
+ catch (IOException ioe)
+ {
+ // do nothing
+ }
return properties;
-
}
}