velocity-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wgl...@apache.org
Subject svn commit: r525422 [2/3] - in /velocity/texen/trunk: ./ build/ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/texen/ src/java/org/apache/texen/ant/ src/java/org/apache/texen/defaults/ src/java/org/apache/texen/util/ src/test/ sr...
Date Wed, 04 Apr 2007 05:54:21 GMT
Added: velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java (added)
+++ velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,650 @@
+package org.apache.texen.ant;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import org.apache.commons.collections.ExtendedProperties;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.exception.MethodInvocationException;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.texen.Generator;
+import org.apache.velocity.util.StringUtils;
+
+/**
+ * An ant task for generating output by using Velocity
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @author <a href="robertdonkin@mac.com">Robert Burrell Donkin</a>
+ * @version $Id$
+ */
+public class TexenTask
+    extends Task
+{
+    /**
+     * This message fragment (telling users to consult the log or
+     * invoke ant with the -debug flag) is appended to rethrown
+     * exception messages.
+     */
+    private final static String ERR_MSG_FRAGMENT =
+        ". For more information consult the velocity log, or invoke ant " +
+        "with the -debug flag.";
+
+    /**
+     * This is the control template that governs the output.
+     * It may or may not invoke the services of worker
+     * templates.
+     */
+    protected String controlTemplate;
+
+    /**
+     * This is where Velocity will look for templates
+     * using the file template loader.
+     */
+    protected String templatePath;
+
+    /**
+     * This is where texen will place all the output
+     * that is a product of the generation process.
+     */
+    protected String outputDirectory;
+
+    /**
+     * This is the file where the generated text
+     * will be placed.
+     */
+    protected String outputFile;
+
+    /**
+     * This is the encoding for the output file(s).
+     */
+    protected String outputEncoding;
+
+    /**
+     * This is the encoding for the input file(s)
+     * (templates).
+     */
+    protected String inputEncoding;
+
+    /**
+     * <p>
+     * These are properties that are fed into the
+     * initial context from a properties file. This
+     * is simply a convenient way to set some values
+     * that you wish to make available in the context.
+     * </p>
+     * <p>
+     * These values are not critical, like the template path
+     * or output path, but allow a convenient way to
+     * set a value that may be specific to a particular
+     * generation task.
+     * </p>
+     * <p>
+     * For example, if you are generating scripts to allow
+     * user to automatically create a database, then
+     * you might want the <code>$databaseName</code>
+     * to be placed
+     * in the initial context so that it is available
+     * in a script that might look something like the
+     * following:
+     * <code><pre>
+     * #!bin/sh
+     *
+     * echo y | mysqladmin create $databaseName
+     * </pre></code>
+     * The value of <code>$databaseName</code> isn't critical to
+     * output, and you obviously don't want to change
+     * the ant task to simply take a database name.
+     * So initial context values can be set with
+     * properties file.
+     */
+    protected ExtendedProperties contextProperties;
+
+    /**
+     * Property which controls whether the classpath
+     * will be used when trying to locate templates.
+     */
+    protected boolean useClasspath;
+
+    /**
+     * The LogFile (incl. path) to log to.
+     */
+    protected String logFile;
+
+    /**
+     *   Property which controls whether the resource
+     *   loader will be told to cache.  Default false
+     */
+
+    protected String useResourceLoaderCache = "false";
+    /**
+     *
+     */
+    protected String resourceLoaderModificationCheckInterval = "2";
+
+    /**
+     * [REQUIRED] Set the control template for the
+     * generating process.
+     * @param controlTemplate
+     */
+    public void setControlTemplate (String controlTemplate)
+    {
+        this.controlTemplate = controlTemplate;
+    }
+
+    /**
+     * Get the control template for the
+     * generating process.
+     * @return The current control template.
+     */
+    public String getControlTemplate()
+    {
+        return controlTemplate;
+    }
+
+    /**
+     * [REQUIRED] Set the path where Velocity will look
+     * for templates using the file template
+     * loader.
+     * @param templatePath
+     * @throws Exception
+     */
+
+    public void setTemplatePath(String templatePath) throws Exception
+    {
+        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();
+
+        System.out.println(templatePath);
+     }
+
+    /**
+     * Get the path where Velocity will look
+     * for templates using the file template
+     * loader.
+     * @return The template path.
+     */
+    public String getTemplatePath()
+    {
+        return templatePath;
+    }
+
+    /**
+     * [REQUIRED] Set the output directory. It will be
+     * created if it doesn't exist.
+     * @param outputDirectory
+     */
+    public void setOutputDirectory(File outputDirectory)
+    {
+        try
+        {
+            this.outputDirectory = outputDirectory.getCanonicalPath();
+        }
+        catch (java.io.IOException ioe)
+        {
+            throw new BuildException(ioe);
+        }
+    }
+
+    /**
+     * Get the output directory.
+     * @return The output directory.
+     */
+    public String getOutputDirectory()
+    {
+        return outputDirectory;
+    }
+
+    /**
+     * [REQUIRED] Set the output file for the
+     * generation process.
+     * @param outputFile
+     */
+    public void setOutputFile(String outputFile)
+    {
+        this.outputFile = outputFile;
+    }
+
+    /**
+     * Set the output encoding.
+     * @param outputEncoding
+     */
+    public void setOutputEncoding(String outputEncoding)
+    {
+        this.outputEncoding = outputEncoding;
+    }
+
+    /**
+     * Set the input (template) encoding.
+     * @param inputEncoding
+     */
+    public void setInputEncoding(String inputEncoding)
+    {
+        this.inputEncoding = inputEncoding;
+    }
+
+    /**
+     * Get the output file for the
+     * generation process.
+     * @return The output file.
+     */
+    public String getOutputFile()
+    {
+        return outputFile;
+    }
+
+    /**
+     * Sets the log file.
+     * @param log
+     */
+    public void setLogFile(String log)
+    {
+        this.logFile = log;
+    }
+
+    /**
+     * Gets the log file.
+     * @return The log file.
+     */
+    public String getLogFile()
+    {
+        return this.logFile;
+    }
+
+    /**
+     * Set the context properties that will be
+     * fed into the initial context be the
+     * generating process starts.
+     * @param file
+     */
+    public void setContextProperties( String file )
+    {
+        String[] sources = StringUtils.split(file,",");
+        contextProperties = new ExtendedProperties();
+
+        // Always try to get the context properties resource
+        // from a file first. Templates may be taken from a JAR
+        // file but the context properties resource may be a
+        // resource in the filesystem. If this fails than attempt
+        // to get the context properties resource from the
+        // classpath.
+        for (int i = 0; i < sources.length; i++)
+        {
+            ExtendedProperties source = new ExtendedProperties();
+
+            try
+            {
+                // resolve relative path from basedir and leave
+                // absolute path untouched.
+                File fullPath = project.resolveFile(sources[i]);
+                log("Using contextProperties file: " + fullPath);
+                source.load(new FileInputStream(fullPath));
+            }
+            catch (IOException e)
+            {
+                ClassLoader classLoader = this.getClass().getClassLoader();
+
+                try
+                {
+                    InputStream inputStream = classLoader.getResourceAsStream(sources[i]);
+
+                    if (inputStream == null)
+                    {
+                        throw new BuildException("Context properties file " + sources[i] +
+                            " could not be found in the file system or on the classpath!");
+                    }
+                    else
+                    {
+                        source.load(inputStream);
+                    }
+                }
+                catch (IOException ioe)
+                {
+                    source = null;
+                }
+            }
+
+            if (source != null)
+            {
+                for (Iterator j = source.getKeys(); j.hasNext(); )
+                {
+                    String name = (String) j.next();
+                    String value = StringUtils.nullTrim(source.getString(name));
+                    contextProperties.setProperty(name,value);
+                }
+            }
+        }
+    }
+
+    /**
+     * Get the context properties that will be
+     * fed into the initial context be the
+     * generating process starts.
+     * @return The current context properties.
+     */
+    public ExtendedProperties getContextProperties()
+    {
+        return contextProperties;
+    }
+
+    /**
+     * Set the use of the classpath in locating templates
+     *
+     * @param useClasspath true means the classpath will be used.
+     */
+    public void setUseClasspath(boolean useClasspath)
+    {
+        this.useClasspath = useClasspath;
+    }
+
+    /**
+     * @param useResourceLoaderCache
+     */
+    public void setUseResourceLoaderCache(String useResourceLoaderCache)
+    {
+        this.useResourceLoaderCache = useResourceLoaderCache;
+    }
+
+    /**
+     * @param resourceLoaderModificationCheckInterval
+     */
+    public void setResourceLoaderModificationCheckInterval(String resourceLoaderModificationCheckInterval)
+    {
+        this.resourceLoaderModificationCheckInterval = resourceLoaderModificationCheckInterval;
+    }
+    /**
+     * Creates a VelocityContext.
+     *
+     * @return new Context
+     * @throws Exception the execute method will catch
+     *         and rethrow as a <code>BuildException</code>
+     */
+    public Context initControlContext()
+        throws Exception
+    {
+        return new VelocityContext();
+    }
+
+    /**
+     * Execute the input script with Velocity
+     *
+     * @throws BuildException
+     * BuildExceptions are thrown when required attributes are missing.
+     * Exceptions thrown by Velocity are rethrown as BuildExceptions.
+     */
+    public void execute ()
+        throws BuildException
+    {
+        // Make sure the template path is set.
+        if (templatePath == null && useClasspath == false)
+        {
+            throw new BuildException(
+                "The template path needs to be defined if you are not using " +
+                "the classpath for locating templates!");
+        }
+
+        // Make sure the control template is set.
+        if (controlTemplate == null)
+        {
+            throw new BuildException("The control template needs to be defined!");
+        }
+
+        // Make sure the output directory is set.
+        if (outputDirectory == null)
+        {
+            throw new BuildException("The output directory needs to be defined!");
+        }
+
+        // Make sure there is an output file.
+        if (outputFile == null)
+        {
+            throw new BuildException("The output file needs to be defined!");
+        }
+
+        VelocityEngine ve = new VelocityEngine();
+
+        try
+        {
+            // Setup the Velocity Runtime.
+            if (templatePath != null)
+            {
+                log("Using templatePath: " + templatePath, Project.MSG_VERBOSE);
+                ve.setProperty(
+                    RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatePath);
+            }
+
+            if (useClasspath)
+            {
+                log("Using classpath");
+                ve.addProperty(
+                    VelocityEngine.RESOURCE_LOADER, "classpath");
+
+                ve.setProperty(
+                    "classpath." + VelocityEngine.RESOURCE_LOADER + ".class",
+                        "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
+
+                ve.setProperty(
+                    "classpath." + VelocityEngine.RESOURCE_LOADER +
+                        ".cache", useResourceLoaderCache);
+
+                ve.setProperty(
+                    "classpath." + VelocityEngine.RESOURCE_LOADER +
+                        ".modificationCheckInterval", resourceLoaderModificationCheckInterval);
+            }
+
+            if (this.logFile != null)
+            {
+                ve.setProperty(RuntimeConstants.RUNTIME_LOG, this.logFile);
+            }
+
+            ve.init();
+
+            // Create the text generator.
+            Generator generator = Generator.getInstance();
+            generator.setVelocityEngine(ve);
+            generator.setOutputPath(outputDirectory);
+            generator.setInputEncoding(inputEncoding);
+            generator.setOutputEncoding(outputEncoding);
+
+            if (templatePath != null)
+            {
+                generator.setTemplatePath(templatePath);
+            }
+
+            // Make sure the output directory exists, if it doesn't
+            // then create it.
+            File file = new File(outputDirectory);
+            if (! file.exists())
+            {
+                file.mkdirs();
+            }
+
+            String path = outputDirectory + File.separator + outputFile;
+            log("Generating to file " + path, Project.MSG_INFO);
+            Writer writer = generator.getWriter(path, outputEncoding);
+
+            // The generator and the output path should
+            // be placed in the init context here and
+            // not in the generator class itself.
+            Context c = initControlContext();
+
+            // Everything in the generator class should be
+            // pulled out and placed in here. What the generator
+            // class does can probably be added to the Velocity
+            // class and the generator class can probably
+            // be removed all together.
+            populateInitialContext(c);
+
+            // Feed all the options into the initial
+            // control context so they are available
+            // in the control/worker templates.
+            if (contextProperties != null)
+            {
+                Iterator i = contextProperties.getKeys();
+
+                while (i.hasNext())
+                {
+                    String property = (String) i.next();
+                    String value = StringUtils.nullTrim(contextProperties.getString(property));
+
+                    // Now lets quickly check to see if what
+                    // we have is numeric and try to put it
+                    // into the context as an Integer.
+                    try
+                    {
+                        c.put(property, new Integer(value));
+                    }
+                    catch (NumberFormatException nfe)
+                    {
+                        // Now we will try to place the value into
+                        // the context as a boolean value if it
+                        // maps to a valid boolean value.
+                        String booleanString =
+                            contextProperties.testBoolean(value);
+
+                        if (booleanString != null)
+                        {
+                            c.put(property, Boolean.valueOf(booleanString));
+                        }
+                        else
+                        {
+                            // We are going to do something special
+                            // for properties that have a "file.contents"
+                            // suffix: for these properties will pull
+                            // in the contents of the file and make
+                            // them available in the context. So for
+                            // a line like the following in a properties file:
+                            //
+                            // license.file.contents = license.txt
+                            //
+                            // We will pull in the contents of license.txt
+                            // and make it available in the context as
+                            // $license. This should make texen a little
+                            // more flexible.
+                            if (property.endsWith("file.contents"))
+                            {
+                                // We need to turn the license file from relative to
+                                // absolute, and let Ant help :)
+                                value = StringUtils.fileContentsToString(
+                                    project.resolveFile(value).getCanonicalPath());
+
+                                property = property.substring(
+                                    0, property.indexOf("file.contents") - 1);
+                            }
+
+                            c.put(property, value);
+                        }
+                    }
+                }
+            }
+
+            writer.write(generator.parse(controlTemplate, c));
+            writer.flush();
+            writer.close();
+            generator.shutdown();
+            cleanup();
+        }
+        catch( BuildException e)
+        {
+            throw e;
+        }
+        catch( MethodInvocationException e )
+        {
+            throw new BuildException(
+                "Exception thrown by '" + e.getReferenceName() + "." +
+                    e.getMethodName() +"'" + ERR_MSG_FRAGMENT,
+                        e.getWrappedThrowable());
+        }
+        catch( ParseErrorException e )
+        {
+            throw new BuildException("Velocity syntax error" + ERR_MSG_FRAGMENT ,e);
+        }
+        catch( ResourceNotFoundException e )
+        {
+            throw new BuildException("Resource not found" + ERR_MSG_FRAGMENT,e);
+        }
+        catch( Exception e )
+        {
+            throw new BuildException("Generation failed" + ERR_MSG_FRAGMENT ,e);
+        }
+    }
+
+    /**
+     * <p>Place useful objects into the initial context.</p>
+     *
+     * <p>TexenTask places <code>Date().toString()</code> into the
+     * context as <code>$now</code>.  Subclasses who want to vary the
+     * objects in the context should override this method.</p>
+     *
+     * <p><code>$generator</code> is not put into the context in this
+     * method.</p>
+     *
+     * @param context The context to populate, as retrieved from
+     * {@link #initControlContext()}.
+     *
+     * @throws Exception Error while populating context.  The {@link
+     * #execute()} method will catch and rethrow as a
+     * <code>BuildException</code>.
+     */
+    protected void populateInitialContext(Context context)
+        throws Exception
+    {
+        context.put("now", new Date().toString());
+    }
+
+    /**
+     * A hook method called at the end of {@link #execute()} which can
+     * be overridden to perform any necessary cleanup activities (such
+     * as the release of database connections, etc.).  By default,
+     * does nothing.
+     *
+     * @exception Exception Problem cleaning up.
+     */
+    protected void cleanup()
+        throws Exception
+    {
+    }
+}

Propchange: velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/java/org/apache/texen/ant/TexenTask.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties (added)
+++ velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties Tue Apr  3 22:54:17 2007
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.    
+path.output=output
+context.objects.strings=org.apache.velocity.util.StringUtils
+context.objects.files=org.apache.velocity.texen.util.FileUtil
+context.objects.properties=org.apache.velocity.texen.util.PropertiesUtil

Propchange: velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/java/org/apache/texen/defaults/texen.properties
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java (added)
+++ velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,78 @@
+package org.apache.texen.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.File;
+
+/**
+ * A general file utility for use in the context
+ *
+ * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @version $Id$
+ */
+public class FileUtil
+{
+    /**
+     * Creates the directory s (and any parent directories needed).
+     *
+     * @param s path/directory to create.
+     * @return report of path/directory creation.
+     */
+    static public String mkdir (String s)
+    {
+        try
+        {
+            if ((new File(s)).mkdirs())
+                return "Created dir: "+s;
+            else
+                return "Failed to create dir or dir already exists: "+s;
+        }
+        catch (Exception e)
+        {
+            return e.toString();
+        }
+    }
+
+    /**
+     * A method to get a File object.
+     *
+     * @param s path to file object to create.
+     * @return File created file object.
+     */
+    public static File file(String s)
+    {
+        File f = new File(s);
+        return f;
+    }
+
+    /**
+     * A method to get a File object.
+     *
+     * @param base base path
+     * @param s file name
+     * @return File created file object.
+     */
+    public static File file(String base, String s)
+    {
+        File f = new File(base, s);
+        return f;
+    }
+}

Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/FileUtil.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java (added)
+++ velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,194 @@
+package org.apache.texen.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.FileInputStream;
+import java.io.InputStream;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.apache.velocity.texen.Generator;
+
+/**
+ * A property utility class for the texen text/code generator
+ * Usually this class is only used from a Velocity context.
+ *
+ * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
+ * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
+ * @version $Id$
+ */
+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(final String propertiesFile)
+    {
+        Properties properties = null;
+
+        String templatePath = Generator.getInstance().getTemplatePath();
+        try
+        {
+            if (templatePath != null)
+            {
+                properties = loadFromTemplatePath(propertiesFile);
+            }
+            else
+            {
+                properties = loadFromClassPath(propertiesFile);
+            }
+        }
+        catch (RuntimeException e)
+        {
+            throw e;
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException("Could not load properties: " + e.getMessage());
+        }
+
+        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.
+     * @throws Exception
+     */
+    protected Properties loadFromTemplatePath(final String propertiesFile)
+    	throws Exception
+    {
+        Properties properties = new Properties();
+        String templatePath = Generator.getInstance().getTemplatePath();
+
+        // 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())
+        {
+            String templateDir = st.nextToken();
+            InputStream stream = null;
+            try
+            {
+                // If the properties file is being pulled from the
+                // file system and someone is using the method whereby
+                // the properties file is assumed to be in the template
+                // path and they are simply using:
+                //
+                // #set ($dbprops = $properties.load("props") (1)
+                //
+                // than we have to tack on the templatePath in order
+                // 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.
+                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))
+                {
+                    fullPath = templateDir + "/" + propertiesFile;
+                }
+
+                stream = new FileInputStream(fullPath);
+                properties.load(stream);
+                // first pick wins, we don't need to go further since
+                // we found a valid file.
+                break;
+            }
+            finally
+            {
+        	if (stream != null)
+        	{
+        	    stream.close();
+        	}
+            }
+        }
+        return properties;
+    }
+
+    /**
+     * Load a properties file from the classpath
+     *
+     * @param propertiesName 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.
+     * @throws Exception
+     */
+    protected Properties loadFromClassPath(final String propertiesName)
+    	throws Exception
+    {
+        Properties properties = new Properties();
+        ClassLoader classLoader = this.getClass().getClassLoader();
+
+        InputStream inputStream = null;
+
+        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.
+
+            String propertiesFile = propertiesName.startsWith("$generator")
+        	    ? propertiesName.substring("$generator.templatePath/".length())
+    		    : propertiesName;
+
+    	    inputStream = classLoader.getResourceAsStream(propertiesFile);
+            properties.load(inputStream);
+        }
+        finally
+        {
+            if (inputStream != null)
+            {
+        	inputStream.close();
+            }
+        }
+        return properties;
+    }
+}

Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/java/org/apache/texen/util/PropertiesUtil.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java (added)
+++ velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,103 @@
+package org.apache.texen;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.File;
+
+import org.apache.texen.test.Log;
+import org.apache.texen.test.TestUtil;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+
+/**
+ * This is a test case for Texen. Simply executes a simple
+ * generative task and compares the output.
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @version $Id$
+ */
+public class TexenClasspathTestCase extends TestCase
+{
+    public static final String TEST_DIR_KEY = "test.compare.dir";
+    public static final String RESULTS_DIR_KEY = "test.results.dir";
+    
+    private String resultsDir;
+    private String compareDir;
+
+    /**
+     * Creates a new instance.
+     *
+     */
+    public TexenClasspathTestCase(String name)
+    {
+        super(name);
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite(TexenClasspathTestCase.class);
+    }
+
+    /**
+     * Find the directories.
+     */
+    public void setUp()
+    {
+        resultsDir = System.getProperty(RESULTS_DIR_KEY, "bin/test") + "/texen";
+        compareDir = System.getProperty(TEST_DIR_KEY, "test") + "/texen/compare";
+    }
+
+    /**
+     * Runs the test.
+     */
+    public void testTexenClasspath()
+            throws Exception
+    {
+        TestUtil.assureResultsDirectoryExists(resultsDir);
+
+        // compare with custom context
+        if (!TestUtil.compareFiles(
+                new File(compareDir, "TurbineWeather.java").toString(),
+                new File(resultsDir, "TurbineWeather.java").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "TurbineWeatherService.java").toString(),
+                    new File(resultsDir, "TurbineWeatherService.java").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "WeatherService.java").toString(),
+                    new File(resultsDir, "WeatherService.java").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "book.txt").toString(),
+                    new File(resultsDir, "book.txt").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "Text.txt").toString(),
+                    new File(resultsDir, "Text.txt").toString()) )
+        {
+            fail("Texen results are incorrect.");
+        }
+        else
+        {
+            Log.log ("Passed!");
+        }
+    }
+}

Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenClasspathTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java (added)
+++ velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,102 @@
+package org.apache.texen;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.File;
+
+import org.apache.texen.test.Log;
+import org.apache.texen.test.TestUtil;
+
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+
+
+/**
+ * This is a test case for Texen. Simply executes a simple
+ * generative task and compares the output.
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @version $Id$
+ */
+public class TexenTestCase extends TestCase
+{
+    public static final String TEST_DIR_KEY = "test.compare.dir";
+    public static final String RESULTS_DIR_KEY = "test.results.dir";
+    
+    private String resultsDir;
+    private String compareDir;
+
+    /**
+     * Creates a new instance.
+     *
+     */
+    public TexenTestCase(String name)
+    {
+        super(name);
+    }
+
+    public static junit.framework.Test suite()
+    {
+        return new TestSuite(TexenTestCase.class);
+    }
+
+    /**
+     * Find the directories.
+     */
+    public void setUp()
+    {
+        resultsDir = System.getProperty(RESULTS_DIR_KEY, "bin/test") + "/texen";
+        compareDir = System.getProperty(TEST_DIR_KEY, "test") + "/texen/compare";
+    }
+
+    /**
+     * Runs the test.
+     */
+    public void testTexenResults ()
+            throws Exception
+    {
+        TestUtil.assureResultsDirectoryExists(resultsDir);
+
+        // compare with custom context
+        if (!TestUtil.compareFiles(
+                new File(compareDir, "TurbineWeather.java").toString(),
+                new File(resultsDir, "TurbineWeather.java").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "TurbineWeatherService.java").toString(),
+                    new File(resultsDir, "TurbineWeatherService.java").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "WeatherService.java").toString(),
+                    new File(resultsDir, "WeatherService.java").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "book.txt").toString(),
+                    new File(resultsDir, "book.txt").toString()) ||
+            !TestUtil.compareFiles(
+                    new File(compareDir, "Text.txt").toString(),
+                    new File(resultsDir, "Text.txt").toString()) )
+        {
+            fail("Texen results are incorrect.");
+        }
+        else
+        {
+            Log.log ("Passed!");
+        }
+    }
+}

Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/test/org/apache/texen/TexenTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/test/org/apache/texen/test/Log.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/test/Log.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/test/org/apache/texen/test/Log.java (added)
+++ velocity/texen/trunk/src/test/org/apache/texen/test/Log.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,46 @@
+package org.apache.texen.test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+/**
+* Simple class to log messages when running tests
+*
+* @version $Id$
+*/
+
+public class Log
+{
+
+    /**
+     * Do not instantiate.
+     */
+    private Log ()
+    {   
+    }
+
+    /**
+     * Output a message;
+     * @param message
+     */
+    public static void log(String message)
+    {
+         System.out.println(message);
+    }
+}

Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/Log.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/Log.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java (added)
+++ velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,119 @@
+package org.apache.texen.test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.File;
+
+
+/**
+ * Miscellaneous routines to help with testing
+ *
+ * @version $Id$
+ */
+public class TestUtil
+{
+    
+    /**
+     * Do not instantiate.
+     */
+    private TestUtil()
+    {        
+    }
+
+    /**
+     * Assures that the results directory exists.  If the results directory
+     * cannot be created, fails the test.
+     */
+    public static void assureResultsDirectoryExists (String resultsDirectory)
+    {
+        File dir = new File(resultsDirectory);
+        if (!dir.exists())
+        {
+            Log.log("Template results directory does not exist");
+            if (dir.mkdirs())
+            {
+                Log.log("Created template results directory");
+            }
+            else
+            {
+                String errMsg = "Unable to create template results directory";
+                Log.log(errMsg);
+                throw new RuntimeException(errMsg);
+            }
+        }
+    }
+
+    /**
+     * Normalizes lines to account for platform differences.  Macs use
+     * a single \r, DOS derived operating systems use \r\n, and Unix
+     * uses \n.  Replace each with a single \n.
+     *
+     * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
+     * @return source with all line terminations changed to Unix style
+     */
+    public static String normalizeNewlines (String source)
+    {
+        return source.replaceAll("\r[\r]?[\n]","\n");
+    }
+
+    /**
+     * Returns whether the processed template matches the
+     * content of the provided comparison file.
+     *
+     * @return Whether the output matches the contents
+     *         of the comparison file.
+     *
+     * @exception Exception Test failure condition.
+     */
+    public static boolean compareFiles(String compareFileName, String resultsFileName)
+        throws Exception
+    {
+        Log.log("Comparing result file '" + resultsFileName + "' with compare file '" + compareFileName + "'"); 
+        String resultText = org.apache.velocity.util.StringUtils.fileContentsToString(resultsFileName);
+
+        return compareTextWithFile(resultText, compareFileName);
+    }
+
+    
+    /**
+     * Returns whether the processed template matches the
+     * content of the provided comparison file.
+     *
+     * @return Whether the output matches the contents
+     *         of the comparison file.
+     *
+     * @exception Exception Test failure condition.
+     */
+    public static boolean compareTextWithFile(String resultText, String compareFileName)
+        throws Exception
+    {
+        String compareText = org.apache.velocity.util.StringUtils.fileContentsToString(compareFileName);
+
+        /*
+         *  normalize each wrt newline
+         */
+
+        String normalizedResultText = normalizeNewlines(resultText);
+        String normalizedCompareText = normalizeNewlines(compareText);
+        return normalizedResultText.equals( normalizedCompareText );
+    }
+
+    
+}

Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/src/test/org/apache/texen/test/TestUtil.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/compare/Test.txt
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/Test.txt?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/compare/Test.txt (added)
+++ velocity/texen/trunk/test/texen-classpath/compare/Test.txt Tue Apr  3 22:54:17 2007
@@ -0,0 +1,11 @@
+# These should all evaluate to true
+
+true
+true
+true
+
+# These should all evaluate to false
+
+false
+false
+false

Propchange: velocity/texen/trunk/test/texen-classpath/compare/Test.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/compare/Test.txt
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java (added)
+++ velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,44 @@
+package org.apache.turbine.services.weather;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.turbine.services.TurbineServices;
+
+/**
+ *
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ */
+public class TurbineWeather
+{
+    /**
+     * Utility method for accessing the service 
+     * implementation
+     *
+     * @return a WeatherService implementation instance
+     */
+    protected static WeatherService getService()
+    {
+        return (WeatherService)TurbineServices
+            .getInstance().getService(WeatherService.SERVICE_NAME);
+    }
+}

Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeather.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java (added)
+++ velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,41 @@
+package org.apache.turbine.services.weather;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.turbine.services.TurbineBaseService;
+
+/**
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ */
+public class TurbineWeatherService extends TurbineBaseService
+    implements WeatherService
+
+{
+    /**
+     * Initialize the TurbineWeather Service.
+     */
+    public void init()
+    {
+        setInit(true);
+    }
+}

Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/compare/TurbineWeatherService.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java (added)
+++ velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,33 @@
+package org.apache.turbine.services.weather;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.turbine.services.Service;
+
+/**
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ */
+public interface WeatherService extends Service
+{
+    public static final String SERVICE_NAME = "TurbineWeatherService";
+}

Propchange: velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/compare/WeatherService.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/compare/book.txt
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/compare/book.txt?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/compare/book.txt (added)
+++ velocity/texen/trunk/test/texen-classpath/compare/book.txt Tue Apr  3 22:54:17 2007
@@ -0,0 +1,15 @@
+This is the book of the week:
+
+Props retrieved using new method:
+
+Title: Consilience: The Unity of Knowledge
+Author: Edward O. Wilson
+Publisher: Knopf
+ISBN: 0965058305
+
+Props retrieved using old method:
+
+Title: Consilience: The Unity of Knowledge
+Author: Edward O. Wilson
+Publisher: Knopf
+ISBN: 0965058305

Propchange: velocity/texen/trunk/test/texen-classpath/compare/book.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/compare/book.txt
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,25 @@
+#set ( $sourceFile = "Turbine${baseName}Service.java" )
+$generator.parse("ServiceImplementation.vm",$sourceFile)
+
+#set ( $sourceFile = "${baseName}Service.java" )
+$generator.parse("ServiceInterface.vm",$sourceFile)
+
+#set ( $sourceFile = "Turbine${baseName}.java" )
+$generator.parse("ServiceStaticHelper.vm",$sourceFile)
+
+#set ( $sourceFile = "Test.txt" )
+$generator.parse("Test.vm",$sourceFile)
+
+#set ( $props = $properties.load("test.props") )
+
+## This is to test a properties file that was once taken from
+## the file system but is now taken from a JAR. We have to
+## deprecate the use of $generator.TemplatePath if we want
+## templates to work the same way from JARs and the file
+## system. I have a hack in PropsUtil right now to deal
+## with it.
+
+#set ( $props2 = $properties.load("$generator.TemplatePath/test.props") )
+
+#set ( $sourceFile = "book.txt" )
+$generator.parse("book.vm",$sourceFile)

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Control.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,22 @@
+package $package;
+
+$license
+
+import org.apache.turbine.services.TurbineBaseService;
+
+/**
+ *
+ * @author <a href="mailto:$email">$name</a>
+ */
+public class Turbine${baseName}Service extends TurbineBaseService
+    implements ${baseName}Service
+
+{
+    /**
+     * Initialize the Turbine${baseName} Service.
+     */
+    public void init()
+    {
+        setInit(true);
+    }
+}

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceImplementation.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,14 @@
+package $package;
+
+$license
+
+import org.apache.turbine.services.Service;
+
+/**
+ *
+ * @author <a href="mailto:$email">$name</a>
+ */
+public interface ${baseName}Service extends Service
+{
+    public static final String SERVICE_NAME = "Turbine${baseName}Service";
+}

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceInterface.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,25 @@
+package $package;
+
+$license
+
+import org.apache.turbine.services.TurbineServices;
+
+/**
+ *
+ *
+ * @author <a href="mailto:$email">$name</a>
+ */
+public class Turbine$baseName
+{
+    /**
+     * Utility method for accessing the service 
+     * implementation
+     *
+     * @return a ${baseName}Service implementation instance
+     */
+    protected static ${baseName}Service getService()
+    {
+        return (${baseName}Service)TurbineServices
+            .getInstance().getService(${baseName}Service.SERVICE_NAME);
+    }
+}

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/ServiceStaticHelper.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,11 @@
+# These should all evaluate to true
+
+$one
+$two
+$three
+
+# These should all evaluate to false
+
+$four
+$five
+$six

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/Test.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,15 @@
+This is the book of the week:
+
+Props retrieved using new method:
+
+Title: $props.get("title")
+Author: $props.get("author")
+Publisher: $props.get("publisher")
+ISBN: $props.get("isbn")
+
+Props retrieved using old method:
+
+Title: $props2.get("title")
+Author: $props2.get("author")
+Publisher: $props2.get("publisher")
+ISBN: $props2.get("isbn")

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/book.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt Tue Apr  3 22:54:17 2007
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.    
+ */
+

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/jar-contents/license.txt
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/service.props
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/service.props?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/service.props (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/service.props Tue Apr  3 22:54:17 2007
@@ -0,0 +1,34 @@
+baseName=Weather
+package=org.apache.turbine.services.weather
+name=Jason van Zyl
+email=jvanzyl@apache.org
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.    
+
+license.file.contents = test/texen/license.txt
+
+# Test some properties that have be give some boolean
+# values.
+
+one = true
+two = yes
+three = on
+
+four = false
+five = no
+six = off

Added: velocity/texen/trunk/test/texen-classpath/jar-contents/test.props
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/jar-contents/test.props?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/jar-contents/test.props (added)
+++ velocity/texen/trunk/test/texen-classpath/jar-contents/test.props Tue Apr  3 22:54:17 2007
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.    
+author = Edward O. Wilson
+title = Consilience: The Unity of Knowledge
+publisher = Knopf
+isbn = 0965058305

Added: velocity/texen/trunk/test/texen-classpath/mkjar.sh
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/mkjar.sh?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen-classpath/mkjar.sh (added)
+++ velocity/texen/trunk/test/texen-classpath/mkjar.sh Tue Apr  3 22:54:17 2007
@@ -0,0 +1,24 @@
+# !/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.    
+
+(
+  cd jar-contents
+  rm -f ../test.jar
+  jar cvf ../test.jar *
+)

Propchange: velocity/texen/trunk/test/texen-classpath/mkjar.sh
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen-classpath/mkjar.sh
------------------------------------------------------------------------------
    svn:executable = *

Propchange: velocity/texen/trunk/test/texen-classpath/mkjar.sh
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen-classpath/test.jar
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen-classpath/test.jar?view=auto&rev=525422
==============================================================================
Binary file - no diff available.

Propchange: velocity/texen/trunk/test/texen-classpath/test.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: velocity/texen/trunk/test/texen/additional.props
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/additional.props?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/additional.props (added)
+++ velocity/texen/trunk/test/texen/additional.props Tue Apr  3 22:54:17 2007
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.    
+occupation=somnambulist

Added: velocity/texen/trunk/test/texen/compare/Test.txt
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/Test.txt?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/compare/Test.txt (added)
+++ velocity/texen/trunk/test/texen/compare/Test.txt Tue Apr  3 22:54:17 2007
@@ -0,0 +1,11 @@
+# These should all evaluate to true
+
+true
+true
+true
+
+# These should all evaluate to false
+
+false
+false
+false

Propchange: velocity/texen/trunk/test/texen/compare/Test.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/compare/Test.txt
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/compare/TurbineWeather.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/TurbineWeather.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/compare/TurbineWeather.java (added)
+++ velocity/texen/trunk/test/texen/compare/TurbineWeather.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,45 @@
+package org.apache.turbine.services.weather;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.turbine.services.TurbineServices;
+
+/**
+ *
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @occupation somnambulist
+ */
+public class TurbineWeather
+{
+    /**
+     * Utility method for accessing the service 
+     * implementation
+     *
+     * @return a WeatherService implementation instance
+     */
+    protected static WeatherService getService()
+    {
+        return (WeatherService)TurbineServices
+            .getInstance().getService(WeatherService.SERVICE_NAME);
+    }
+}

Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeather.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeather.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java (added)
+++ velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,42 @@
+package org.apache.turbine.services.weather;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.turbine.services.TurbineBaseService;
+
+/**
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @occupation somnambulist
+ */
+public class TurbineWeatherService extends TurbineBaseService
+    implements WeatherService
+
+{
+    /**
+     * Initialize the TurbineWeather Service.
+     */
+    public void init()
+    {
+        setInit(true);
+    }
+}

Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/compare/TurbineWeatherService.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/compare/WeatherService.java
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/WeatherService.java?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/compare/WeatherService.java (added)
+++ velocity/texen/trunk/test/texen/compare/WeatherService.java Tue Apr  3 22:54:17 2007
@@ -0,0 +1,34 @@
+package org.apache.turbine.services.weather;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.turbine.services.Service;
+
+/**
+ *
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @occupation somnambulist
+ */
+public interface WeatherService extends Service
+{
+    public static final String SERVICE_NAME = "TurbineWeatherService";
+}

Propchange: velocity/texen/trunk/test/texen/compare/WeatherService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/compare/WeatherService.java
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/compare/book.txt
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/compare/book.txt?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/compare/book.txt (added)
+++ velocity/texen/trunk/test/texen/compare/book.txt Tue Apr  3 22:54:17 2007
@@ -0,0 +1,15 @@
+This is the book of the week:
+
+Props retrieved using new method:
+
+Title: Consilience: The Unity of Knowledge
+Author: Edward O. Wilson
+Publisher: Knopf
+ISBN: 0965058305
+
+Props retrieved using old method:
+
+Title: Consilience: The Unity of Knowledge
+Author: Edward O. Wilson
+Publisher: Knopf
+ISBN: 0965058305

Propchange: velocity/texen/trunk/test/texen/compare/book.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/compare/book.txt
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/license.txt
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/license.txt?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/license.txt (added)
+++ velocity/texen/trunk/test/texen/license.txt Tue Apr  3 22:54:17 2007
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.    
+ */
+

Propchange: velocity/texen/trunk/test/texen/license.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/license.txt
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/service.props
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/service.props?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/service.props (added)
+++ velocity/texen/trunk/test/texen/service.props Tue Apr  3 22:54:17 2007
@@ -0,0 +1,34 @@
+baseName=Weather
+package=org.apache.turbine.services.weather
+name=Jason van Zyl
+email=jvanzyl@apache.org
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.    
+
+license.file.contents = test/texen/license.txt
+
+# Test some properties that have be give some boolean
+# values.
+
+one = true
+two = yes
+three = on
+
+four = false
+five = no
+six = off

Added: velocity/texen/trunk/test/texen/templates/Control.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/templates/Control.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/templates/Control.vm (added)
+++ velocity/texen/trunk/test/texen/templates/Control.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,25 @@
+#set ( $sourceFile = "Turbine${baseName}Service.java" )
+$generator.parse("ServiceImplementation.vm",$sourceFile)
+
+#set ( $sourceFile = "${baseName}Service.java" )
+$generator.parse("ServiceInterface.vm",$sourceFile)
+
+#set ( $sourceFile = "Turbine${baseName}.java" )
+$generator.parse("ServiceStaticHelper.vm",$sourceFile)
+
+#set ( $sourceFile = "Test.txt" )
+$generator.parse("Test.vm",$sourceFile)
+
+#set ( $props = $properties.load("test.props") )
+
+## This is to test a properties file that was once taken from
+## the file system but is now taken from a JAR. We have to
+## deprecate the use of $generator.TemplatePath if we want
+## templates to work the same way from JARs and the file
+## system. I have a hack in PropsUtil right now to deal
+## with it.
+
+#set ( $props2 = $properties.load("$generator.TemplatePath/test.props") )
+$generator.TemplatePath/test.props
+#set ( $sourceFile = "book.txt" )
+$generator.parse("book.vm",$sourceFile)

Propchange: velocity/texen/trunk/test/texen/templates/Control.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/templates/Control.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision

Added: velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm
URL: http://svn.apache.org/viewvc/velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm?view=auto&rev=525422
==============================================================================
--- velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm (added)
+++ velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm Tue Apr  3 22:54:17 2007
@@ -0,0 +1,23 @@
+package $package;
+
+$license
+
+import org.apache.turbine.services.TurbineBaseService;
+
+/**
+ *
+ * @author <a href="mailto:$email">$name</a>
+ * @occupation $occupation
+ */
+public class Turbine${baseName}Service extends TurbineBaseService
+    implements ${baseName}Service
+
+{
+    /**
+     * Initialize the Turbine${baseName} Service.
+     */
+    public void init()
+    {
+        setInit(true);
+    }
+}

Propchange: velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: velocity/texen/trunk/test/texen/templates/ServiceImplementation.vm
------------------------------------------------------------------------------
    svn:keywords = Id Author Date Revision



Mime
View raw message