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;
  -        
       }
   }
  
  
  


Reply via email to